Светодиодное освещение - помощь с фоторезистором
- Войдите на сайт для отправки комментариев
Ср, 03/02/2016 - 03:50
Доброго! Делаю освещение рабочей зоны на кухне. Основные компоненты: arduino pro mini, два куска светодиодной ленты (большой и маленький), pir-датчик, фоторезистор. Цель: включение светодиодных лент при недостаточном освещении по сигналу от pir-датчика и соответственно наоборот - чтобы не включались днем. Собрал на макетке, практически получилось, но где-то накосячил в скетче, в результате - когда светло ленты не включаются (как и должно быть), а при недостаточном освещении загораются, но буквально на 3 секунды. За основу брал чужой скетч, т.к. тяжело с программированием, немного раньше баловался с Паскалем в универе - вот и весь опыт. Подскажите, где ошибка?
#define big_led 3 // пин большой ленты #define small_led 6 // пин малой ленты #define senspin 10 // пин датчика движения #define statled 13 // встроенный светодиод для контроля #define FOTO A0 // пин фоторезистора #define pause 10 int stat=0; // глобальные переменные boolean sens=0; int I=0; void setup (){ pinMode (big_led, OUTPUT); // конфигурируем пины pinMode (small_led, OUTPUT); pinMode (statled, OUTPUT); // pinMode (BR, OUTPUT); pinMode (senspin,INPUT); Serial.begin(9600); //вывод для отладки digitalWrite (big_led, LOW); // устанавливаем ленты в ноль digitalWrite (small_led, LOW); digitalWrite(FOTO, HIGH); } void loop(){ // основной цикл Serial.println(analogRead(FOTO)); Serial.println(" "); delay(10); static bool state, state0; if (analogRead(FOTO) > 960) state0 = 1; // включение - выключение дежурки if (analogRead(FOTO) < 940) // гистерезис отключения дежурки { state0 = 0; analogWrite(small_led, LOW); analogWrite(big_led, LOW); } if (analogRead(FOTO) < 700) state = 1; // порог освещенности включения //else analogWrite(big_led, LOW); if (analogRead(FOTO) > 985) state = 0; // порог освещенности выключения //else analogWrite(big_led, HIGH); // âêëþ÷àåì íî÷íóþ ïîäñâåòêó if (state) sens=digitalRead(senspin); digitalWrite(statled, sens); //встроенный диод горит, если есть движение Serial.print("Motion Sensor: "); Serial.print(sens); Serial.print("/ Mode: "); Serial.println(stat); // вывод для отладки if (sens==1 && stat==0) stat=2; if (sens==1 && stat==4) stat=2; if (I!=0) restart(I); switch (stat){ // выбор следующего действия (горит,вкл,выкл) case 0: digitalWrite (big_led,LOW);digitalWrite (small_led,LOW); break; case 1: looking(); break; case 2: led_on(); break; case 4: led_off(); break; } } void led_on(){ // плавное включение лент по очереди int i=0; int i2=0; for (int i=0; i <=255; i++){ analogWrite (big_led,i); if (i>50) i2=i2+2; if (i2>255) i2=255; analogWrite (small_led,i2); delay (10); stat=1; } } void led_off(){ // плавно выключаем ленты for (int i=255; i >= 0; i--){ analogWrite(big_led, i); analogWrite(small_led, i); sens=digitalRead(senspin); if (sens==1) {I=i;break;} delay(10);} stat=0; } void looking(){ // пока горит свет, слушаем датчик int Q=0; // для определения присутствия for (int C=0; C<150;C++){ Q=Q+digitalRead(senspin);delay(200);} if (Q!=0) stat=1; else stat=4; } void restart(int i){ // если свет начал гаснуть и случилось движение do // плавно выводим яркость в максимальное значение {analogWrite (big_led,i); analogWrite (small_led,i); i++; delay (10);} while (i<=255); I=0; stat=1; }
А датчик освещения у вас где расположен? Свет от подсветки на него попадает?
Если подсветка включается и освещает датчик, то понятное дело ваша система думает, что светло и гасит подсветку.
Но тогда у вас освещение должно загораться и гаснуть.
Где стоит датчик освещенности? Когда лента включается, она сама себя не гасит?
Я реализовал такой проект, стоит дома и работает уже около года. Фоторезистор не использовал за ненадобностью, освещения в рабочей зоне всегда не хватает. Так же реализовал управление освещением с помощью ИК пульта от телевизора. С пульта можно менять задержку на отключение освещения, включать режим "на 1час" (бывает что супруга чем то мелким занимается, и ПИР-датчик не видит движения, при включении этого режима, не зависимо от движения, освещение отключится через час.). Включать режим "постоянно включено" (работают только механические выключатели. тоже бывает необходим). Все режимы индицируются с помощью одного светодиода (частота моргания). Сначала использовал ленту RGB, не устроило то, что добиться нормального бело света, практически невозможно. Заменил на жесткие светодиодные линеки, вставил их в аллюминивый светодиодный профиль, стало очень светло, теперь думаю ввести диммирование )))))) . Фото---
https://yadi.sk/i/7_sgO_WuoD7NJ
А датчик освещения у вас где расположен? Свет от подсветки на него попадает?
Если подсветка включается и освещает датчик, то понятное дело ваша система думает, что светло и гасит подсветку.
Но тогда у вас освещение должно загораться и гаснуть.
Датчик освещенности на макетной плате :-) Блин, совсм забыл про возможную самозасветку. Вечером проверю и отпишусь.
Я реализовал такой проект, стоит дома и работает уже около года. Фоторезистор не использовал за ненадобностью, освещения в рабочей зоне всегда не хватает. Так же реализовал управление освещением с помощью ИК пульта от телевизора. С пульта можно менять задержку на отключение освещения, включать режим "на 1час" (бывает что супруга чем то мелким занимается, и ПИР-датчик не видит движения, при включении этого режима, не зависимо от движения, освещение отключится через час.). Включать режим "постоянно включено" (работают только механические выключатели. тоже бывает необходим). Все режимы индицируются с помощью одного светодиода (частота моргания). Сначала использовал ленту RGB, не устроило то, что добиться нормального бело света, практически невозможно. Заменил на жесткие светодиодные линеки, вставил их в аллюминивый светодиодный профиль, стало очень светло, теперь думаю ввести диммирование )))))) . Фото---
https://yadi.sk/i/7_sgO_WuoD7NJ
Вариант без датчика света тоже рассматривал, но кухня находится с южной стороны и большую часть активного времени хорошо освещается (естественнно не зимой с коротким световым днем). Время на задержку отключения можно любое поставить. Львиная доля походов на кухню в область рабочей зоны связана с: попить чая/воды, отрезать хлеба/булки, на это времени много не нужно. Режим "постоянно включено" тоже будет, как раз для ситуаций, когда готовится еда. Что касается лент, то они на разных светодиодах бывают, я использовал на 5630, на мой взгляд яркости хватает. Купил для них аллюминиевый профиль с дефлекторами.
Знакомая ситуация с освещением: http://bash.im/quote/408905
Протестировал. Всё-таки ошибка в скетче. .
Протестировал. Всё-таки ошибка в скетче. .
а где то ошибка была? скетч исправленый выложи