![](https://habrastorage.org/webt/yz/s9/r3/yzs9r3pd5_c6uacf0cvy0wbl9r8.jpeg)
Первые мысли были взять модуль Arduino Mini, модуль часов, индикатор и как-то все это запихать в корпус сломанного таймера и задействовать его родной моторчик и шаровой клапан. Но как-то оно туда не очень лезло, потребляло бы оно явно больше оригинальной начинки (а значит можно забыть о батарейках в корпусе) и это было скучно и не масштабируемо — поливать уже хотелось не только теплицу, а сломанный таймер был только один.
И тут на Али мне на глаза попался нормальный моторизованный шаровой кран. Вот такой красавец:
![](https://habrastorage.org/webt/zu/md/c5/zumdc50whupl9mloczorxcmo6sg.jpeg)
Да он стоил приличных денег, но его не страшно было подключить с летнему водопроводу и оставить на неделю без присмотра. Он вообще довольно добротный, хоть и с пластиковым редуктором — сейчас пара таких кранов трудятся у меня на основном водопроводе, где давление 5атм.
Идея была проста. В ящике стола ждала своего часа платочка с WiFi-модулем ESP8266. От экономии питания было решено отказаться в пользу б/у автомобильного аккумулятора, которого по расчетам должно было хватать как минимум на месяц автономной работы устройства.Чтобы не проворонить момент разряда АКБ, в схеме был предусмотрен делитель, через который встроенный АЦП ESP8266 непрерывно измерял напряжение питания. Часами в схеме должен был служить модуль DS3231 с батарейкой, а понижать напряжение с 12В до 3.3В должна была платочка на м/с MP1584EN.
Вот блок-схема прототипа:
![](https://habrastorage.org/webt/qr/23/j6/qr23j6rhqqseg_haa2kevuaglqc.png)
А вот фото его реализации![](https://habrastorage.org/r/w780q1/webt/ux/80/-p/ux80-pghlpqxovrie-igtxbpuee.jpeg)
уже слегка разобранная реализация — модуль DC-DC ушел в боевой кран, модуль часов на обратной стороне макетной платы
![](https://habrastorage.org/webt/ux/80/-p/ux80-pghlpqxovrie-igtxbpuee.jpeg)
уже слегка разобранная реализация — модуль DC-DC ушел в боевой кран, модуль часов на обратной стороне макетной платы
Управление мотором крана тут сделано просто — какие транзисторы нашлись в ящике стола, те и поставил. В реальности, мотором можно управлять например через м/с ULN2003 включив параллельно несколько каналов или полевыми транзисторами с логическим управлением или вообще через модуль реле с опторазвязкой. Нужно только учесть, что мотор при рабочем токе порядка 70мА, имеет пусковой ток (и ток в момент блокировки вращения) порядка 300-350мА.
Быстренько бы написан скетч на Arduino с простым Web-интерфейсом:
![](https://habrastorage.org/webt/vq/1u/rc/vq1urcw-ttzsjbbvcm7nbcxcuky.jpeg)
И прототип встал на тестовое дежурство. Web-интерфейс крана я пробросил через роутер и устройство было постоянно доступно онлайн.
А мысли побежали дальше. Один прототип это хорошо, но хочется несколько таких кранов и делать это все на макетных платах не вариант. Кран был вскрыт. И стало видно, что внутри там очень много места под герметичной крышкой и даже есть крепежные места:
![](https://habrastorage.org/webt/rt/tc/3f/rttc3f_0uzhnlpjql2vp4ds-nvm.jpeg)
В том кране, который использовался в прототипе, под крышкой была маленькая плата с реле, которая обеспечивала логику управления. А на фото кран с индексом CR05. В этих кранах нет никакой логики и плат. Просто выведены провода управления мотором и провода концевых выключателей. И управлять такими кранами надо сменой полярности напряжения на моторе. При этом сильно желательно контролировать моменты окончания закрытия/открытия по концевикам тк мы помним, что ток в эти моменты уже 300-350мА.
Блок схема начала вырисовываться такая:
![](https://habrastorage.org/webt/ae/a1/uv/aea1uvc0g09wxdkdyxoioq8t8z8.png)
Теперь берем в руки штангенциркуль, лист бумаги и начинаем снимать размеры, рисовать контур печатной платы и пытаться разместить на ней компоненты. От крупной батарейки CR2032 прошлось отказаться и применить мелкую CR1220(или 1225). Очень долго подбиралась микросхема Н-моста для управления мотором. Выбор вроде большой, но очень много этих микросхем, либо не могут работать при напряжении питания 12В, либо используют биполярные транзисторы с очень большим падением напряжения, ну или корпус неудачный. Микросхема TB6612 сначала долго не попадалась на глаза, а потом казалась сильно избыточной и неудобной для пайки. Но в конечном итоге остановился именно на ней — она доступная и недорогая на Али. H-мост там построен на полевых транзисторах и может работать при напряжении до 15 вольт. Модуль DC-DC преобразователя (MP1584EN) оставил модулем — это оказалось просто дешевле по деталям и распаивать его просто. Главное, для надежности, заменить в нем подстроечный резистор напряжения на постоянный (27кОм — даст выходное напряжение 3.4В ).Микросхему часов можно было применить и в более компактном корпусе, но был один нюанс — все комплектующие я собирался заказывать на Али и был риск получить поддельные или нерабочие микросхемы. Поэтому на начальном этапе все микросхемы планировалось покупать в составе готовых модулей и перепаивать на разработанную плату. А в модулях часы были только в корпусе SO16. По факту, только одна микросхема часов оказалась с браком или плохой подделкой — частота кварца у нее была 32727 при положенных 32768кГц.
После всех подготовительных работ, берем KiKad, немного гуглим в поисках недостающих посадочных мест, некоторые компоненты рисуем сами и начинаем разводить плату:
![](https://habrastorage.org/webt/vj/zf/cy/vjzfcyt6qukg3sj5mev5xhkzcem.jpeg)
Проверяем ее, распечатывая в масштабе 1:1. Прикладываем детали и модули и, если все совпадает, подготавливаем Gerber-файлы для производства и отправляем в EasyEda. Через 3 недели получаем 10 симпатичных платочек и собираем их.
![](https://habrastorage.org/webt/ui/jn/hs/uijnhsbq8zqklcjm1n-pjhpax-c.jpeg)
На фото их осталось 5, остальные все работают
![](https://habrastorage.org/webt/dn/8c/nx/dn8cnx12fhixuzkxywboqkqfmou.jpeg)
Модуль в сборе
Дырки для крепежа, конечно сразу, немного не совпали , некоторые посадочные места получились не такими как хотелось, но в целом изделие, после сборки и прошивки, заработало сразу. На Али были куплены герметичные хвостики питания, пропущены через штатный гермоввод в корпусе и WiFi кран-таймер приобрел законченный заводской вид:
![](https://habrastorage.org/webt/kz/rn/zy/kzrnzyqalg_t_jsrrrjegdvc98q.jpeg)
Вот пара кранов на боевом дежурство на даче:
на посту![](https://habrastorage.org/r/w780q1/webt/da/sx/ds/dasxds16utudu8su6efnv46dixy.jpeg)
![](https://habrastorage.org/webt/da/sx/ds/dasxds16utudu8su6efnv46dixy.jpeg)
Но тут мысль опять побежала дальше. Автоматизации на даче захотелось больше, а модуль получился довольно компактный и универсальный. Через H-мост вполне себе можно управлять обычным реле. Для DIY автоматизации многие берут Sonoff, а тут получается я сам себе не хуже могу сделать.
И тут начинается трансформация простого Wi-Fi крана в то, что получило кодовое название SHAPEsp - сокращение от Esp8266 based Smart Home Automation Platform. По задумке это должно стать недорогим универсальным модулем для домашней автоматизации. Причем это все должно быть надежным и выглядеть законченным изделием после сборки в доступный корпус.
Удивительное дело, но оказалось что в китайский корпус с Алиэкспресс на 2DIN юнита прекрасно, тютелька в тютельку, помещается популярный преобразователь AC/DC 220В/12В HiLink (ну или его клон), реле и силовой разъем, ну и конечно мой слегка переразведенный модуль с ESP8266, часами и H-мостом.
Делай раз
![](https://habrastorage.org/webt/bp/wm/xk/bpwmxkb9rxu-mxso9_fbiz9wc4q.jpeg)
Делай два![](https://habrastorage.org/r/w780q1/webt/ok/jd/d-/okjdd-orz-ecgzujbub-j-p2hzc.jpeg)
![](https://habrastorage.org/webt/ok/jd/d-/okjdd-orz-ecgzujbub-j-p2hzc.jpeg)
Делай три![](https://habrastorage.org/r/w780q1/webt/_i/ip/jm/_iipjmuknwsvpqelavmsrxrj3t0.jpeg)
модуль можно установить как в корпус крана, так и в DIN-реечный корпус
![](https://habrastorage.org/webt/_i/ip/jm/_iipjmuknwsvpqelavmsrxrj3t0.jpeg)
модуль можно установить как в корпус крана, так и в DIN-реечный корпус
И получаем:
![](https://habrastorage.org/webt/ht/2x/ui/ht2xuiatsx_ckjmyit2ihczozh4.jpeg)
Немного изменил форму модуля. Добавил ему краевых разъемов, чтобы он просто мог стоять вертикально в 2DIN корпусе. Разместил на верхнем торце платы индикаторные светодиоды, которые видны на просвет в пластиковом корпусе. Ну и развел плату носителя для реле и источника питания. Чтобы было дешевле, все это было отправлено в производство одной платой:
![](https://habrastorage.org/webt/un/5j/z2/un5jz2k4nzvoo1g4bhkhdyik7bq.jpeg)
Собрал два таких прототипа и поставил их на даче управлять включением конвекторов для зимних наездов:
На другом посту![](https://habrastorage.org/r/w780q1/webt/2t/yo/po/2tyopox-lcaqrqdd6yb3j8fqb3i.jpeg)
Один из модулей в щитке, рядом с парой контакторов которые включают конвекторы
![](https://habrastorage.org/webt/2t/yo/po/2tyopox-lcaqrqdd6yb3j8fqb3i.jpeg)
Один из модулей в щитке, рядом с парой контакторов которые включают конвекторы
Но потом решил его еще больше улучшить и сделать более универсальными. Для более надежной и удобной прошивки разместил на модуле схему прошивки от NodeMcu. Вывел все возможные пины и добавил контактных площадок для удобства подключения разных датчиков. Все краевые пины разместил с шагом 2.54мм, так что модуль можно воткнуть в breadboard макетную плату. Естественно опробовал подключение термометра ds1820, комбинированного датчика BME280 и датчика влажности на компараторе. Получилось что, кроме простого таймера с реле или краном, можно легко построить метеостанцию или например систему аквастоп. Ну и всякие другие системы извещения и управления…
Увлекшись, нарисовал модель своего модуля для Fritzing. Так что можно оценить и повертеть различные варианты применения виртуально:
![](https://habrastorage.org/webt/ob/rs/qm/obrsqm8tbnl6mknximfdzp7ossc.png)
Ссылка на GitHub модели есть внизу статьи.
Ну а дальше начинается самая сложная часть — программная поддержка модуля. Изначально я все тестировал и испытывал со своим довольно простым Arduino-скетчем. Простой HTML, немного Java-скрипта, разные простые способы передачи данных, только нужный мне функционал таймера и некоторых датчиков. Но довольно быстро стало понятно что освоить все и вся в современном мире IoT и умного домостроения будет не так-то просто. А также просто лень (тут улыбчивый смайлик). И еще иногда не хочется изобретать велосипеды.
Поэтому было принято решение посмотреть что же есть из готовых прошивок в которые можно добавить поддержку своего модуля. Как отправная точка были взяты альтернативные прошивки для изделий Sonoff: Sonoff-Tasmota, ESPurna, ESPEasy. Поиском можно найти сравнительные обзоры этих прошивок.
Например:
https://lobradov.github.io/FOSS-Firmware-comparison-overview/
https://lobradov.github.io/FOSS-Firmware-comparison-developers/
В реальности, я как-то глазом пробежав исходные тексты в репозиториях этих прошивок, понял что проще всего мне будет добавить свой модуль в прошивку ESPurna. Код прошивки был довольно разумно структурирован и изначально предполагал добавление новых модулей и функций. В прошивке был обязательно нужный мне функционал таймера — автономный Sheduler. Более того, можно сказать из коробки, просто описав свою конфигурацию с простым реле в файле hardware.h, я получил уже рабочий вариант прошивки WiFi-реле.
Однако у моего модуля был более богатый и сложный функционал. И было принято решение контрибутить в прошивку. С одной стороны это довольно просто — пишем функционал и делаем pull-реквест, но в реальности это нудный и долгий процесс с не всегда положительным или быстрым результатом. Это издержки того что предлагаемый функционал по большому счету нужен только мне и моей неизвестной плате.
Начал я с поддержки часов. В прошивке ESPurna все работало через NTP и библиотеку Time для arduino — ну так исторически сложилось, что знать время нужно, а у изделий Sonoff автономных часов нет и предполагается что они всегда имеют доступ в интернет. Для поддержки RTC часов я написал простенький модуль, который при желании подменял функцию провайдера времени с чистого NTP на NTP+RTC. Принцип был прост — если недоступна синхронизация по NTP, то пытаемся читать время из локальных часов RTC. При появлении доступа к NTP серверам восстанавливаем синхронизацию и при желании синхронизируем локальные часы. Так часы на моем модуле включились в работу. Pull-реквест довольно быстро приняли, но лег он в отдельной ветке espurna-rtc.
Следующим был тривиальный pull-реквест. Так как я измеряю напряжение питания до DC-DC преобразователя, чтобы отследить разряд АКБ, то мне нужен был мониторинг не напряжения питания модуля ESP8266, а некоторого пользовательского. Что я и оформил в виде pull-реквеста «add support for custom VCC monitoring». Но этот запрос как-то повис в воздухе… и желание контрибутить как-то утихло.
Кроме этого стало очевидно что добавить свой модуль в список поддерживаемых законченных устройств будет не так-то просто — у него возможна куча разных конфигураций. Поэтому было принято решение просто развивать свой форк прошивки. И по возможности и желанию поддерживать синхронизацию, делать pull-реквесты или предлагать cherry-pick в основной репозиторий прошивки.
После такого решения все стало проще. В прошивке была частична переписана система управления реле. В нее был добавлен режим управления H-мостом и она стала более удобной в плане добавления пользовательских режимов работы реле.
Дальнейшее изучение кода прошивки показало, что ее рефакторить не перерефакторить. Стиль написания и использования ресурсов местами очень жесток для микроконтроллера (хоть он и довольно шустрый 32-битный). Например система выдачи отладочных сообщений пожирала стек с огромной скоростью, но при этом, чтобы просто не уронить всю систему, блокировалась когда размер стека становился меньше 10кБайт. Я немного переписал код в своей ветке так что теперь все отладочные сообщения и подсказки в консоли выводятся полностью.
Ну и на текущий момент в прошивку была добавлена подсистема расчета
восходов/закатов солнца и виртуальный сенсор SunriseSensor, так что можно из модуля SHAPEsp соорудить простое астрономическое реле. Надо будет собраться с духом и закоммитить в основной репозиторий. Думаю что это полезный функционал.
Вот такая история трансформации DIY идеи от прототипа до практически готового изделия. Возможно востребованного изделия. Самое удивительно, что я еще так и не опробовал никаких систем умного дома — все модули трудятся у меня совершенно автономно друг от друга и просто доступны через web-интерфейсы в интернете. А купленная когда-то плата OrangePi PC лежит в ящике стола и ждет своего часа, чтобы стать контроллером умного дома.
Список ссылок: