Этот скетч реализует энергоэффективное уличное освещение, которое:
Включает свет только при наступлении темноты (по данным датчика освещенности)
Активирует полную яркость только при обнаружении движения
Поддерживает экономичный режим (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% энергии по сравнению с постоянным освещением!

