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


  1. opencart-cms
    30.01.2016 14:49
    +4

    Интересно!

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


    1. instalator
      30.01.2016 19:46

      Вообщем да, и в принципе ничего не мешает добавить его в систему.


  1. fuCtor
    30.01.2016 15:00
    +1

    А куда спрятан Arduino?

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

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

    А так прикольно )


    1. instalator
      30.01.2016 16:58
      +1

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


    1. instalator
      30.01.2016 19:57

      Arduino спрятан за наличником дверной коробки.


  1. spc
    30.01.2016 15:42
    +3

    почему практически никто не делает автоматическое включение света на основе обычного счетчика посетителей


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

    И, наконец, раз уж я тут нарциссирую, то третье личное мнение: датчика движения с дополнительным контроллером хватает просто за глаза (почти второй год работает и радует).


    1. Obukhoff
      30.01.2016 16:36

      Датчики присутствия действительно дорогие, а вот датчик движения, на подобие такого goo.gl/lj1sf4 — вполне себе годное решение.
      Ну да, если заснул на унитазе, то это будет фейл, но сами посудите, для выключения света вам нужно не двигаться в течении 5-7 минут ;)
      Не выдержит столько человек ;)


      1. dkv
        30.01.2016 19:28
        +1

        Можно совместить датчик движения с СМК (сигнализатор магнитоконтактный), формирующим событие открывания двери. Убиваем двух зайцев — свет включаться будет сразу при открытии двери и не будет ложных несрабатываний. Вероятность наличия второго человека отрабатывать таймаутом выключения света с контролем по датчику движения в помещении. При наличии душевой кабины будут проблемы, но их можно решить с помощью СМК — если двери душевой закрылись при включенном свете и не открывались — считать, что в ней кто-то есть. В общем, вариантов куча. В этом и прелесть открытых решений.


        1. instalator
          30.01.2016 19:30

          Можно совместить датчик движения с СМК (сигнализатор магнитоконтактный), формирующим событие открывания двери. Убиваем двух зайцев — свет включаться будет сразу при открытии двери и не будет ложных несрабатываний.

          Да, но иногда дверь не закрываю вообще, как быть в таком случае?


          1. dkv
            30.01.2016 19:38

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


    1. instalator
      30.01.2016 18:25
      +1

      Меня мое решение тоже радует. С датчиком движения все равно свет остается гореть какое то время, когда уже никого нет в помещение, незначительно но лишний киловатт набегает)


      1. kawabunga
        30.01.2016 18:51

        Давайте посчитаем.
        Если даже мы вошли и вышли сразу же, то свет горит еще, ну предположим, 5 минут.
        Возьмем энергопотребление на уровне 20Вт (у нас наверняка энергосберегающие стоят)
        Вы зашли в туалет 20 раз в день.
        Итого примерно 35 ватт
        учитывая цену за киловатт на уровне 0,13 евро
        короче считать лень даже.


        1. kawabunga
          30.01.2016 18:55

          на мой взгляд такая система нужна только в общественном туалете, и не для экономии, но для того, чтобы никто не трогал лишний раз выключатели и не разносил бактерии.
          24 часа освещения туалета в течение года!!! будет стоить ну может 50 евро.


          1. ploop
            30.01.2016 23:16

            24 часа освещения туалета в течение года!!! будет стоить ну может 50 евро.

            По текущему тарифу светодиодная 11Вт лампочка (аналог 75Вт накаливания) работая 24/7 в течении года скушает 313 рублей. Сберегайка в два раза больше.
            Ну это не для общественного туалета, но там тоже не накладно будет.


    1. tmin10
      30.01.2016 19:48

      А почему редко кто рассматривает вариант УЗ дальномера? Для детекта человека в туалете, мне кажется, это идеальный вариант. Стоит недорого, точность выдаёт сантиметровую. Единственное, нужно поэкспериментировать с расположением: на стене напротив двери вроде лучший вариант. Так можно определять открытость/закрытость двери и стоящего/сидящего человека.


      1. instalator
        30.01.2016 19:49

        В туалете где ширина 1 метр почему бы и нет.


        1. tmin10
          30.01.2016 19:51

          Популярный HC SR04 имеет 4 метровый диапазон измерений, т.е. подходит для многих туалетов. Сам заказал такой, чтобы попробовать что-то соорудить.


          1. instalator
            30.01.2016 19:54

            Я про ширину говорил, а если туалет 3 на 3 метра?


            1. Celtis
              01.02.2016 02:10

              Можно поставить 3 дальномера под разными углами. SR-04 бьет не лучом, а довольно широким конусом, так что покрытие будет практически полным.


      1. opencart-cms
        30.01.2016 22:30
        +1

        вот у меня как раз метровый дальномер над дверью и стоит, на унитаз смотрит.
        Вот только, кот не любит ультразвук, приходиться его туалет держать в другом месте) из-за этого сейчас больше склоняюсь к датчику движения+счетчик посетителей.


        1. Celtis
          01.02.2016 02:07

          Кот коту рознь, видимо. Мою кошку уз-дальномер совершенно не смущает, в отличии от меня(явно слышу щелчки импульсов).
          Установлен так же, как и у Вас.


          1. opencart-cms
            01.02.2016 02:24

            вполне может быть) для экспериментов, у меня всего одна единица котов)
            Хотя, на тематических форумах и сайтах, не единожды встречал такую проблему у пользователей уз дальномеров.


            1. Celtis
              01.02.2016 23:05

              Возможно, имеет значение периодичность импульсов. У меня замеры идут дважды в секунду.
              Сам же алгоритм работы такой: если дверь открыта(геркон в роли датчика) — работает дежурное освежение(светодиоды на 25% мощности); если после закрытия двери сработал дальномер — значит, внутри кто-то есть и светим NN% пока дверь не откроется(в чудеса исчезновения из закрытого туалета система не верит). Таким образом борюсь с глюками SR-04, периодически выдающего мусор. Да, NN%, а не 100% потому, что ночью предпочитаю подсветку по минимуму. NN выбирается исходя из освещенности комнат(в качестве контроллеров не ардуины, а 8266, увязанные в сеть через MQTT)


      1. sav13
        31.01.2016 11:53

        У меня кот на него реагирует.
        Как не понравится ему в туалет ходить (((


  1. nerudo
    30.01.2016 16:07
    +3

    Надо еще статистику собирать: максимальное и минимальное время прибывания, максимальное количество лиц одновременно и т.д.


    1. olartamonov
      30.01.2016 21:39
      +1

      В облаке!

      Идея для стартапа™


  1. Obukhoff
    30.01.2016 16:33

    А как у вас решена проблема с ситуацией, когда человек постоял в дверях и ушел?
    С вариантами, когда внутри кто-то есть или нету.


  1. Caustic
    30.01.2016 17:02

    А можете рассказать, какую функцию выполняет геркон в этой схеме? Наверно, можно использовать для включения света при открывании двери, но она не вседа бывает закрыта, так что скорее всего не для этого. Сам как раз на днях думал о таком же счетчике посетителей для ванной, спасибо за статью.


    1. instalator
      30.01.2016 17:03

      Герконы у меня стоят на каждой двери и окне, эта дверь не была исключением.


      1. opencart-cms
        30.01.2016 22:37

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


        1. instalator
          31.01.2016 08:58

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


  1. Barma2012
    30.01.2016 17:11

    Сделал нечто подобное для кухни, но только вместо датчиков расстояния использовал два ИК-светодиода и один TSOP-1736, который ловил сигналы с обоих светодиодов. Никаких ардуин — всё на хардкорном ассемблере ))))
    Работает эта штука достаточно надежно в случае ламп накаливания, а вот для ЭСЛ — начинает сбоить, как правило, при входе первого человека, когда лампа только зажигается. От неё идут такие помехи, что не спасает даже 16-битная коррекция ошибок, которую позже добавил в код. При этом так ведут себя не новые лампы, а отработавшие какое-то (небольшое) время. От производителя ламп сей дефект мало зависит — из 4-х ламп глючить начинали все, раньше или позже.
    Пока проблему решить не смог (менять TSOP на другой, с другой частотой — лениво, да и не факт что поможет), и когда очень сильно начинает напрягать неверный подсчет — вкручиваю обычную лампочку, нервы сразу успокаиваются ))))


  1. infernadium
    30.01.2016 18:11

    Владимир, Вас не затруднит проверить, насколько хорошо эти E18-D80NK срабатывают на пустую прозрачную (не цветную) пластиковую (PET) бутыль? Интересует сам материал бутыли, не этикетка. Заранее благодарю.


    1. instalator
      30.01.2016 18:16

      Проверил, Бутыль из не крашенного прозрачного пластика, объемом 3 литра, этикетки нет. Датчик видит бутылку с 30 сантиметров при установленной чувствительности.


  1. infernadium
    30.01.2016 18:17

    Премного благодарен! Где покупали датчики? Aliexpress?


    1. instalator
      30.01.2016 18:22

      Уже не вспомню. либо ебей либо али


  1. ov7a
    30.01.2016 18:29
    +2

    А если заходить по одному, а выходить тесно обнявшись — сработает система?


    1. eta4ever
      30.01.2016 19:02
      +2

      Нвоборот! Входить обнявшись, а выходить по одному.

      … потому уволил одного, и стало их FF.


      1. teamfighter
        01.02.2016 12:40
        +2

        Что там в туалете произошло, что вошли обнявшись, а вышли порознь?


        1. eta4ever
          01.02.2016 12:42

          Перед посещением санузла меня посетил дух тестировщика :)


  1. Dmitry_Th
    30.01.2016 19:43

    Встречал решение на основе кнопки включения от советского телевизора: откроешь дверь — свет зажигается, еще раз откроешь — выключается.


    1. instalator
      30.01.2016 19:44
      +2

      В советское время делали окно в ванной)


      1. Dmitry_Th
        30.01.2016 19:45
        +1

        Нынче для этого ставят вебкамеры))


  1. ed007
    30.01.2016 20:12
    +1

    Бывают правда иногда ложные не срабатывания
    Эта фраза дала от вет на вопрос в начале статьи.


  1. D_T
    31.01.2016 08:55

    Отличная идея. Давно стоят датчики движения в сан.узлах. Из минусов: если дверь открыта, проходишь мимо — свет включился. Второй — пока в душе моешься он не «видит» движения и вырубает свет. Приходится махать. Максимальных 7 минут не хватает.

    Для защиты от несрабатываний я бы добавил таймер минут на 20, т.е. вошел свет включился, вышел — выключился, за 20 минут никто не вышел — тоже выключился.


  1. VanyaKokorev
    31.01.2016 09:55
    +1

    Я сделал два датчика движения — они стоят у двери, (1) направлен на выход, (2) — внутрь ванной. Свет горит бесконечно долго, если (2) видел человека менее давно, чем (1)


  1. Jmann
    31.01.2016 12:59

    Самое простое что может быть PIR датчик, например HC-SR501, у него два режима работы. Импульсы или таймер на 300 сек вроде. Я такой заюзал в комплексе с Attiny 13+ фотодатчик на фототранзисторе, сигнал которого усиливает Rail-to-Rail ОУ, правда в гараж. Кстати, можно было применить ИК приемо-передатчик в одном корпусе на отражение. Там угол работы хороший, врезать туда. где вероятность нахождения человека больше, сделать программную задержку от ложных срабатываний.


    1. instalator
      31.01.2016 13:00

      Фотодатчик можно было сделать на обычном фоторезисторе подключив его к АЦП контроллера, и не нужно было бы ставить дополнительно операционник.


      1. Jmann
        31.01.2016 13:02

        Учитывая что фоторезистор от головного девайса на расстоянии 10 метров, я все же не рискнул и сделал усилитель 0-5В аккурат подключенные к АЦП 8битки.


        1. instalator
          31.01.2016 13:05

          Непонятно что изменилось? Что так 5 вольт, что так.


          1. Jmann
            31.01.2016 13:13

            Прям аксиома Эскобара =) Это называется фен-шуй, вы получаете стабильный линейный сигнал на АЦП которую я могу еще и регулировать потенциометром. Тут все зависит от характеристик фототранзистора и номинала R между Vcc и коллектором. В каких-то моментах может ОУ и не нужен, но потери на длине в 10м на аналоговой линии меня побудили сделать полноценный датчик.


            1. instalator
              31.01.2016 13:16

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


              1. Jmann
                31.01.2016 13:20

                Ну в хендмейде простейшая RC — цепь стоит на входе АЦП МК. Плюс логика там такая, что фотодатчик работает в тандеме с PIR (если темно, PIR работает — светло PIR не работает, чувствительность регулирую вторым каналом АЦП через опорные 5В, такой себе программный компаратор), ну а приоритет всегда у клавиши включения света.


  1. d2ab
    31.01.2016 13:08

    В давние времена в ЮТ(если не ошибаюсь), была описана подобная система вообще без контроллера, на простом счетчике


    1. Jmann
      31.01.2016 13:15

      Да раньше все делали на «жесткой логике», потом появились 51 -> PIC/AVR -> STM32/LPC, Теперь схему из трех транзисторов заменяют Ардуиной.


    1. ploop
      31.01.2016 16:53

      Не ошибаетесь, я даже собирал. Правда поигрался и не довёл дело до ума.


  1. aivs
    31.01.2016 20:21

    Интересно можно ли подобную систему сделать на паре акустических датчиков HC-SR04?
    image
    Или для более точного определения прерывания сигнала лучше использовать лазерный датчик? Хотя стоит он раз в 5-10 дороже чем акустический.
    image


    1. dkv
      31.01.2016 20:25

    1. opencart-cms
      31.01.2016 21:34

      Если домашние животные по квартире гуляют, то УЗ дальномер не стоит использовать.
      Ситуацию описал тут geektimes.ru/post/270140/#comment_8976070


    1. instalator
      01.02.2016 13:20

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