В сети много статей по автоматизации освещения в ванной комнате, большая их часть основана на датчиках движения или объема. Кто-то даже делал на основе видео камеры, вариант интересный, но есть шанс стать «звездой» 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"); // Отправляем данные на сервер
}
}
Из опыта эксплуатации можно сделать выводы, что представленная система вполне работоспособна. Бывают правда иногда ложные не срабатывания в основном на черной одежде, но редко и если при входе\выходе датчик не сработал достаточно махнуть рукой мимо датчиков или просто щелкнуть выключателем.
Ну и напоследок видео работы.
Первая часть — Умный дом, начало.
Комментарии (60)
fuCtor
30.01.2016 15:00+1А куда спрятан Arduino?
Arduino ProMini фиксирует направление движения и формирует на выходе импульсы, которые поступают на КО, тот в свою очередь занимается подсчетом и включением\отключением света.
Т.е. для того чтобы отправить импульс была использована целая Arduino? Понимаю что так меньше мороки и быстрее, но как-то расточительно это. Для всей этой задачи достаточно же примитивнейшего МК.
А так прикольно )instalator
30.01.2016 16:58+1Если вы читали первую часть то там был ответ на ваш вопрос.
Изначально планировал делать все на микроконтроллерах, но узнав о существовании Arduino выбор пал именно на нее, т.к. упрощалось изготовление конечных устройств, не нужно было изготавливать платы самостоятельно.
spc
30.01.2016 15:42+3почему практически никто не делает автоматическое включение света на основе обычного счетчика посетителей
Потому, что по моему мнению, за разумные деньги ни одна технология не способна однозначно определять нахождение и количество людей в помещении. Неразумные деньги, опять же, по моему мнению — стоимость датчика присутствия.
И, наконец, раз уж я тут нарциссирую, то третье личное мнение: датчика движения с дополнительным контроллером хватает просто за глаза (почти второй год работает и радует).Obukhoff
30.01.2016 16:36Датчики присутствия действительно дорогие, а вот датчик движения, на подобие такого goo.gl/lj1sf4 — вполне себе годное решение.
Ну да, если заснул на унитазе, то это будет фейл, но сами посудите, для выключения света вам нужно не двигаться в течении 5-7 минут ;)
Не выдержит столько человек ;)dkv
30.01.2016 19:28+1Можно совместить датчик движения с СМК (сигнализатор магнитоконтактный), формирующим событие открывания двери. Убиваем двух зайцев — свет включаться будет сразу при открытии двери и не будет ложных несрабатываний. Вероятность наличия второго человека отрабатывать таймаутом выключения света с контролем по датчику движения в помещении. При наличии душевой кабины будут проблемы, но их можно решить с помощью СМК — если двери душевой закрылись при включенном свете и не открывались — считать, что в ней кто-то есть. В общем, вариантов куча. В этом и прелесть открытых решений.
instalator
30.01.2016 19:30Можно совместить датчик движения с СМК (сигнализатор магнитоконтактный), формирующим событие открывания двери. Убиваем двух зайцев — свет включаться будет сразу при открытии двери и не будет ложных несрабатываний.
Да, но иногда дверь не закрываю вообще, как быть в таком случае?dkv
30.01.2016 19:38Просто. Когда заходите внутрь, закрываете же. Вот вам событие по закрыванию двери и сработке датчика движения после факта закрытия двери. Если просто руки помыть и не закрываете — то тут хватит датчика движения за глаза — за раковиной обычно не замирает человек и даже таймаута в 30 сек. хватит.
instalator
30.01.2016 18:25+1Меня мое решение тоже радует. С датчиком движения все равно свет остается гореть какое то время, когда уже никого нет в помещение, незначительно но лишний киловатт набегает)
kawabunga
30.01.2016 18:51Давайте посчитаем.
Если даже мы вошли и вышли сразу же, то свет горит еще, ну предположим, 5 минут.
Возьмем энергопотребление на уровне 20Вт (у нас наверняка энергосберегающие стоят)
Вы зашли в туалет 20 раз в день.
Итого примерно 35 ватт
учитывая цену за киловатт на уровне 0,13 евро
короче считать лень даже.kawabunga
30.01.2016 18:55на мой взгляд такая система нужна только в общественном туалете, и не для экономии, но для того, чтобы никто не трогал лишний раз выключатели и не разносил бактерии.
24 часа освещения туалета в течение года!!! будет стоить ну может 50 евро.ploop
30.01.2016 23:1624 часа освещения туалета в течение года!!! будет стоить ну может 50 евро.
По текущему тарифу светодиодная 11Вт лампочка (аналог 75Вт накаливания) работая 24/7 в течении года скушает 313 рублей. Сберегайка в два раза больше.
Ну это не для общественного туалета, но там тоже не накладно будет.
tmin10
30.01.2016 19:48А почему редко кто рассматривает вариант УЗ дальномера? Для детекта человека в туалете, мне кажется, это идеальный вариант. Стоит недорого, точность выдаёт сантиметровую. Единственное, нужно поэкспериментировать с расположением: на стене напротив двери вроде лучший вариант. Так можно определять открытость/закрытость двери и стоящего/сидящего человека.
instalator
30.01.2016 19:49В туалете где ширина 1 метр почему бы и нет.
tmin10
30.01.2016 19:51Популярный HC SR04 имеет 4 метровый диапазон измерений, т.е. подходит для многих туалетов. Сам заказал такой, чтобы попробовать что-то соорудить.
instalator
30.01.2016 19:54Я про ширину говорил, а если туалет 3 на 3 метра?
Celtis
01.02.2016 02:10Можно поставить 3 дальномера под разными углами. SR-04 бьет не лучом, а довольно широким конусом, так что покрытие будет практически полным.
opencart-cms
30.01.2016 22:30+1вот у меня как раз метровый дальномер над дверью и стоит, на унитаз смотрит.
Вот только, кот не любит ультразвук, приходиться его туалет держать в другом месте) из-за этого сейчас больше склоняюсь к датчику движения+счетчик посетителей.Celtis
01.02.2016 02:07Кот коту рознь, видимо. Мою кошку уз-дальномер совершенно не смущает, в отличии от меня(явно слышу щелчки импульсов).
Установлен так же, как и у Вас.opencart-cms
01.02.2016 02:24вполне может быть) для экспериментов, у меня всего одна единица котов)
Хотя, на тематических форумах и сайтах, не единожды встречал такую проблему у пользователей уз дальномеров.Celtis
01.02.2016 23:05Возможно, имеет значение периодичность импульсов. У меня замеры идут дважды в секунду.
Сам же алгоритм работы такой: если дверь открыта(геркон в роли датчика) — работает дежурное освежение(светодиоды на 25% мощности); если после закрытия двери сработал дальномер — значит, внутри кто-то есть и светим NN% пока дверь не откроется(в чудеса исчезновения из закрытого туалета система не верит). Таким образом борюсь с глюками SR-04, периодически выдающего мусор. Да, NN%, а не 100% потому, что ночью предпочитаю подсветку по минимуму. NN выбирается исходя из освещенности комнат(в качестве контроллеров не ардуины, а 8266, увязанные в сеть через MQTT)
nerudo
30.01.2016 16:07+3Надо еще статистику собирать: максимальное и минимальное время прибывания, максимальное количество лиц одновременно и т.д.
Obukhoff
30.01.2016 16:33А как у вас решена проблема с ситуацией, когда человек постоял в дверях и ушел?
С вариантами, когда внутри кто-то есть или нету.
Caustic
30.01.2016 17:02А можете рассказать, какую функцию выполняет геркон в этой схеме? Наверно, можно использовать для включения света при открывании двери, но она не вседа бывает закрыта, так что скорее всего не для этого. Сам как раз на днях думал о таком же счетчике посетителей для ванной, спасибо за статью.
instalator
30.01.2016 17:03Герконы у меня стоят на каждой двери и окне, эта дверь не была исключением.
opencart-cms
30.01.2016 22:37В первой статье не увидел зачем они в окнах стоят, ну или не внимательно смотрел.
Ну как я думаю, герконы в окнах и дверях можно как элемент сигнализации использовать.instalator
31.01.2016 08:58В окнах для предупреждения при уходе из дома об открытых окнах, так же предупреждение если на улице начался дождь и естественно сигнализация.
Barma2012
30.01.2016 17:11Сделал нечто подобное для кухни, но только вместо датчиков расстояния использовал два ИК-светодиода и один TSOP-1736, который ловил сигналы с обоих светодиодов. Никаких ардуин — всё на хардкорном ассемблере ))))
Работает эта штука достаточно надежно в случае ламп накаливания, а вот для ЭСЛ — начинает сбоить, как правило, при входе первого человека, когда лампа только зажигается. От неё идут такие помехи, что не спасает даже 16-битная коррекция ошибок, которую позже добавил в код. При этом так ведут себя не новые лампы, а отработавшие какое-то (небольшое) время. От производителя ламп сей дефект мало зависит — из 4-х ламп глючить начинали все, раньше или позже.
Пока проблему решить не смог (менять TSOP на другой, с другой частотой — лениво, да и не факт что поможет), и когда очень сильно начинает напрягать неверный подсчет — вкручиваю обычную лампочку, нервы сразу успокаиваются ))))
infernadium
30.01.2016 18:11Владимир, Вас не затруднит проверить, насколько хорошо эти E18-D80NK срабатывают на пустую прозрачную (не цветную) пластиковую (PET) бутыль? Интересует сам материал бутыли, не этикетка. Заранее благодарю.
instalator
30.01.2016 18:16Проверил, Бутыль из не крашенного прозрачного пластика, объемом 3 литра, этикетки нет. Датчик видит бутылку с 30 сантиметров при установленной чувствительности.
ov7a
30.01.2016 18:29+2А если заходить по одному, а выходить тесно обнявшись — сработает система?
eta4ever
30.01.2016 19:02+2Нвоборот! Входить обнявшись, а выходить по одному.
… потому уволил одного, и стало их FF.
Dmitry_Th
30.01.2016 19:43Встречал решение на основе кнопки включения от советского телевизора: откроешь дверь — свет зажигается, еще раз откроешь — выключается.
ed007
30.01.2016 20:12+1Бывают правда иногда ложные не срабатывания
Эта фраза дала от вет на вопрос в начале статьи.
D_T
31.01.2016 08:55Отличная идея. Давно стоят датчики движения в сан.узлах. Из минусов: если дверь открыта, проходишь мимо — свет включился. Второй — пока в душе моешься он не «видит» движения и вырубает свет. Приходится махать. Максимальных 7 минут не хватает.
Для защиты от несрабатываний я бы добавил таймер минут на 20, т.е. вошел свет включился, вышел — выключился, за 20 минут никто не вышел — тоже выключился.
VanyaKokorev
31.01.2016 09:55+1Я сделал два датчика движения — они стоят у двери, (1) направлен на выход, (2) — внутрь ванной. Свет горит бесконечно долго, если (2) видел человека менее давно, чем (1)
Jmann
31.01.2016 12:59Самое простое что может быть PIR датчик, например HC-SR501, у него два режима работы. Импульсы или таймер на 300 сек вроде. Я такой заюзал в комплексе с Attiny 13+ фотодатчик на фототранзисторе, сигнал которого усиливает Rail-to-Rail ОУ, правда в гараж. Кстати, можно было применить ИК приемо-передатчик в одном корпусе на отражение. Там угол работы хороший, врезать туда. где вероятность нахождения человека больше, сделать программную задержку от ложных срабатываний.
instalator
31.01.2016 13:00Фотодатчик можно было сделать на обычном фоторезисторе подключив его к АЦП контроллера, и не нужно было бы ставить дополнительно операционник.
Jmann
31.01.2016 13:02Учитывая что фоторезистор от головного девайса на расстоянии 10 метров, я все же не рискнул и сделал усилитель 0-5В аккурат подключенные к АЦП 8битки.
instalator
31.01.2016 13:05Непонятно что изменилось? Что так 5 вольт, что так.
Jmann
31.01.2016 13:13Прям аксиома Эскобара =) Это называется фен-шуй, вы получаете стабильный линейный сигнал на АЦП которую я могу еще и регулировать потенциометром. Тут все зависит от характеристик фототранзистора и номинала R между Vcc и коллектором. В каких-то моментах может ОУ и не нужен, но потери на длине в 10м на аналоговой линии меня побудили сделать полноценный датчик.
instalator
31.01.2016 13:16Тут скорее нужна защита от наводок, 10 метров могут поймать наводку от рядом проходящего кабеля.
Jmann
31.01.2016 13:20Ну в хендмейде простейшая RC — цепь стоит на входе АЦП МК. Плюс логика там такая, что фотодатчик работает в тандеме с PIR (если темно, PIR работает — светло PIR не работает, чувствительность регулирую вторым каналом АЦП через опорные 5В, такой себе программный компаратор), ну а приоритет всегда у клавиши включения света.
aivs
31.01.2016 20:21Интересно можно ли подобную систему сделать на паре акустических датчиков HC-SR04?
Или для более точного определения прерывания сигнала лучше использовать лазерный датчик? Хотя стоит он раз в 5-10 дороже чем акустический.
opencart-cms
31.01.2016 21:34Если домашние животные по квартире гуляют, то УЗ дальномер не стоит использовать.
Ситуацию описал тут geektimes.ru/post/270140/#comment_8976070
instalator
01.02.2016 13:20Второй на фото датчик я покупал, если делать на них то нужно разносить их между собой далеко чтобы отраженный лазер от одного датчика не попадал на второй, а приемник у них чувствительный и ловит даже слабо отраженный свет. Поэтому я от них отказался в сторону ИК. Ну и минус этого датчика — видно свет от лазера.
opencart-cms
Интересно!
На мой взгляд, добавив к счетчикам датчик движения внутри комнаты, можно будет избавиться от ложных не срабатываний.
instalator
Вообщем да, и в принципе ничего не мешает добавить его в систему.