У меня на въезде во двор загородного дома установлены автоматические сдвижные ворота. При подъезде к воротам их можно открыть, а затем закрыть радиобрелоком, который должен быть у каждого члена семьи. Работает он на частоте 433 МГц. Еще воротами можно управлять кнопкой, установленной в гараже на территории двора. С брелоками иногда случаются неприятности — один брелок в течении года вышел из строя, просто перестал работать, другой потерялся. Дочь ходит в школу (выходит через ворота) и ей не нравится носить с собой ко всему прочему еще и брелок. Я подумал, что было бы неплохо открывать ворота, используя приложение на смартфоне, смартфоны есть у всех и всегда под рукой и не надо носить с собой еще один гаджет в виде брелока. Эту идею хотелось реализовать быстро и с минимальными денежными затратами.
В результате раздумий и изысканий было решено использовать такую реализацию:
Как я уже говорил, в гараже установлена кнопка для ручного открывания ворот. Параллельно кнопке управления воротами подключаем контакты реле. При срабатывании контакты реле имитируют нажатие кнопки. Реле управляется контроллером, который через Wi-Fi подключен в домашнюю сеть Ethernet. Точка доступа к домашней сети Wi-Fi установлена в доме, расстояние между гаражом и точкой доступа около 20 метров, что вполне приемлемо для создания соединения через Wi-Fi. В противном случае в гараж надо прокладывать кабель для проводного соединения контроллера с сетью. Рассматривался вариант использования Bluetooth, это бы позволило вообще отказаться от подключения к локальной сети, что упростило бы систему, а значит повысило ее надежность. Однако соединение по технологии Bluetooth возможно только на расстоянии порядка 10 метров , что оказалось недостаточно для моих задач – находясь за воротами смартфон никак не хотел соединяться с устройством Bluetooth, установленным внутри гаража. Так как других способов коммуникаций в смартфоне не предусмотрено, я остановился на использовании технологии Wi-Fi. Вот что у меня получилось:
Топология построения сети связи для организации дистанционного управления воротами
При подъезде или подходе к воротам смартфон подключается к домашней сети Ethernet, в которой в качестве клиента присутствует контролер управления воротами. Далее запускается соответствующее приложение, через интерфейс которого происходит управление.
Перейдем к практической реализации. В качестве контроллера с интерфейсом Wi-Fi была выбрана готовая недорогая плата WeMos D1 mini, на борту которой установлен микроконтроллер ESP8266 со всей необходимой обвязкой. К данной плате необходимо подключить реле, подать питание и поместить все это в какой-нибудь корпус. В результате должен получиться контроллер управления воротами. Принципиальная электрическая схема подключения платы WeMos D1 mini приведена ниже. Плата WeMos D1 mini на схеме обозначена как модуль А1.
Схема электрическая принципиальная контроллера управления воротами
Было решено данную конструкцию сделать более универсальной. Помимо въездных дворовых ворот в самом гараже установлены двое автоматических подъемных ворот. Их управление построено по такому же алгоритму, что и у въездных. Так же используются брелоки и есть кнопки в гараже для ручного управления, если пользователь находится внутри гаража. Поэтому я добавил в схему еще два реле. Итого посредством данного контролера я смогу управлять из приложения на смартфоне тремя воротами. Кроме того в схеме предусмотрен ключ на транзисторе VT1. При замыкании контактов «IN» транзистор VT1 откроется и на выводе D3 модуля А1 установится сигнал логического нуля, при размыкании логическая единица. Так как вывод D3 уже на самой плате модуля А1 подтянут к шине питания через резистор 10 кОм, дополнительных резисторов устанавливать нет необходимости. В приводе въездных ворот я установил реле, контакты которого замкнуты если ворота находятся в закрытом состоянии. Эти контакты и были подключены к входу IN контроллера. Таким образом контроллер «знает» открыты ворота или закрыты. Для гаражных ворот такую доработку я не стал делать. Далее станет понятно по какой причине.
Цепь питания от переполюсовки защищена диодом VD1 и предохранителем F1. В схеме предусмотрен линейный стабилизатор напряжения на микросхеме DA1, который позволяет запитывать контролер нестабилизированным напряжением от 6 до 15 вольт. Конденсаторы С2–С4 обеспечивают устойчивость работы DA1 и в целом контроллера. Если контролер питается от сетевого адаптера со стабильным выходным напряжением в 5 вольт (как это сделано у меня), то DA1 можно не устанавливать, но тогда надо установить перемычку J1.
Светодиод HL1 сигнализирует о подаче питания на контроллер. В конструкции используются миниатюрные реле NRP02 с обмоткой на напряжение 5 вольт. Диоды VD2–VD4 защищают транзисторы VT2–VT4 от бросков напряжения на коллекторах при коммутации обмоток реле.
У пытливого читателя может возникнуть вопрос – почему для управления транзисторами используются именно выводы D1, D2 и D8 на плате WeMos D1 mini. А все потому, что на других выводах в момент подачи питания на плату постоянно проскакивали какие то импульсы с длительностью, достаточной для включения реле. Я не разбирался почему так и как этого можно избежать. Теперь представим такую ситуацию – отключается подача электроэнергии, а затем включается, или даже просто пользователь отключает устройство от сети и затем включает его, в этот момент реле кратковременно срабатывает и ворота бесконтрольно открываются. А эти три вывода D1, D2 и D8 при подаче питания устанавливаются в ноль и больше не «дергаются», пока мы их не попросим.
Несмотря на то, что это экспериментальное устройство, скажем так trial version, и не смотря на то, что я хотел сделать все в кратчайшие сроки, я не стал устанавливать все комплектующие на макетку, не люблю я макетные платы. Я развел печатную плату, и все комплектующие были установлены на нее. Размер платы 60х95 мм. Толщина стеклотекстолита 1 мм. Толщина меди 18 мкм. Плата была изготовлена методом ЛУТ.
Слева разводка платы в редакторе Sprint-Layout50. Далее плата со стороны печатных дорожек и плата со стороны установки элементов.
При разработке печатных плат я стараюсь максимально использовать SMD компоненты, они занимают меньше места и я не люблю сверлить отверстия. Указанный выше размер печатной платы был выбран исходя из корпуса, в который планировалось установить устройство. В качестве корпуса используется распаячная коробка для открытой проводки от фирмы IEK размерами 100х100х29 мм. Данные коробки имеют низкую стоимость и выглядят вполне эстетично. Ниже на фото показано устройство, закрепленное на основании корпуса, рядом крышка.
Для питания устройства использовался сетевой адаптер (зарядное устройство) с выходным стабилизированным напряжением 5 вольт и максимальным током 1 ампер.
Программная часть
Приложение RemoteXY для смартфона на Андроиде
Самостоятельное написание приложения для смартфона было исключено сразу. Нет у меня опыта в написании таких вещей. Поэтому я решил использовать уже проверенный мною ранее RemoteXY. Это набор сервисов для быстрого создания интерфейсов для смартфонов на базе Android и iOS. При помощи созданного интерфейса возможно управлять устройствами, построенными на различных микроконтроллерах. Конечно же микроконтроллеры должны поддерживаться сервисом RemoteXY. При этом RemoteXY сам генерирует код для микроконтроллера.
Выбранная мною плата WeMos D1 mini поддерживается сервисом. Остановлюсь поподробнее на создании интерфейса в данном сервисе.
Регистрируемся на сайте http://remotexy.com/ru/ .
Переходим в редактор создания интерфейса.
Начнем с конфигурации. Справа заходим в меню конфигурации проекта. Здесь нам надо выбрать тип соединения с нашим устройством, выбрать устройство (плату), которым мы будем управлять через наш интерфейс, выбрать модуль, отвечающий за связь и выбрать среду разработки, которую мы будем использовать для прошивки нашего устройства. Жмем на любой раздел в меню конфигурации. Откроется окно выбора конфигурации. Слева вверху жмем на выбор соединения и чуть ниже видим возможные варианты.
Их всего четыре:
1) Bluetooth – используется для соединения смартфона с вашим устройством по каналу Bluetooth. Конечно же ваше устройство должно иметь в своем составе соответствующие модули Bluetooth. RemoteXY поддерживает Bluetooth модули HC-05, HC-06, HM-10.
2) Ethernet TCP/IP – используется для соединения смартфона и устройства через локальную сеть Ethernet по IP адресу. При этом устройство должно быть клиентом в локальной сети. Это как раз наш случай.
3) Wi-Fi acces point – в этом случае устройство должно работать в режиме точки доступа.
4) Cloud server – этот режим использует облачный сервер RemoteXY и позволяет управлять устройством из любой точки планеты, находясь в интернете.
Я выбираю для своего проекта соединение Ethernet TCP/IP. Далее жмем на выбор устройства.
Поддерживаемых устройств довольно много, поэтому я не буду их перечислять. Необходимая мне плата WeMos D1 mini присутствует в списке, ее я и выбираю. Переходим к выбору модуля связи.
Дело в том, что на плате WeMos D1 mini уже установлен модуль ESP8266, он как раз и обеспечивает канал связи. Поэтому на данном шаге выбирается модуль связи исключительно формально, а именно выбираем «On board ESP8266 WiFi module», т.е. модуль уже установленный на плату. Ну и закончим настройку конфигурации выбором среды разработки. То-есть программу, через которую будет программироваться выбранное устройство (микроконтроллер). Я выбираю Arduino IDE.
С конфигурацией проекта определились. Но прежде чем продолжить необходимо сохранить проект. Слева вверху нажать на символ дискетки, ввести имя своего проекта и нажать «сохранить».
Далее в меню «Подключение модуля» необходимо указать настройки своей сети Wi-Fi. А именно указать SSID (имя сети) и пароль доступа. Порт оставляем по умолчанию – 6377. У меня для примера указано имя сети «dhome» и пароль «12345678».
Перейдем к формированию интерфейса. Справа в меню «Экран» меняю ориентацию смартфона с горизонтальной на вертикальную. Изменяю цвет фона экрана на свой вкус. Можно ввести пароль доступа к интерфейсу при его открытии на смартфоне, но я это не использовал. Вот что получилось:
Далее формируем сам интерфейс. Для того, что бы управлять тремя воротами необходимо три кнопки. Слева в меню «Управление» хватаем мышкой кнопку и зажав левую кнопку мышки тянем ее на экран нашего смартфона. Ставим кнопку в нужное место на экране. Затем редактируем ее параметры справа в меню «Элемент». Я установил режим отрисовки «прямоугольный», выбрал цвет кнопки, стиль окантовки. Указал надпись на кнопке и цвет надписи. Имя переменной оставил по умолчанию, к выводу кнопку не привязывал, в данном проекте это не требуется. Аналогичным образом я установил остальные кнопки.
В меню «Индикация» я выбрал текстовую надпись и поставил ее в левый верхний угол экрана. Тут я хочу отображать уровень сигнала Wi-Fi для контролирования работы устройства в сети. Над кнопкой «Gate» я установил элемент «Индикатор». С помощью этого элемента я хочу отображать состояние ворот – открыты/закрыты. Вот что у меня получилось в итоге:
На этом создание интерфейса в RemoteXY закончено. Жмем справа вверху «Получить исходный код». И RemoteXY выдает нам его для Arduino IDE, собственно как и просили.
Но это конечно же не все. Код рабочий, но в него необходимо дописать свой алгоритм управления воротами. Я скопировал код в Arduino IDE и дописал свои алгоритмы. Да, чуть не забыл – необходимо загрузить с сайта RemoteXY библиотеку «RemoteXY» для Arduino IDE и подключить ее. Библиотека «ESP8266WiFi.h» находится в составе «RemoteXY». Описание того как подключать библиотеки и работать с Arduino IDE выходит за рамки данной публикации, поэтому тут не рассматривается.
В результате получился вот такой скетч:
Несколько слов по самому скетчу.
В строках 75-77 реализован алгоритм вывода на смартфон значения уровня сигнала Wi-Fi, принимаемый устройством. Функция WiFi.RSSI() возвращает уровень Wi-Fi сигнала в формате числа с плавающей точкой. Для преобразования числа с плавающей точкой в строку используется функция dtostrf (). После эта строка передается в переменную RemoteXY.text_1, значение которой отображается на графическом элементе «Текстовая строка». Период обращения к функции WiFi.RSSI() составляет 1 секунду и определяется константой LEVEL_DETECTION_PERIOD.
В строках 79-85 определяется состояние индикатора положения въездных ворот (открыты или закрыты). Если сигнал на выводе POSITIONGATE (это D3 на плате WeMos) имеет логический ноль, значит ворота закрыты и элемент «Индикатор» на интерфейсе смартфона принимает красный цвет.
Далее идут три идентичных процедуры обработки нажатия кнопок. Я не стал эти процедуры выносит в отдельную функцию, это позволяет обрабатывать нажатия кнопок не зависимо друг от друга.
Процедура обработки нажатия кнопки построена таким образом, что при нажатии на кнопку на смартфоне реле замыкает контакты на 300 мс, вне зависимости от того как долго вы удерживаете кнопку. Дело в том, что автоматика ворот срабатывает именно при размыкании реле, и такой алгоритм работы реле исключает неправильное использование интерфейса пользователем при управлении воротами.
Скетч подробно закомментирован, так что интересующимся будет легко в нем разобраться.
С радостью отвечу на вопросы.
Спасибо за статью, Дмитрий, это то, что я искала!
Спасибо, рад что помог.
А как сформированный дизайн попадает в телефон? Предполагаю, что устанавливается какое то приложение, зарегистрировавшись в котором с указанными в проекте login/pass приложение принимает определенный пользователем вид? Но тогда приложение на телефоне требует постоянный контакт с облаком, то есть управление воротами уже не является автономным?
На телефон устанавливается приложение RemoteXY. В приложении есть рабочий стол, на нем буду отображаться контролируемые вами устройства Ардуино. Их может быть много. Скрин прилагаю. В приложении вы запускаете нужный вам интерфейс. Например интерфейс управления воротами. Телефон подключается к этому устройству Ардуино, получает от него интерфейс и вы уже им управляете. Каналы связи могут быть разные. Например у меня ворота управляются через домашнюю сеть вайфая, разумеется я должен находится с телефоном в зоне ее действия, тогда никаких облаков не требуется, устройство полностью автономно. Можно сделать через блютуз, тоже будет автономно. Я пробовал через блютуз, но дальности не хватает. Можно сделать управление через интернет, тогда без облака никак. Например у меня есть устройство на ардуино, которое показывает температуру уличную. Оно установлено в гараже, а датчик на улице. Что бы я мог узнать температуру на улице из любой точки города и даже мира, я его подключил через Инет. Скриншот с телефона ниже. А вообще зайдите на сайт https://remotexy.com/ru/ там все хорошо описано.
Можитте проверить мой скетч?
Проверить на предмет чего? Не работает?
Покажите