Этот скетч реализует энергоэффективное уличное освещение, которое:
Включает свет только при наступлении темноты (по данным датчика освещенности)
Активирует полную яркость только при обнаружении движения
Поддерживает экономичный режим (30% яркости) в остальное время
Необходимые компоненты:
Плата Arduino (Uno/Nano)
Фоторезистор (датчик освещенности)
ИК-датчик движения (PIR, например HC-SR501)
Светодиодная лента (или мощный LED с MOSFET)
Резисторы: 10 кОм (для фоторезистора), 220 Ом (для индикаторного LED)
MOSFET транзистор (IRLZ44N или аналогичный)
Макетная плата и провода
Полный скетч
// Пины подключения #define LIGHT_SENSOR A0 // Фоторезистор #define PIR_SENSOR 2 // Датчик движения #define LED_PIN 9 // Управление светом (PWM) #define INDICATOR_LED 13 // Встроенный LED для отладки // Настройки const int DARK_THRESHOLD = 300; // Порог "темноты" (0-1023) const int BRIGHTNESS_FULL = 255; // Полная яркость (PWM) const int BRIGHTNESS_DIM = 76; // 30% яркости (255*0.3) const unsigned long MOTION_TIMEOUT = 30000; // 30 сек после движения // Переменные bool motionDetected = false; unsigned long lastMotionTime = 0; void setup() { pinMode(LIGHT_SENSOR, INPUT); pinMode(PIR_SENSOR, INPUT); pinMode(LED_PIN, OUTPUT); pinMode(INDICATOR_LED, OUTPUT); Serial.begin(9600); Serial.println("Smart Street Light System Started"); } void loop() { // 1. Чтение датчиков int lightLevel = analogRead(LIGHT_SENSOR); bool currentMotion = digitalRead(PIR_SENSOR); // 2. Логика определения движения if (currentMotion) { motionDetected = true; lastMotionTime = millis(); digitalWrite(INDICATOR_LED, HIGH); } else if (millis() - lastMotionTime > MOTION_TIMEOUT) { motionDetected = false; digitalWrite(INDICATOR_LED, LOW); } // 3. Управление освещением if (lightLevel < DARK_THRESHOLD) { // Если темно if (motionDetected) { analogWrite(LED_PIN, BRIGHTNESS_FULL); // Полный свет } else { analogWrite(LED_PIN, BRIGHTNESS_DIM); // Экономный режим } } else { analogWrite(LED_PIN, 0); // Выключить днем } // 4. Отладочный вывод Serial.print("Light: "); Serial.print(lightLevel); Serial.print(" | Motion: "); Serial.println(motionDetected ? "DETECTED" : "none"); delay(500); // Необязательная задержка }
Как это работает:
Датчик освещенности (фоторезистор):
Измеряет уровень света (0-1023)
При значении ниже DARK_THRESHOLD система активируется
PIR-датчик:
Обнаруживает движение в радиусе 5-7 метров
При обнаружении включает полную яркость на MOTION_TIMEOUT (30 сек)
ШИМ-управление (PWM):
Полная яркость: 255 (100%)
Экономный режим: 76 (30%)
Полное выключение днем
Индикация:
Встроенный LED на пине 13 дублирует статус движения
Serial Monitor выводит текущие показания
Подключение компонентов:
Фоторезистор:
Один вывод → 5V
Другой вывод → A0 + 10 кОм резистор → GND
PIR датчик:
VCC → 5V
GND → GND
OUT → D2
LED лента:
"+" → MOSFET сток
"-" → GND
MOSFET затвор → D9 (через 220 Ом)
MOSFET исток → GND
Калибровка системы:
Подстройте DARK_THRESHOLD под ваши условия:
// Измерьте значения при разных условиях: Serial.print("Current light: "); Serial.println(analogRead(LIGHT_SENSOR));
Настройте чувствительность PIR-датчика (потенциометры на модуле)
Улучшения:
Добавьте LDR-калибровку при запуске:
void calibrateLightSensor() { int avg = 0; for(int i=0; i<10; i++) { avg += analogRead(LIGHT_SENSOR); delay(500); } DARK_THRESHOLD = (avg / 10) - 100; // Автоподстройка }
Режим тестирования с кнопкой:
#define TEST_BUTTON 4 if(digitalRead(TEST_BUTTON)) { analogWrite(LED_PIN, 255); // Принудительное включение }
WiFi-мониторинг (для ESP8266):
// Отправка данных в MQTT/Telegram
Применение:
Уличное освещение
Подсветка коридоров
Автоматизация парковок
Системы безопасности
Этот скетч экономит до 70% энергии по сравнению с постоянным освещением!