В сети много статей по автоматизации освещения в ванной комнате, большая их часть основана на датчиках движения или объема. Кто-то даже делал на основе видео камеры, вариант интересный, но есть шанс стать «звездой» youtube’а. Изучив различные варианты их преимущества и недостатки я задался вопросом, а почему практически никто не делает автоматическое включение света на основе обычного счетчика посетителей. Ведь посчитав входящих и выходящих можно однозначно судить есть ли кто в помещении или нет и соответственно включать или выключать свет.
Для изготовления счетчика были приобретены два ИК датчика расстояния E18-D80NK и Arduino Pro Mini. Стоимость на момент покупки была 250 руб. и 60 руб. соответственно.
Принципиальная схема (кликабельно).
Датчики врезаны в дверную коробку.
Так как автоматизация освещения ванной комнаты является частью системы умного дома, устройство было разделено на две части. Первая часть, это собственно сама логика датчика определения направления движения, а подсчетом количества зашедших\вышедших и включением освещения занимается уже вторая часть — контроллер освещения (КО).
Arduino ProMini фиксирует направление движения и формирует на выходе импульсы, которые поступают на КО, тот в свою очередь занимается подсчетом и включением\отключением света.
bool flag = 0; bool flag2 = 0; bool state = 0; bool state2 = 0; int DoorPin = 10; //Геркон int pause = 500; int StatusDoor = 0; int status1 = 0; int status2 = 0; void setup() { pinMode(13, OUTPUT); // Импульс если зашли pinMode(12, OUTPUT); // Импульс если вышли pinMode(DoorPin, INPUT); digitalWrite(DoorPin, HIGH); // включить подтягивающий резистор pinMode(2, INPUT); pinMode(3, INPUT); digitalWrite( 12 , LOW ); digitalWrite( 13 , LOW ); } void loop() { StatusDoor = digitalRead(DoorPin); // узнаём состояние двери if (StatusDoor == HIGH) { // Если Дверь открыта, считаем сколько зашло if (!digitalRead(2) && !flag) { delay(5); flag = 1; if (flag2 == 0) { state = 1; } } if (!digitalRead(3) && !flag2) { delay(5); flag2 = 1; if (flag == 0) { state2 = 1; } } if (digitalRead(3) && digitalRead(2)) { if (!flag || !flag2) { state = 0; state2 = 0; flag = 0; flag2 = 0; } if (flag && state2) { //Зашли digitalWrite( 13 , HIGH ); delay(pause); digitalWrite( 13 , LOW ); flag = 0; flag2 = 0; state2 = 0; } if (flag2 && state) { //Вышли digitalWrite( 12 , HIGH ); delay(pause); digitalWrite( 12 , LOW ); flag = 0; flag2 = 0; state = 0; } } } }
КО управляет освещением и от обычного выключателя установленного перед дверью. В функции КО входит управление освещением всей квартиры от выключателей, передача данных о состоянии освещения и прием команд от сервера умного дома по протоколу MQTT.
if (digitalRead(22) != pre1) { //если произошло событие от выключателя delay(pause); digitalWrite(33, !digitalRead(33)); //инвертируем состояние пина т.е. включаем или выключаем свет pre1 = digitalRead(22); //Запоминаем текущее положение выключателя int out1 = digitalRead(33); String char_out1 = String(out1); char_out1.toCharArray(b, 2); client.publish("myhome/Lighting/BathRoom_Main", b); //отправляем состояние на сервер if (digitalRead(33) == HIGH) { posetitel = 1; bathswitch = 1; } else if (digitalRead(33) == LOW) { posetitel = 0; bathswitch = 0; } } if (digitalRead(2) == 1 && (millis() - previousMillis > 3000)) { //Если кто то зашел в ванную то previousMillis = millis(); if (bathswitch == 1) { posetitel = 0; bathswitch = 0; } posetitel++; if (posetitel > 0) { delay(50); digitalWrite(33, 1);//Включаем свет if (posetitel > 5) { posetitel = 5; } delay(5); client.publish("myhome/Lighting/BathRoom_Main", "1"); // Отправляем данные на сервер } } if (digitalRead(3) == 1 && (millis() - previousMillis > 3000)) { //Если кто то вышел из ванной то previousMillis = millis(); posetitel--; if (posetitel <= 0) { posetitel = 0; delay(50); digitalWrite(33, 0);//Выключаем свет delay(5); client.publish("myhome/Lighting/BathRoom_Main", "0"); // Отправляем данные на сервер } }
Из опыта эксплуатации можно сделать выводы, что представленная система вполне работоспособна. Бывают правда иногда ложные не срабатывания в основном на черной одежде, но редко и если при входе\выходе датчик не сработал достаточно махнуть рукой мимо датчиков или просто щелкнуть выключателем.
Ну и напоследок видео работы.
Первая часть — Умный дом, начало.
ссылка на оригинал статьи https://geektimes.ru/post/270140/
Добавить комментарий