// Библиотека для работы с фоторезистором #include // Библиотека для работы с текстовым дисплеем по шине I²C #include // Даём понятное имя пину с потенциометром constexpr int POT_PIN = A2; // Даём понятное имя пину с фоторезистором constexpr int LDR_PIN = A3; // Создаём объект для работы с фоторезистором TroykaLight ldr(LDR_PIN); // Создаём объект для работы с дисплеем // В параметрах передаём I²C-адрес дисплея, кол-во строк и символов LiquidCrystal_I2C lcd(0x38, 16, 2); long ldrLight; long lightNormal; int hyster; // Переменная для хранения кол-ва проходящих нарушителей int passCount = 0; void setup() { // Настраиваем пин с пищалкой в режим выхода pinMode(BUZZER_PIN, OUTPUT); // Инициализируем дисплей lcd.init(); // Включаем подсветку lcd.backlight(); // Устанавливаем курсор на первом знакоместе в первой строке lcd.setCursor(0, 0); // Выводим строку на дисплей lcd.print("Security system"); // Устанавливаем курсор на первом знакоместе во второй строке lcd.setCursor(0, 1); // Выводим строку на дисплей lcd.print("Pass count: "); // Печатаем кол-во проходящих нарушителей lcd.print(passCount); // Считываем данные с фоторезистора ldr.read(); // Запрашиваем освещенность у фоторезистора ldrLight = ldr.getLightLux(); // Корректируем значение штатного освещения и гистерезиса updateLightNormal(ldrLight); } void loop() { // Считываем данные с фоторезистора ldr.read(); // Запрашиваем освещенность у фоторезистора ldrLight = ldr.getLightLux(); if (ldrLight < lightNormal - hyster) { // Если уровень освещённости падает ниже нормального с учётом гистерезиса lcd.setCursor(12, 1); // Обновляем кол-во нарушителей lcd.print(++passCount); // Пищим зуммеров playMelodyAlarm(); } else { // Корректируем значение штатного освещения и гистерезиса updateLightNormal(ldrLight); } delay(100); } // Функция для корректировки значений штатного освещения и гистерезиса void updateLightNormal(long ldrLight) { lightNormal = ldrLight; hyster = lightNormal * 0.1 + 50; } // Функция для воспроизведения сигнала тревоги void playMelodyAlarm() { for (int i = 0; i <= 2; i++) { tone(BUZZER_PIN, 200, 300); delay(200); tone(BUZZER_PIN, 120, 300); delay(200); } }