Почему самодельный?

Можно было купить готовый модуль, несмотря на его совершенно конскую стоимость в 6-7 тыс. рублей. Однако он не предоставлял наиболее востребованную для меня функциональность: не позволял открывать ворота автоматически "из коробки" при приближении к своему участку на автомобиле. Ну и, естественно, экономия на порядок тоже сыграла не последнюю роль.

Был выбран следующий способ реализации основной задачи: WiFi модуль в автомобиле пытается зарегистрироваться на домашней точке доступа. Если ему это удается - проверяется уровень сигнала. Если уровень сигнала слабый - значит приближаемся к участку и надо подать команду WiFi модулю на автоматике ворот на открытие. Если сигнал сильный - мы уже на участке и ничего делать не надо. Дополнительная функциональность - управление воротами по WiFi через веб-интерфейс, в том числе и с мобильного телефона.

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

Общее описание

Сервер на ESP32-C3 подключается к автоматике ворот и располагается в её же корпусе. Клиенты тоже на ESP32-C3 располагаются в автомобилях моем и жены.

Таким образом возникают два связанных проекта. Первый - аппаратная часть и прошивка для МК серверной части. Второй - прошивка для клиентской части. Аппаратная часть у клиентской части нулевая, так как можно использовать уже готовый модуль ESP32-C3-DEVKITM-1.

В связи с тем, что как раз в это время я занимался изучением Rust, то именно он был выбран в качестве тренировки для первого реального проекта на этом языке. Просто чтобы совместить изучение языка с пользой для дома и семьи. Так же было интересно попробовать не старый ESP32 на Xtensa, а более перспективную линейку на RISC-V.

Подключение к автоматике раздвижных ворот.

Я как раз в этом году установил автоматику раздвижных ворот ALUTECH RTO-1000. С другими моделями я не знаком, поэтому дальнейшее будет относиться только к этой модели. Однако, я думаю, что каких-то принципиальных отличий у других моделей автоматики не будет.

Управление RTO-1000 производится замыканием нормально разомкнутых контактов. Напряжение на входах 30-32 В. Поэтому для коммутации используются MOSFET 2N7000, рассчитанные на 60 В. Датчики положения "Открыто" и "Закрыто" имеют активным высокий уровень 5В. В промежуточном положении оба датчика выдают низкий уровень. Поэтому входы МК подтягиваем к питанию 3.3 В, и подключаемся к выходам датчиков положения через диоды Шоттки 1N5817. Логическую землю МК и RTO-1000 объединяем. Питание МК обеспечиваем импульсным источником питания 220AC-5DC, так как на плате МК уже имеется стаблизатор на 3.3 В, на вход которого и подаются 5В. Остальное хорошо видно на принципиальной схеме.

Схема серверной части
Схема серверной части

В схеме используется два управляющих входа автоматики OP и SBS. OP - сигнал, по которому выполняется открытие ворот, вне зависимости от их положения. Если ворота уже открыты - ничего не происходит. SBS (Step-by-Step) - управление одной кнопкой, в зависимости от положения ворот и предыдущего действия. Если ворота закрыты, то по этому сигналу они открываются. Если закрыты, то открываются. Во время движения по этому сигналу они останавливаются. После остановки по этому сигналу они будут двигаться в обратном направлении относительно движения до остановки.

Прошивка сервера

Основной цикл сервера состоит из подключения к WiFi точке доступа и регистрации обработчиков HTTP запросов и мониторинга WiFi соединения. Если соединение пропадает - освобождаем все ресурсы и начинаем с начала. И так до бесконечности.

Основная HTTP страница сервера очень проста и состоит из заголовка, статуса ворот и одной большой кнопки. Нажатие этой кнопки приводит к вызову обработчика Get gate_sbs. Сама страница содержит простейший код на JS, запрашивающий каждую секунду статус состояния ворот вызовом Get gate_status и обновляющего как строку статуса ворот, так и надпись на кнопке.

Обработчик Get gate_status считывает состояние датчиков положения ворот и возвращает JSON {"s": n}, где n 0 - если ворота открыты полностью, до срабатывания датчика, 1 - если ворота закрыты и 2 - если ворота в промежуточном положении.

Обработчик Get gate_sbs посылает сигнал на вход SBS автоматики длительностью 200 мс. Значение выбрано экспериментально. На 50 мс автоматика не срабатывала вообще, а на 100 мс - не срабатывала через раз.

Обработчки Get gate_open посылает сигнал на вход OP автоматики длительностью 200 мс по тем же причинам.

Прошивка клиента

Основной цикл клиента подобен основному циклу сервера. Подключение к WiFi точке доступа и, в зависимости от уровня сигнала, который был при успешном сканировании точек доступа, посылает сигнал на открытие ворот вызовом Get gate_open HTTP серверу. Затем производится лишь мониторинг соединения с WiFi и если соединение утеряно - освобождаем все ресурсы и начинаем с начала. И так до бесконечности.

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

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

На практике, у меня в сельской местности МК находит точку доступа на расстоянии 250-300 метров, а уверенно соединяется с ней на расстоянии не более 200 метров. При движении автомобиля со скорость 30-40 км/ч МК вполне успевает соединиться с точкой доступа и послать запрос HTTP серверу за 10-15 секунд до того, как автомобиль подъедет к воротам, что меня вполне устраивает.

В качестве дополнительной функциональности, кнопка Boot на МК, которая замыкает на землю GPIO9 и функциональна только при начальной загрузке ESP32-C3, была использована для вызова обработчика Get gate_sbs, что позволяет обходится вообще без штатного пульта от автоматики. Причем радиус действия у неё намного шире, чем у пульта, ограниченного буквально 20-30 метрами.

Текущее состояние клиента так же отображается на имеющемся в ESP32-C3-DEVKITM-1 трехцветном светодиоде WS2812. Ожидание соединения - желтым цветом. Посылка команды на открытие ворот при приближении к участку - красным цветов в течении одной секунды. Устойчивое WiFi соединение - зеленым цветом. Нажатие кнопки SBS - коротким голубым цветом. Ну и во время минутной паузы после потери соединения с WiFi - фиолетовый цвет.

Заключение

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

Код клиента и сервера на GitHub. Процесс тестирования залил на YouTube.

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


  1. aborouhin
    21.11.2024 15:17

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

    P.S. А так задумка интересная, но я, пожалуй, продолжу кнопку нажимать - меня это ни от чего не отвлекает, а брелок пробивает как раз те ~200 метров, за время проезда которых ворота полностью откроются.


    1. ptr128 Автор
      21.11.2024 15:17

      как оно работает, если Вы уезжаете с участка

      Это я как раз указал:

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

      Но теперь появилось еще два варианта, кроме штатного пульта: при помощи мобильного телефона и при помощи кнопки на МК-клиенте. Для последних сделаю потом удобные кнопки под рукой. Заказал такие себе и жене:

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

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

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


      1. aborouhin
        21.11.2024 15:17

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

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


        1. ptr128 Автор
          21.11.2024 15:17

          "если в течение минуты после появления слабого сигнала не появился сильный - закрываем ворота обратно"

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


          1. aborouhin
            21.11.2024 15:17

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


            1. ptr128 Автор
              21.11.2024 15:17

              У раздвижных ворот открытие даже опасней закрытия. Потому что проём ворот контролируется оптодатчиками, а вот зона сдвига ворот при открытии вдоль забора - не контролируется никак. Я уже подумывал там рабицу натянуть, чтобы внуки физически не могли туда попасть.

              Распашные ворота тут опасней, так как зону открытия у них так просто не проконтролируешь.


              1. randomsimplenumber
                21.11.2024 15:17

                зона сдвига ворот при открытии вдоль забора - не контролируется никак.

                Ну, датчики присутствия, например. И сетка, само собой.

                Новые проблемы требуют новых решений.


                1. ptr128 Автор
                  21.11.2024 15:17

                  Ну, датчики присутствия, например.

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

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


                  1. aborouhin
                    21.11.2024 15:17

                    Да, у меня вот в зоне открытия распашных именно что сугробы, подвергающиеся регулярной механической уборке, так что столбики с датчиками не выживут. А городить интеграцию с камерами и пр. - ну теоретически возможно, но не стóит необходимых усилий.


                    1. randomsimplenumber
                      21.11.2024 15:17

                      не стóит необходимых усилий

                      Хм ;) Вся статья про усилия ;) Казалось бы, что может быть проще и надёжнее радиокнопки..


                      1. ptr128 Автор
                        21.11.2024 15:17

                        У штатного брелка радиус действия метров 30, что для ворот, открывающихся 20 секунд, катастрофически мало. Понятно, что кушай он полампера, как WiFi в ESP32, то тоже бил бы на 200-250 метров. Но и таблетку в нем пришлось бы менять каждую неделю.Так что проще, надежней, но неудобно и нефункционально.


                      1. aborouhin
                        21.11.2024 15:17

                        Хм... у меня брелок (Came) пробивает метров на 200. Батарейка живёт годами. Но к плате блока управления воротами подключена внешняя антенна.


                      1. ptr128 Автор
                        21.11.2024 15:17

                        Точней можно об этой технологии?


                      1. aborouhin
                        21.11.2024 15:17

                        Да там никакой технологии, это штатная антенна от производителя - Came TOP-A433N, воткнутая в штатное место на плате и выведенная куском коаксиала повыше на столб ворот.


                      1. ptr128 Автор
                        21.11.2024 15:17

                        Точней можно? У меня сегодня в хорошую погоду ESP32-C3 на свою родную антенну (змейку на плате) WiFi на расстоянии 600 метров прямой видимости поймал и соединился. Буду таймаут после потери связи увеличивать. Но при этом надежная связь всё равно ограничена 200-250 метрами.

                        Поэтому и спрашиваю про технологию. Может 200 метров там сигнал только в идеальных условиях? А в реальных, сквозь забор из профнастила и заросли деревьев окажется даже 99% срабатывания на тех же 30 метрах, что и у меня.


                      1. randomsimplenumber
                        21.11.2024 15:17

                        Lora?


                      1. ptr128 Автор
                        21.11.2024 15:17

                        Точно нет. Я с LoRa игрался. В режиме передачи потребление получалось почти 100 ма. Слишком много для литиевой таблетки.

                        На nRF24L01+, потребляющем всего 11.3 мА в режиме передачи, мне таблетки с трудом на год хватало. И это без какой-либо криптографии.


                      1. randomsimplenumber
                        21.11.2024 15:17

                        У вас в машине аккумулятор на 65 АЧ.


                      1. ptr128 Автор
                        21.11.2024 15:17

                        Речь же о

                        брелок (Came)


  1. Tirarex
    21.11.2024 15:17

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


    1. ptr128 Автор
      21.11.2024 15:17

      Во-первых, слишком малый радиус действия. Ворота действительно открываются медленно. За 150-200 метров BLE точно не свяжется. А за 10 метров, как гарантируется, потребуется долго ждать. На видео видно, что ворота открываются полностью за 20 секунд. А в случае WiFi - они открываются заранее. И именно этого я и хотел.

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


      1. Tirarex
        21.11.2024 15:17

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

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

        Еще вариант если дома есть HomeAssistant а на телефоне стоит приложение, то можно настроить скрипты автоматизации и по позиции с телефона открывать ворота.


        1. ptr128 Автор
          21.11.2024 15:17

          У меня участок 30 соток. Это мне его что-ли десятками меток покрывать? Вариантов парковки автомобилей у меня и жены тоже не мало. До порога старого дома от ворот 30 метров. До порога нового дома - 40 метров. Если до мастерской - то будет уже 50 метров.

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


          1. keemailme
            21.11.2024 15:17

            20 секунд это далеко - фарами текущий код доступа не поморгаешь


  1. nikolz
    21.11.2024 15:17

    Можно сделать отправку команд серверу со смартфона голосом.


    1. ptr128 Автор
      21.11.2024 15:17

      Если хотите - пожалуйста, ссылку на GitHub я дал. А мне это совершенно не нужно. У меня внуки порой так орут, что я даже мыслей своих не слышу )))


  1. keemailme
    21.11.2024 15:17

    тк ворота глючили пока wifi-абонента нет дома то сосед купил wifi-глушилку


  1. ArtMan99
    21.11.2024 15:17

    Где бы эти ворота ещё взять)


    1. ptr128 Автор
      21.11.2024 15:17

      Если ITшник не может себе позволить купить не только ворота, а участок с домом в деревне вместе с воротами - это уже не ITшник )))

      Я, когда удаленка стала доступной, примерно так и поступил.


  1. Vilos
    21.11.2024 15:17

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


    1. randomsimplenumber
      21.11.2024 15:17

      Ну так на работе у вас есть специальные люди для обслуживания этой автоматики. А дома самому впрягаться.. ;)

      Приходишь на пляж - а там станки.. ;)


      1. Drosselmeier
        21.11.2024 15:17

        и стружка


    1. aborouhin
      21.11.2024 15:17

      Особенно под проливным дождём приятно руками открывать, да :)


    1. ptr128 Автор
      21.11.2024 15:17

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


    1. 4chemist
      21.11.2024 15:17

      Я бы на вашем месте пошел бы ещё дальше. Убрал бы ворота совсем. Нет ворот нет проблем.)


  1. sdegtyarev
    21.11.2024 15:17

    Сделал так на гаражных воротах и выездных несколько лет назад. Модули собрал из того что было, залил esphome, подключил к HA. Можно сделать сценарий по появлению телефона в сети wifi или часов, но я опасаюсь, пользуюсь пультом, телефоном или кнопкой xiaomi на батарейке.


  1. mbait
    21.11.2024 15:17

    Не знаю, откуда цена в 6-7 тысяч, GSM-модуль стоит около двух. Задача ожидания решается звонком заранее. Задача занятых рук решается установкой голосового ассистента и настройкой команды "Алиса, открой ворота". Но да ладно, самое главное: что с коммутацией? Обычное дело для платы контроллера привода ворот иметь сухой контакс NO-NC, какие ещё 32В?


    1. ptr128 Автор
      21.11.2024 15:17

      откуда цена в 6-7 тысяч

      Раз, два, три. Хватит?

      GSM-модуль стоит около двух.

      Во-первых, непонятно, при чем тут GSM, если речь о WiFi. Это всё же отдельный геморрой с ежемесячной оплатой. Это даже не считая того, что в моем случае ему потребовалась бы внешняя направленная антенна на столбе, рядом с LTE модемом, так как иначе сигнал сотовой связи уж очень нестабилен.

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

      голосового ассистента

      Кому-то этот вариант подходит. А я физически не состоянии перекричать трактор, бензокосу, внуков и даже собственную жену.

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

      Обычное дело для платы контроллера привода ворот иметь сухой контакс NO-NC, какие ещё 32В?

      Для обывателя или техника есть сленг "сухой контакт". Для инженера - потенциалы и ток.

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

      В данном случае, изолировать все четыре линии (два входа и два выхода) через PC817 не имело никакого смысла.


  1. kavito
    21.11.2024 15:17

    На привод Came поставил wifi релюшку tuya с питанием от контактов на плате привода, через localtuya подключил к HA и прокинул в УДЯ. В машине пользуюсь ЯН и при приближении к дому метров за 100 просто говорю "Алиса, открой ворота". К приезду как раз успевают открыться. Как заеду просто говорю "Алиса, закрой ворота". Профит! Расшарил УДЯ на жену, и теперь она так же делает. Двойной профит!


    1. kavito
      21.11.2024 15:17

      Цена реле <1к


      1. ptr128 Автор
        21.11.2024 15:17

        Два канала, даже без обратной связи от датчиков положения - уже ~ 1 тыс. рублей. Тогда как ESP32-C3 - меньше 200 рублей, с полноценной обратной связью и возможностями расширения. Если добавить по каналу на освещение и пешеходное положение, то потребуется уже четыре реле ~ 2 тыс. рублей. Вот и получили разницу в стоимости на порядок при существенно более слабом функционале.


    1. ptr128 Автор
      21.11.2024 15:17

      wifi релюшку tuya

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

      просто говорю

      Кому-то этот вариант подходит. А я физически не состоянии перекричать трактор, бензокосу, внуков и даже собственную жену.

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


  1. shadrap
    21.11.2024 15:17

    Извините, возможно не понял - у вас на выходах датчиков положения же 5в , на диодах упадет макс 0.5в , нормально для ESP32 4.5 на GPIO ? Для 8266 это нормально , а для 32 вроде как много... И еще не понял - wifi клиент присоединяется к какому-то домашнему роутеру или к есп32 которая сервером на воротах ?

    Интересно было бы послушать статистику о "false negative" при приближении клиента к серверу. Я пробовал у себя подобным образом снимать дом с охраны, но видимо путь подъезда к дому - очень сильный фактор , оказывающий влияние на уровень сигнала, пришлось добавлять передачу GPS координат, иначе количество "не срабатываний" доминировало.

    И как он ESP на риске ? сильно круче чем на экстенсе?)


    1. ptr128 Автор
      21.11.2024 15:17

      Извините, возможно не понял - у вас на выходах датчиков положения же 5в , на диодах упадет макс 0.5в , нормально для ESP32 4.5 на GPIO ?

      Смотрите внимательней на схему. Наоборот, когда на выходе датчика 5В, диод закрыт и на входе GPIO 3.3В через подтяжку к питанию. А когда на выходе датчика 0В, на диоде падает 0.3В (поэтому и диоды Шоттки) и именно столько получается на входе GPIO.

      wifi клиент присоединяется к какому-то домашнему роутеру или к есп32 которая сервером на воротах ?

      И клиент, и сервер соединяются с домашней WIFi точкой доступа, в качестве которой выступает LTE модем на столбе.

      Интересно было бы послушать статистику о "false negative" при приближении клиента к серверу.

      От погоды зависит. Сегодня он у меня умудрился соединиться на расстоянии свыше 500 метров прямой видимости. И радостно мигнул красным, успешно послав команду на открытие ворот на расстоянии чуть менее 500 метров. А вчера в шторм цеплялся только на 250-300 метров.