Управление освещением в ванной на основе счетчика посетителей


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



    Из опыта эксплуатации можно сделать выводы, что представленная система вполне работоспособна. Бывают правда иногда ложные не срабатывания в основном на черной одежде, но редко и если при входе\выходе датчик не сработал достаточно махнуть рукой мимо датчиков или просто щелкнуть выключателем.
    Ну и напоследок видео работы.


    Первая часть — Умный дом, начало.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 62
      +4
      Интересно!

      На мой взгляд, добавив к счетчикам датчик движения внутри комнаты, можно будет избавиться от ложных не срабатываний.
        0
        Вообщем да, и в принципе ничего не мешает добавить его в систему.
        +1
        А куда спрятан Arduino?

        Arduino ProMini фиксирует направление движения и формирует на выходе импульсы, которые поступают на КО, тот в свою очередь занимается подсчетом и включением\отключением света.

        Т.е. для того чтобы отправить импульс была использована целая Arduino? Понимаю что так меньше мороки и быстрее, но как-то расточительно это. Для всей этой задачи достаточно же примитивнейшего МК.

        А так прикольно )
          +1
          Если вы читали первую часть то там был ответ на ваш вопрос.
          Изначально планировал делать все на микроконтроллерах, но узнав о существовании Arduino выбор пал именно на нее, т.к. упрощалось изготовление конечных устройств, не нужно было изготавливать платы самостоятельно.
            0
            Arduino спрятан за наличником дверной коробки.
            +3
            почему практически никто не делает автоматическое включение света на основе обычного счетчика посетителей


            Потому, что по моему мнению, за разумные деньги ни одна технология не способна однозначно определять нахождение и количество людей в помещении. Неразумные деньги, опять же, по моему мнению — стоимость датчика присутствия.

            И, наконец, раз уж я тут нарциссирую, то третье личное мнение: датчика движения с дополнительным контроллером хватает просто за глаза (почти второй год работает и радует).
              0
              Датчики присутствия действительно дорогие, а вот датчик движения, на подобие такого goo.gl/lj1sf4 — вполне себе годное решение.
              Ну да, если заснул на унитазе, то это будет фейл, но сами посудите, для выключения света вам нужно не двигаться в течении 5-7 минут ;)
              Не выдержит столько человек ;)
                +1
                Можно совместить датчик движения с СМК (сигнализатор магнитоконтактный), формирующим событие открывания двери. Убиваем двух зайцев — свет включаться будет сразу при открытии двери и не будет ложных несрабатываний. Вероятность наличия второго человека отрабатывать таймаутом выключения света с контролем по датчику движения в помещении. При наличии душевой кабины будут проблемы, но их можно решить с помощью СМК — если двери душевой закрылись при включенном свете и не открывались — считать, что в ней кто-то есть. В общем, вариантов куча. В этом и прелесть открытых решений.
                  0
                  Можно совместить датчик движения с СМК (сигнализатор магнитоконтактный), формирующим событие открывания двери. Убиваем двух зайцев — свет включаться будет сразу при открытии двери и не будет ложных несрабатываний.

                  Да, но иногда дверь не закрываю вообще, как быть в таком случае?
                    0
                    Просто. Когда заходите внутрь, закрываете же. Вот вам событие по закрыванию двери и сработке датчика движения после факта закрытия двери. Если просто руки помыть и не закрываете — то тут хватит датчика движения за глаза — за раковиной обычно не замирает человек и даже таймаута в 30 сек. хватит.
                  0
                  Если заснул на унитазе, то это будет вин, т.к. выключенный свет только способствует сну + экономия электроэнергии.
                  +1
                  Меня мое решение тоже радует. С датчиком движения все равно свет остается гореть какое то время, когда уже никого нет в помещение, незначительно но лишний киловатт набегает)
                    0
                    Давайте посчитаем.
                    Если даже мы вошли и вышли сразу же, то свет горит еще, ну предположим, 5 минут.
                    Возьмем энергопотребление на уровне 20Вт (у нас наверняка энергосберегающие стоят)
                    Вы зашли в туалет 20 раз в день.
                    Итого примерно 35 ватт
                    учитывая цену за киловатт на уровне 0,13 евро
                    короче считать лень даже.
                      0
                      на мой взгляд такая система нужна только в общественном туалете, и не для экономии, но для того, чтобы никто не трогал лишний раз выключатели и не разносил бактерии.
                      24 часа освещения туалета в течение года!!! будет стоить ну может 50 евро.
                        0
                        24 часа освещения туалета в течение года!!! будет стоить ну может 50 евро.

                        По текущему тарифу светодиодная 11Вт лампочка (аналог 75Вт накаливания) работая 24/7 в течении года скушает 313 рублей. Сберегайка в два раза больше.
                        Ну это не для общественного туалета, но там тоже не накладно будет.
                    0
                    А почему редко кто рассматривает вариант УЗ дальномера? Для детекта человека в туалете, мне кажется, это идеальный вариант. Стоит недорого, точность выдаёт сантиметровую. Единственное, нужно поэкспериментировать с расположением: на стене напротив двери вроде лучший вариант. Так можно определять открытость/закрытость двери и стоящего/сидящего человека.
                      0
                      В туалете где ширина 1 метр почему бы и нет.
                        0
                        Популярный HC SR04 имеет 4 метровый диапазон измерений, т.е. подходит для многих туалетов. Сам заказал такой, чтобы попробовать что-то соорудить.
                          0
                          Я про ширину говорил, а если туалет 3 на 3 метра?
                            0
                            Можно поставить 3 дальномера под разными углами. SR-04 бьет не лучом, а довольно широким конусом, так что покрытие будет практически полным.
                              0
                              Поднимал тему с дальномерами уже как-то в комментариях. Говорят, что у дешевых УЗ дальномеров (SR-04) в отделанном кафелем помещении будет много ложных срабатываний. Предлагали заметить на ИК дальномер.

                              Себе заказал и то, и то, буду тестировать.
                        +1
                        вот у меня как раз метровый дальномер над дверью и стоит, на унитаз смотрит.
                        Вот только, кот не любит ультразвук, приходиться его туалет держать в другом месте) из-за этого сейчас больше склоняюсь к датчику движения+счетчик посетителей.
                          0
                          Кот коту рознь, видимо. Мою кошку уз-дальномер совершенно не смущает, в отличии от меня(явно слышу щелчки импульсов).
                          Установлен так же, как и у Вас.
                            0
                            вполне может быть) для экспериментов, у меня всего одна единица котов)
                            Хотя, на тематических форумах и сайтах, не единожды встречал такую проблему у пользователей уз дальномеров.
                              0
                              Возможно, имеет значение периодичность импульсов. У меня замеры идут дважды в секунду.
                              Сам же алгоритм работы такой: если дверь открыта(геркон в роли датчика) — работает дежурное освежение(светодиоды на 25% мощности); если после закрытия двери сработал дальномер — значит, внутри кто-то есть и светим NN% пока дверь не откроется(в чудеса исчезновения из закрытого туалета система не верит). Таким образом борюсь с глюками SR-04, периодически выдающего мусор. Да, NN%, а не 100% потому, что ночью предпочитаю подсветку по минимуму. NN выбирается исходя из освещенности комнат(в качестве контроллеров не ардуины, а 8266, увязанные в сеть через MQTT)
                          0
                          У меня кот на него реагирует.
                          Как не понравится ему в туалет ходить (((
                        +3
                        Надо еще статистику собирать: максимальное и минимальное время прибывания, максимальное количество лиц одновременно и т.д.
                          +1
                          В облаке!

                          Идея для стартапа™
                          0
                          А как у вас решена проблема с ситуацией, когда человек постоял в дверях и ушел?
                          С вариантами, когда внутри кто-то есть или нету.
                            0
                            А можете рассказать, какую функцию выполняет геркон в этой схеме? Наверно, можно использовать для включения света при открывании двери, но она не вседа бывает закрыта, так что скорее всего не для этого. Сам как раз на днях думал о таком же счетчике посетителей для ванной, спасибо за статью.
                              0
                              Герконы у меня стоят на каждой двери и окне, эта дверь не была исключением.
                                0
                                В первой статье не увидел зачем они в окнах стоят, ну или не внимательно смотрел.
                                Ну как я думаю, герконы в окнах и дверях можно как элемент сигнализации использовать.
                                  0
                                  В окнах для предупреждения при уходе из дома об открытых окнах, так же предупреждение если на улице начался дождь и естественно сигнализация.
                              0
                              Сделал нечто подобное для кухни, но только вместо датчиков расстояния использовал два ИК-светодиода и один TSOP-1736, который ловил сигналы с обоих светодиодов. Никаких ардуин — всё на хардкорном ассемблере ))))
                              Работает эта штука достаточно надежно в случае ламп накаливания, а вот для ЭСЛ — начинает сбоить, как правило, при входе первого человека, когда лампа только зажигается. От неё идут такие помехи, что не спасает даже 16-битная коррекция ошибок, которую позже добавил в код. При этом так ведут себя не новые лампы, а отработавшие какое-то (небольшое) время. От производителя ламп сей дефект мало зависит — из 4-х ламп глючить начинали все, раньше или позже.
                              Пока проблему решить не смог (менять TSOP на другой, с другой частотой — лениво, да и не факт что поможет), и когда очень сильно начинает напрягать неверный подсчет — вкручиваю обычную лампочку, нервы сразу успокаиваются ))))
                                0
                                Владимир, Вас не затруднит проверить, насколько хорошо эти E18-D80NK срабатывают на пустую прозрачную (не цветную) пластиковую (PET) бутыль? Интересует сам материал бутыли, не этикетка. Заранее благодарю.
                                  0
                                  Проверил, Бутыль из не крашенного прозрачного пластика, объемом 3 литра, этикетки нет. Датчик видит бутылку с 30 сантиметров при установленной чувствительности.
                                  0
                                  Премного благодарен! Где покупали датчики? Aliexpress?
                                    0
                                    Уже не вспомню. либо ебей либо али
                                    +2
                                    А если заходить по одному, а выходить тесно обнявшись — сработает система?
                                      +2
                                      Нвоборот! Входить обнявшись, а выходить по одному.

                                      … потому уволил одного, и стало их FF.
                                        +2
                                        Что там в туалете произошло, что вошли обнявшись, а вышли порознь?
                                          0
                                          Перед посещением санузла меня посетил дух тестировщика :)
                                      0
                                      Встречал решение на основе кнопки включения от советского телевизора: откроешь дверь — свет зажигается, еще раз откроешь — выключается.
                                        +2
                                        В советское время делали окно в ванной)
                                          +1
                                          Нынче для этого ставят вебкамеры))
                                        +1
                                        Бывают правда иногда ложные не срабатывания
                                        Эта фраза дала от вет на вопрос в начале статьи.
                                          0
                                          Отличная идея. Давно стоят датчики движения в сан.узлах. Из минусов: если дверь открыта, проходишь мимо — свет включился. Второй — пока в душе моешься он не «видит» движения и вырубает свет. Приходится махать. Максимальных 7 минут не хватает.

                                          Для защиты от несрабатываний я бы добавил таймер минут на 20, т.е. вошел свет включился, вышел — выключился, за 20 минут никто не вышел — тоже выключился.
                                            +1
                                            Я сделал два датчика движения — они стоят у двери, (1) направлен на выход, (2) — внутрь ванной. Свет горит бесконечно долго, если (2) видел человека менее давно, чем (1)
                                              0
                                              Самое простое что может быть PIR датчик, например HC-SR501, у него два режима работы. Импульсы или таймер на 300 сек вроде. Я такой заюзал в комплексе с Attiny 13+ фотодатчик на фототранзисторе, сигнал которого усиливает Rail-to-Rail ОУ, правда в гараж. Кстати, можно было применить ИК приемо-передатчик в одном корпусе на отражение. Там угол работы хороший, врезать туда. где вероятность нахождения человека больше, сделать программную задержку от ложных срабатываний.
                                                0
                                                Фотодатчик можно было сделать на обычном фоторезисторе подключив его к АЦП контроллера, и не нужно было бы ставить дополнительно операционник.
                                                  0
                                                  Учитывая что фоторезистор от головного девайса на расстоянии 10 метров, я все же не рискнул и сделал усилитель 0-5В аккурат подключенные к АЦП 8битки.
                                                    0
                                                    Непонятно что изменилось? Что так 5 вольт, что так.
                                                      0
                                                      Прям аксиома Эскобара =) Это называется фен-шуй, вы получаете стабильный линейный сигнал на АЦП которую я могу еще и регулировать потенциометром. Тут все зависит от характеристик фототранзистора и номинала R между Vcc и коллектором. В каких-то моментах может ОУ и не нужен, но потери на длине в 10м на аналоговой линии меня побудили сделать полноценный датчик.
                                                        0
                                                        Тут скорее нужна защита от наводок, 10 метров могут поймать наводку от рядом проходящего кабеля.
                                                          0
                                                          Ну в хендмейде простейшая RC — цепь стоит на входе АЦП МК. Плюс логика там такая, что фотодатчик работает в тандеме с PIR (если темно, PIR работает — светло PIR не работает, чувствительность регулирую вторым каналом АЦП через опорные 5В, такой себе программный компаратор), ну а приоритет всегда у клавиши включения света.
                                                0
                                                В давние времена в ЮТ(если не ошибаюсь), была описана подобная система вообще без контроллера, на простом счетчике
                                                  0
                                                  Да раньше все делали на «жесткой логике», потом появились 51 -> PIC/AVR -> STM32/LPC, Теперь схему из трех транзисторов заменяют Ардуиной.
                                                    0
                                                    Не ошибаетесь, я даже собирал. Правда поигрался и не довёл дело до ума.
                                                    0
                                                    Интересно можно ли подобную систему сделать на паре акустических датчиков HC-SR04?
                                                    image
                                                    Или для более точного определения прерывания сигнала лучше использовать лазерный датчик? Хотя стоит он раз в 5-10 дороже чем акустический.
                                                    image
                                                      0
                                                        0
                                                        Если домашние животные по квартире гуляют, то УЗ дальномер не стоит использовать.
                                                        Ситуацию описал тут geektimes.ru/post/270140/#comment_8976070
                                                          0
                                                          Второй на фото датчик я покупал, если делать на них то нужно разносить их между собой далеко чтобы отраженный лазер от одного датчика не попадал на второй, а приемник у них чувствительный и ловит даже слабо отраженный свет. Поэтому я от них отказался в сторону ИК. Ну и минус этого датчика — видно свет от лазера.

                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                        Самое читаемое