Всем привет. Расскажу немного про свою последнюю междуделку — доработку домофона WiFi-модулем NodeMCU. Заранее прошу прощения за выбор модуля — всех уже, наверное, достала эта ESP’шка…

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

Железо

В наличии у меня было несколько модулей NodeMCU, так что, прикинув его к трубке домофона, решил, что влезет он туда без проблем, надо лишь сделать плату расширения. Развожу я всегда в EagleCad, платы заказываю либо у китайцев, либо в американском OSH Park. На OSH Park выходит дешевле, если площадь платы маленькая, но вы получаете только 3 платы вместо 10 китайских, но для штучного проекта это не важно. На плату отлично встали релюшки PE014005, прям аккурат между выводов NodeMCU.



Не самый дешевый вариант, но у меня они были в наличии. А так можно поставить самые дешевые китайские, HUI KE например (это не ругательство, это фирма такая — у них есть серия релюшек HK4100F). Еще использовал две оптопары 4N35S, одну на вход — отлавливать входящий звонок, вторую на замыкание кнопки открытия домофона.

Получившиеся схема и топология платы вот (всё есть в репозитории, ссылка в конце статьи):





Платы с производства.



Несколько фотографий







Описание работы трубки

Сначала немного по принципу работы самой трубки — у меня Цифрал КЛ-2. Вот схема с официального сайта.



На схеме: 1,2 — контакты подключения линии домофона (имеет полярность, если кто не знал); SW2 — переключатель звука трубки (внизу — звук выключен, вверху — звук включен); SW1 — рычаг разговорной трубки (внизу — трубка висит, вверху — трубку сняли для разговора); SB1 — кнопка открытия двери; BA1 — динамик трубки; BM1 — микрофон трубки, HL1 — светодиод.

Когда подъездная панель дает вызов, в линию поступает меандр амплитудой 12В. Сопротивление в линии должно быть 50 Ом, в любом другом случае на панели высветится ошибка. Если переключатель SW2 находится в нижнем положении (звук на трубке выключен), то в линию подключен резистор 50 Ом — светодиод поморгает, но звука мы не услышим. Если переключатель SW2 в верхнем положении (звук включен), а переключатель SW1 в нижнем (трубка висит), то в линии будет сопротивление динамика BA1 всё те же 50 Ом, как раз на него попадает меандр и мы слышим звук. После снятия трубки, SW1 переходит в верхнее положение и один вывод динамика отрывается от земли, теперь там будет аналоговый сигнал разговора и приемлемая для уха громкость, а не звонок на сотню децибел. Если вы решаете открыть гостю дверь, то нажимаете на кнопку SB1, которая запирает транзистор и сопротивление в линии резко возрастает — так панель понимает, что надо открывать дверь.

Теперь о доработках



Relay1 — берем управление звуком на себя (считаем, что родной переключатель трубки SW2 в верхнем положении, иначе будет каша); Input — оптопара, дергается во время звонка (подключена перед Relay1, чтобы видеть звонок в бесшумном режиме); Relay2 — имитирует снятие трубки; Open — замыкает кнопку открытия двери. Обращаю ваше внимание на то, что релюшки подпаяны нормально замкнутыми контактами в разрыв. Это означает, что в любой момент можно отключить домофон от сети (а вдруг свет вырубился или интернет пропал) и он сохранит свою работоспособность, это важно.

Прошивка

Прошивку писал в PlatformIO (плагин для редактора Atom) на ардуиновских библиотеках. Ссылка на репозиторий в конце статьи. Эта, с вашего позволения, IDE будет поудобнее родной ардуиновской — кто не пробовал, обязательно попробуйте. В качестве MQTT клиента на телефон использовал IoTmanager (далее — просто клиент). По программе много рассказывать не буду (желающие посмотрят код), лишь опишу, что она умеет:

  • подключаться к MQTT брокеру
  • публиковать топики с настройками для клиента
  • подписываться на топики для реакциина переключения в клиенте
  • отправлять push уведомление на телефон при входящем звонке
  • публиковать измененные настройки при звонке (чтобы видеть статус в клиенте)
  • отключать звук на домофоне по команде клиента
  • открывать дверь разово,
  • открывать бесконечное число раз
  • просто сбрасывать трубку

Экранные формы приложения (кликабельно)



Фишка программы IoTmanager в том, что все настройки хранятся в топиках, а она лишь отображает то, что опубликовано. Немного теряется смысл легковесного протокола MQTT, но мне такая реализация нравится. При желании можно переделать под другой MQTT клиент.

Конечно всё это (да еще с двумя электромеханическими реле) требует внешнего питания и я бы задумался над целесообразностью поделки, если бы мне понадобилось заводить питание 5В от розетки… Но у меня счетчик находится внутри квартиры, а домофон висит совсем рядом. Я просто заказал на Ali модуль 220AC/5VDC на din-рейку и запитал домофон от него. На фото он перевернут для удобства внутреннего монтажа.



Всем спасибо за внимание. Приглашаю в комментарии.

Полезные ссылки:

1. Репозиторий этого проекта на GitHub — там есть схема, разводка, исходный код.
2. Создание умного домофона с автоответчиком и Интернет-соединением — статья товарища ClusterM, упомянутая в начале.
3. Как я домофон Vizit к mqtt подключал — домофон с Arduino и Ethernet shield.
4. Esp8266 управление через интернет по протоколу MQTT — статья про MQTT и ESP8266.
5. Дистанционное управление домофоном — еще одна статья по теме.

Комментарии (73)


  1. AxianLTD
    11.09.2017 10:37
    +1

    Хорошая автоматика, правильная. Питание бы как-нибудь инжектить еще в тот же провод, два провода малость лишнего. Или поставить аккумулятор с подзарядкой от линии домофона. Может вообще в виде внешнего блока?
    И такой же с GSM :-) И можно продавать.


    1. oWart Автор
      11.09.2017 10:39
      +1

      Получить что-то внятное по питанию с линии домофона в моем понимании невозможно.
      В линии должно быть 50 Ом. Шаг вправо, шаг влево — расстрел.


      1. mozg1986
        11.09.2017 11:35
        +1

        Да и трубка подключается к цепям домофона только во время звонка и разговора (через транзисторы коммутируются и "+" и "-" трубки).


      1. MnogoBukv
        11.09.2017 17:21
        +1

        А сопротивление проводов? Типа, первый этаж и 17-й?


        1. oWart Автор
          11.09.2017 17:24

          Я думаю в панели учтена эта погрешность


  1. mitgard
    11.09.2017 11:28
    +1

    А почему бы не использовать твердотельные реле вместо электромеханических?


    1. oWart Автор
      11.09.2017 11:51

      БольшУю роль сыграло то, что я выбирал из того, что было в наличии. Для выключения звука, например, требовалось перекидное реле, а среди твердотельных я таких не встречал. Может кто знает такие, буду рад, если покажите.
      Выбор нормальнозамкнутых твердотельных (для поднятия трубки) тоже весьма ограничен и, повторюсь, у меня не было их в наличии.


      1. mitgard
        11.09.2017 12:54
        +1

        Я в принципе так и предполагал, что выбор был из того, что уже не надо покупать.


      1. dimas
        13.09.2017 14:10

        Перекидное твердотельное, TN2-L2-5V — не то, что требуется?
        Не помню где нашел, сам не пробовал…


        1. oWart Автор
          13.09.2017 18:02

          Электромеханическое жеж…


  1. rustavelli
    11.09.2017 11:30
    -3

    А можно было бы просто узнать код от домофона и всем пользоваться им. Панель домофона в подъезде поменяли за 1 день, когда я узнал правильный email, куда пожаловаться. До этого год страдал с западающими кнопками на панели.


    1. rustavelli
      11.09.2017 11:35

      Если уж сделали MQTT, у правление надо было заводить на сервер умного дома. Чтобы при вашем приближении к подъезду дверь сама открывалась.


      1. alexws54tk
        11.09.2017 11:42
        +3

        … Чтобы при вашем приближении к подъезду дверь сама открывалась.

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


        1. rustavelli
          11.09.2017 11:54
          +1

          Да пофиг, пусть будет открытый всё это время. Лет 20 назад никто про эти домофоны и не думал.
          Но вообще у подъезда только на лавках сидят, бухают. Обычно там никто не задерживается.


          1. oWart Автор
            11.09.2017 12:59
            +2

            А как Вы собираетесь открывать дверь без факта входящего звонка? Панель же среагирует на сигнал открытия только после вызова в конкретную квартиру…


            1. rustavelli
              11.09.2017 13:02
              +1

              не знал об этом. У меня код, поэтому и трубку домофона в квартире ставить не нужно было.


              1. oWart Автор
                11.09.2017 13:04
                +2

                Да, такая особенность. Панель дает вызов одному абоненту в один конкретный момент времени и ждет от него принятия решения. Просто так взять и подать сигнал в линию бесполезно.


              1. oWart Автор
                11.09.2017 13:14

                Небольшое отступление от темы, для общего развития читающих.
                В качестве альтернативы люди делают «заглушки», которые открывают дверь сразу после входящего звонка. Все построено на аналоговой электронике, устройство вешается вместо трубки и не требует внешнего питания. Единственный минус — дверь открывается любому позвонившему.


                1. rustavelli
                  11.09.2017 13:16
                  -1

                  кстати, а по такому же принципу нельзя сделать открытие по коду? Чтобы трубка в квартире понимала, какие кнопки на домофоне нажимаются после звонка. И тогда можно будет задавать свой код, после которого будет открываться дверь.


                  1. oWart Автор
                    11.09.2017 13:21
                    +1

                    Вопрос интересный. Возможно тут прокатил бы вариант с тональным набором, как на телефонах, но я не помню, чтобы клавиши на панели различались по тональности… А следовательно отследить на трубке в квартире, какая клавиша была нажата, не представляется возможным.

                    Легче уж тогда сделать простенькое распознавание голоса и кодовое слово «сиськи» для входа в подъезд.


                    1. Mogwaika
                      11.09.2017 17:31

                      Ну например унарный код из пик-пик-пик-пик-пик можно реализовать?


                      1. oWart Автор
                        11.09.2017 18:34

                        Думаю вполне возможно


                        1. Shrizt
                          13.09.2017 14:00

                          Распознование голоса прикольнее. В принципе через ESP можно пихать это все на гугл, там распозновать речь и делать что хочешь :)
                          А по простому — можно просто прикинутся трубкой другой (несуществующей) квартиры и при ее вызове сразу открывать дверь… Для безопасности — номер можно менять и присылать на телефон push-ем %)


                          1. oWart Автор
                            13.09.2017 18:07

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


                            1. Shrizt
                              13.09.2017 18:18

                              О, да, не заметил, что тут речь о координатной системе…


                1. CheeseMaster
                  11.09.2017 15:57
                  +2

                  Единственный минус — дверь открывается любому позвонившему.
                  Тумблер поставить можно, жду гостей — включил «заглушку», пришли — выключил (всё равно же к дверям подходить).


                1. Alfacom
                  12.09.2017 11:27
                  +1

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


      1. oWart Автор
        11.09.2017 11:45
        +3

        А если нету никакого умного дома? Делал конкретно под себя. Есть телефон и надо бесшумно открывать, т.к может спать маленький ребенок.


        1. rustavelli
          11.09.2017 12:09
          -3

          Поставить Home assistant, если дома есть какой-н сервер — дело на один час.


          1. oWart Автор
            11.09.2017 12:10
            +2

            Нету сервера и нет необходимости


            1. rustavelli
              11.09.2017 12:15

              кода от домофона тоже нет?


              1. oWart Автор
                11.09.2017 12:16

                Именно


  1. AB_AG
    11.09.2017 11:41
    +2

    Как найти штуку, от которой вы всё запитали?


    1. oWart Автор
      11.09.2017 11:42
      +1

      Я брал конкретно вот эту. Есть разные аналоги.


    1. alexws54tk
      11.09.2017 11:48
      +1

      Например в поиске на Али набрать «5vdc din rail», и выбирать на свой вкус.


      1. UksusoFF
        11.09.2017 21:01
        +1

        Что-то дорого :( С учетом того что большинства наверняка валяются лишние зарядки от телефонов в количестве больше одной штуки.


        1. vvzvlad
          12.09.2017 02:13

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


          1. UksusoFF
            12.09.2017 07:18

            Не обязательно же висеть на проводах и почему сразу экономить?


            1. vvzvlad
              12.09.2017 19:10

              Так в щитке нет розетки, а у блоков питания для телефонов нет даже просто дырки для крепления, не говоря уж о креплении на дин. Как ему еще висеть?
              А экономить — это жалеть 500 рублей на нормальный блок питания, покупая что-то дешевое для зарядки.


  1. Efog
    11.09.2017 12:56
    +1

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


    1. oWart Автор
      11.09.2017 12:57

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


  1. Max_Drevo
    11.09.2017 13:14
    +1

    Что используете в качестве MQTT сервера?


    1. oWart Автор
      11.09.2017 13:14

      Бесплатный cloudmqtt.com


  1. AllexIn
    11.09.2017 14:07
    +1

    Глупый вопрос немного в стороне, но все же по теме…
    Есть ли возможность двухпроводную вызывную панель подключить к трубке в количестве двух штук? В интернете пробовал гуглить, но на свою трубку(DP-201R) не смог даже схему найти… И лишь упоминания какого-то устройства, которое нужно использовать чтобы подключить две вызывных панели…


    1. oWart Автор
      11.09.2017 14:13
      +1

      Затрудняюсь ответить. Будет зависеть от панели, каким образом она вызывает абонента. Еще раз повторюсь, что в обычных координатных домофонах сопротивление в линии должно быть 50 Ом (именно такое имеет трубка), и тут будет важно какое сопротивление внесет в линию вторая панель, подключенная параллельно. Тут и проблемы с разным питанием могут быть.


  1. vvzvlad
    11.09.2017 15:25
    +1

    Но зачем надо было делать плату с панелькой под NodeMCU, если можно было разместить стаб, несколько резисторов и ESP на той же плате?


    1. aol-nnov
      11.09.2017 16:05
      +1

      … а реле подвесить на соплях рядышком? :)

      oWart, нет планов впилить голосовой тракт? :) видал mp3-плеер на есп — то есть, проц тянет норм. осталось приколхозить ацп, я так понимаю? или даже встроенный зазюзать…


      1. vvzvlad
        11.09.2017 16:09

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


        1. aol-nnov
          11.09.2017 16:10
          +1

          я так понимаю, реле и nodemcu были уже у автора в наличии. и чтобы всё собрать на одной, надо было еще от старой отпаять. но зачем? :)


          1. vvzvlad
            12.09.2017 02:11
            -3

            А если бы была малина и три промышленных контактора, сделал бы на них? Зачем запихивать отладочную платку в готовое устройство?


            1. aol-nnov
              12.09.2017 08:36
              +2

              ёмаё, vvzvlad, этж для себя и «фо фан» в свободное время! сделал, работает, рад.
              к чему эти занудства?


              1. vvzvlad
                12.09.2017 19:13

                Эээ… Странная у вас логика. Если фофан, то сойдет что угодно и любой говнокод? Я увидел способ оптимизировать, я его сказал. Если взять ESP12E, то не надо будет тратить платку nodemcu, которая в общем-то, отладочная, и оставлять ее в устройстве, ну… во-первых, жалко, во-вторых, смахивает на подход «запихнет туда ардуину».


      1. oWart Автор
        11.09.2017 16:18

        Да была такая идея, даже трансформаторов для развязки прикупил, но ограничился вот этим. Появились другие дела.


    1. oWart Автор
      11.09.2017 16:16

      Проект был сделан что называется между делом: с минимальными затратами и на том, что есть. На NodeMCU уже есть USB-UART правильно разведенный для прошивки и стаб на 3V3. Я лишь развел релюшки и сделал бутерброд, благо место внутри трубки позволяет. Считаю нецелесообразным делать все на одной плате самому, поделка же разовая.


      1. vvzvlad
        12.09.2017 02:11

        Все равно вы плату заказывали, какая разница, там +20 точек пайки всего.


  1. instalator
    11.09.2017 18:01
    +1

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


    1. oWart Автор
      11.09.2017 18:32

      Хм… а в этом есть смысл, спасибо. В таком направлении правда не подумал. Попробую на досуге прикинуть схему.


  1. UksusoFF
    11.09.2017 18:18

    Собираю тоже самое с той же целью. Спасибо за статью.
    А можно ссылку на али на БП для din рейки?


    1. oWart Автор
      11.09.2017 18:29
      +1

      В комментариях выше есть ссылка


  1. Artemiy117
    11.09.2017 19:58

    Поясните плиз, а что значит «открывать бесконечное число раз»?


    1. oWart Автор
      11.09.2017 21:25

      По скриншотам посмотрите, там есть переключатель «Открывать всем». Когда он включен, дверь будет открываться на любой звонок


  1. renat_g
    12.09.2017 09:25
    +1

    Было бы неплохо еще двухстороннюю голосовую связь сделать, то есть чтобы звук с трубки передавался на смартфон и обратно.


    1. semen-pro
      14.09.2017 10:34

      блютуз прикрутить?


  1. Mishootk
    12.09.2017 09:26
    +1

    Мелкая идея для доработки ПО: все режимы сделать управляемыми с таймером действия. Например юзкейс для «открыть разово в течение 10 минут» — на автобусе подъезжаю к дому, активировал, захожу свободно. Если по дороге задержался (в магазин забежал), само сбросилось. Для «открыть всем в течение 5 минут» — иду толпой домой (гости, допустим), активирую, все с интервалом 1-2 минуты заходят не дожидаясь хозяина и режим сам сбрасывается.

    Более умное устройство уже требует иного железа, с пробросом голоса по сети (gsm не нужен — wifi), это не в данную разработку.


    1. a_tarsov
      12.09.2017 21:48

      У меня вопрос, а для чего устанавливают домофон в подъезде?
      Вот 10 мин. дверь открыта и что? Входи любой, потому, что один товарищ пожелал бросить открытой дверь, пока он идет от автобуса. А в это время, например, бомжи вошли и устроили пожар. Это конечно не панацея, но минимально от пьяного, плохо воспитанного человека, пожелавшего сходить по-маленькому в подъезде защищает.
      Почему вы об этом забываете? А если можете сделать лучше, чем домофон, почему не делаете?
      Да, дистанционное открытие, это хорошо. Но лучше было бы перевести всё это безобразие в приложение и управлять с мобилки. Как входящим вызовом, так и открытием. В результате, даже не присутствуя дома можно было бы и открывать, и отвечать. Вот это было бы вообще замечательно.
      Но автор, в свою очередь, молодец! Он решил СВОЮ задачу. И с нами поделился. Спасибо ему.


      1. oWart Автор
        12.09.2017 21:56
        +1

        Я как раз и реализовал управление с мобилки, можно открыть дверь на звонок и не обязательно для этого присутствовать дома. Единственное что — отвечать голосом нельзя.
        А по поводу идеи открытия на 10 минут от Mishootk, так идея имеет право на жизнь. Вы, a_tarsov, кажется не понимаете принцип работы домофона. Я его где-то тут описывал, немного повторюсь. Дверь откроется только в том случае, если поступит входящий звонок в вашу квартиру. Невозможно открыть дверь подъезда без входящего звонка от панели. Думаете бомж будет знать тот момент времени, когда вы вышли с автобуса и направляетесь домой, чтоб позвонить конкретно в вашу квартиру? Я так не думаю. Такое устройство нисколько не снижает пропускной контроль в подъезд. Можно позвонить в любую квартиру и прикинуться почтальоном/скорой/милицией.


        1. a_tarsov
          13.09.2017 07:13
          +1

          Это я на «парах». Как раз вчера, еле выгнал такого товарища за дверь. Провонял весь подъезд.
          А момент обязательного вызова, я действительно пропустил. Спасибо, что поправили.


          1. grumbler66rus
            13.09.2017 22:34
            +1

            Такие «товарищи» заходят без звонка — физически нормально развитый человек вполне в состоянии рывком открыть магнитный замок, а человек с «фомкой» и без рывка.


      1. Mishootk
        13.09.2017 09:31
        +1

        В приложении уже есть режим «открыть однократно» и «открывать всегда». Я предложил добавить временное ограничение, что наоборот повысит защиту от несанкционированного проникновения из за человеческого фактора (забыл снять режим).


  1. yusman
    12.09.2017 17:43
    +1

    Классная статья.
    Еще можно по сигналу GPS определять что подходишь к дому и активировать режим «открывать всем».


  1. Mishootk
    13.09.2017 09:39
    +1

    Кстати, можно поставить «свой секретный код». На случай когда забыл ключ от домофона, сел телефон, дома никого (искуственно, согласен, но похожие ситуации возникают).

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


    1. sergey876
      15.09.2017 13:54

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

      Вот, так же хотелось бы себе сделать. Достаточно думаю 3 гудка, пауза 5-10 сек и при следующем звонке на 3 гудок «автооткрытие». Кто подскажет простую схемку без микропроцессоров? :-)


  1. ulole
    15.09.2017 13:54

    Отличное решение. Хотел как-то собрать на работе что-то похожее, чтобы не вскакивать постоянно с рабочего места ради нажатия кнопки открытия двери на домофоне. Домофон простой, без вызывной панели, просто кнопка, динамик, микрофон и «таблеткоприемник». Решил проблему просто — взял старую автосигналку и реле центрального замка подсоединил параллельно кнопке открытия двери. Теперь открываю дверь не вставая с места — брелком. С улицы, конечно, радиосигнал с брелка не достает, но если поднести его близко к «таблеткоприемнику» — сигнал проходит. Видимо радиосигнал идет по кабелю. Питается сигналка от резервного источника питания на 12 вольт.