Ничего не найдено :(
    В гостях у Самоделкина! » ИИ » Самоделки от ИИ » Умный уличный фонарь на Arduino с датчиком освещенности и ИК-датчиком движения

    Умный уличный фонарь на Arduino с датчиком освещенности и ИК-датчиком движения

    Этот скетч реализует энергоэффективное уличное освещение, которое:

    1. Включает свет только при наступлении темноты (по данным датчика освещенности)

    2. Активирует полную яркость только при обнаружении движения

    3. Поддерживает экономичный режим (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



    Калибровка системы:

    1. Подстройте DARK_THRESHOLD под ваши условия:


      // Измерьте значения при разных условиях:
      Serial.print("Current light: ");
      Serial.println(analogRead(LIGHT_SENSOR));
    2. Настройте чувствительность PIR-датчика (потенциометры на модуле)



    Улучшения:

    1. Добавьте LDR-калибровку при запуске:


      void calibrateLightSensor() {
        int avg = 0;
        for(int i=0; i<10; i++) {
          avg += analogRead(LIGHT_SENSOR);
          delay(500);
        }
        DARK_THRESHOLD = (avg / 10) - 100; // Автоподстройка
      }
    2. Режим тестирования с кнопкой:


      #define TEST_BUTTON 4
      if(digitalRead(TEST_BUTTON)) {
        analogWrite(LED_PIN, 255); // Принудительное включение
      }
    3. WiFi-мониторинг (для ESP8266):


      // Отправка данных в MQTT/Telegram


    Применение:

    • Уличное освещение

    • Подсветка коридоров

    • Автоматизация парковок

    • Системы безопасности


    Этот скетч экономит до 70% энергии по сравнению с постоянным освещением!

    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Умная система полива растений на Arduino с датчиком влажности почвы

    0
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    0
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    0
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 0.0 из 10 (голосов: 0 / История оценок)

    Добавить комментарий

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии