ВКЛ ВЫКЛ света в комнате
- Войдите на сайт для отправки комментариев
#include <LiquidCrystal.h> #include "Ultrasonic.h" // Trig - 2, Echo - 3 Ultrasonic IN2(2, 3); // сонар в двери // Trig - 6, Echo - 5 Ultrasonic START2(11, 10); // сонар для подсчета const int RelayChn3 = 13; // реле //lcd //pin 4 -- RS //pin 5 -- E //pin 6 -- D4 //pin 7 -- D5 //pin 8 -- D6 //pin 9 -- D7 LiquidCrystal lcd(4,5,6,7,8,9); int i=0; // количество людей unsigned long IN2_2= 0; //когда сработал IN1 unsigned long START2_2= 0; //когда сработал START2 unsigned long previousMillis21= 0; unsigned long IN_interval21= 2000; // интервал измерения IN сонаром unsigned long previousMillis22= 0; unsigned long START_interval22= 2000; // интервал измерения START сонаром unsigned long previousMillis23= 0; unsigned long START_interval23= 1000; // время подсчета количества людей void setup() { Serial.begin(9600); lcd.begin(16, 2); // start the serial port pinMode (RelayChn3, OUTPUT); digitalWrite(RelayChn3, HIGH); } void loop() { float distIN2 = IN2.Ranging(CM); delay(20); float distSTART2 = START2.Ranging(CM); delay(20); // ОТРАБОТКА СОНАРА IN2__В ДВЕРЯХ if(distIN2 < 60){ IN2_2= millis(); previousMillis21 = millis(); } // ВРЕМЯ ЗАМЕРА 0.5 сек. if(previousMillis21 && (millis()-previousMillis21 >= IN_interval21)) { if(START2_2==0) {IN2_2=0;} previousMillis21 = 0; } // ОТРАБОТКА СОНАРА START__контроль в помещении if(distSTART2 < 80){ START2_2= millis(); previousMillis22 = millis(); } // ВРЕМЯ ЗАМЕРА 0.5 сек. if(previousMillis22 && (millis()-previousMillis22 >= START_interval22)) { if(IN2_2==0) {START2_2=0;} previousMillis22 = 0; } lcd.setCursor(10, 0); lcd.print(distSTART2); // ПОДСЧЕТ ЛЮДЕЙ плюс if (IN2_2 > 100&&START2_2 >100&&( IN2_2 < START2_2)) { i=i+1; IN2_2=0; START2_2=0; } if(previousMillis23 && (millis()-previousMillis23 >= START_interval23)) { previousMillis23 = millis(); IN2_2=0; START2_2=0; } lcd.setCursor(0, 0); lcd.print(distIN2); // минус // ПОДСЧЕТ ЛЮДЕЙ if (IN2_2 > 100&&START2_2 > 100&&i >= 1&&( IN2_2 > START2_2)) { i=i-1; IN2_2=0; START2_2=0; } if(previousMillis23 && (millis()-previousMillis23 >= START_interval23)) { previousMillis23 = millis(); } // Если i=0 и выход if (IN2_2 > 100&&START2_2 > 100&&i ==0 &&( IN2_2 > START2_2)) { IN2_2=0; START2_2=0; i=0; } lcd.setCursor(7, 1); lcd.print(i); // ВКЛЮЧЕНИЕ СВЕТА if(i>=1) { digitalWrite(RelayChn3, LOW); } else { digitalWrite(RelayChn3, HIGH); } if(previousMillis23 && (millis()-previousMillis23 >= START_interval23)) { previousMillis23 = millis(); }
доброго времени суток идея умного дома.
есть 2 ультрасоника, и реле и УНА. сонары расположены друг от друга примерно на 20-30 см, реле соответственно вкл выкл свет в комнате.
надо что бы пройдя над сонарами в одну сторону свет включился, если прошел кто то еще, он их посчитал, теперь при выходе пока все не выйдут реле не отключится,
собственно так этот код и работает, но есть тонкости... иногда при выходе сонары считают как будто один входит и тут же выходит, так получается , если 2 зашло и сонары тупанули, то выходить приходиться троим или четвером.
а в идеале надо, что бы сонары считали в обе стороны, и на вход и на выход, и если переходя их одной комнаты в другую, то в одной комнате свет выключается а в другой включается. по принципу если в комнате 0 человек то в комнате свет не горит, если больше 0 то горит
А сами сонары так умеют? Не понял сразу, сонары стоят последовательно? Время опроса по моему большое.
... а если прошли двое в обнимку :)
Или проползли ? :)))))))))
Обработка энкодера самый по моему мнению нормальный вариант.
сонары так умеют! HС-SR04. код работает, время опроса уменьшил, стало лучше, но проблема осталась, но уменшить растояние до 20-30 см (сейчас 50-60 см), и при перекрывании обоих сонаров начинает беспорядочно работать счетчик (а основном на +)
... а если прошли двое в обнимку :)
при выходе по очереди ктото останется без света, или пусть так же заходят
Или проползли ? :)))))))))
вы дома часто ползайте по полу?)))
Обработка энкодера самый по моему мнению нормальный вариант.
есть где про это можно прочитат
вы дома часто ползайте по полу?)))
Ну, жизненные ситуации всякие бывают ))))))).
http://arduino.ru/forum/apparatnye-voprosy/ispolzuem-enkoder
Вот, http://arduino.ru/forum/obshchii/schetchik-posetitelei-v-kompaktnom-ispolnenii , может пригодится.