Управление освещением в ванной на основе счетчика посетителей
В сети много статей по автоматизации освещения в ванной комнате, большая их часть основана на датчиках движения или объема. Кто-то даже делал на основе видео камеры, вариант интересный, но есть шанс стать «звездой» 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"); // Отправляем данные на сервер
}
}
Из опыта эксплуатации можно сделать выводы, что представленная система вполне работоспособна. Бывают правда иногда ложные не срабатывания в основном на черной одежде, но редко и если при входе\выходе датчик не сработал достаточно махнуть рукой мимо датчиков или просто щелкнуть выключателем.
Ну и напоследок видео работы.
Первая часть — Умный дом, начало.