Главная » Хабрахабр » [Из песочницы] Таймер — начало

[Из песочницы] Таймер — начало

Все началось с него. Это была первая моя покупка на Алиэкспресс для первой автоматизации на даче — захотелось сделать автополив в теплице. Таймер пришел в помятой коробке, с треснутым защитным колпаком, но рабочий. Он прекрасно отработал весь летний сезон поливая огурцы.На зиму был снят и спрятан в теплое и сухое место. Но на следующий сезон меня ждал неприятный сюрприз  — таймер стал зависать, переставал реагировать на кнопки управления и открывать воду. Сначала я грешил на дешевые батарейки и заменил их на фирменные Duraсell. Думал проблема в питании и пусковых токах. Не помогло. Тогда я достал паяльник и пропаял в нем все, что только можно, даже добавил некоторые недостающие конденсаторы. Но он упорно продолжал зависать. К сожалению, изделие не очень ремонтопригодно — в том что было у меня используется бескорпусная микросхема-капля и, видимо, что-то расконтачилось именно под компаундом с микросхемой. Кое-как сезон был закончен с таким барахлящим таймером и я начал думать чем же мне его заменить.
Первые мысли были взять модуль Arduino Mini, модуль часов, индикатор и как-то все это запихать в корпус сломанного таймера и задействовать его родной моторчик и шаровой клапан. Но как-то оно туда не очень лезло, потребляло бы оно явно больше оригинальной начинки (а значит можно забыть о батарейках в корпусе) и это было скучно и не масштабируемо — поливать уже хотелось не только теплицу, а сломанный таймер был только один.
 
И тут на Али мне на глаза попался нормальный моторизованный шаровой кран. Вот такой красавец:

Он вообще довольно добротный, хоть и с пластиковым редуктором — сейчас пара таких кранов трудятся у меня на основном водопроводе, где давление 5атм.
 
Идея была проста.
 
Да он стоил приличных денег, но его не страшно было подключить с летнему водопроводу и оставить на неделю без присмотра. Часами в схеме должен был служить модуль DS3231 с батарейкой, а понижать напряжение с 12В до 3. В ящике стола ждала своего часа платочка с WiFi-модулем ESP8266. От экономии питания было решено отказаться в пользу б/у автомобильного аккумулятора, которого по расчетам должно было хватать как минимум на месяц автономной работы устройства.Чтобы не проворонить момент разряда АКБ, в схеме был предусмотрен делитель, через который встроенный АЦП ESP8266 непрерывно измерял напряжение питания. 3В должна была платочка на м/с MP1584EN. 
 
Вот блок-схема прототипа:

А вот фото его реализации

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

Управление мотором крана тут сделано просто — какие транзисторы нашлись в ящике стола, те и поставил. В реальности, мотором можно управлять например через м/с ULN2003 включив параллельно несколько каналов или полевыми транзисторами с логическим управлением или вообще через модуль реле с опторазвязкой. Нужно только учесть, что мотор при рабочем токе порядка 70мА, имеет пусковой ток (и ток в момент блокировки вращения) порядка 300-350мА.
 
Быстренько бы написан скетч на Arduino с простым Web-интерфейсом:

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

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

От крупной батарейки CR2032 прошлось отказаться и применить мелкую CR1220(или 1225).
 
Теперь берем в руки штангенциркуль, лист бумаги и начинаем снимать размеры, рисовать контур печатной платы и пытаться разместить на ней компоненты. Выбор вроде большой, но очень много этих микросхем, либо не могут работать при напряжении питания 12В, либо используют биполярные транзисторы с очень большим падением напряжения, ну или корпус неудачный. Очень долго подбиралась микросхема Н-моста для управления мотором. Но в конечном итоге остановился именно на ней — она доступная и недорогая на Али. Микросхема TB6612 сначала долго не попадалась на глаза, а потом казалась сильно избыточной и неудобной для пайки. Модуль DC-DC преобразователя (MP1584EN) оставил модулем — это оказалось просто дешевле по деталям и распаивать его просто. H-мост там построен на полевых транзисторах и может работать при напряжении до 15 вольт. 4В ).Микросхему часов можно было применить и в более компактном корпусе, но был один нюанс — все комплектующие я собирался заказывать на Али и был риск получить поддельные или нерабочие микросхемы. Главное, для надежности, заменить в нем подстроечный резистор напряжения на постоянный (27кОм — даст выходное напряжение 3. А в модулях часы были только в корпусе SO16. Поэтому на начальном этапе все микросхемы планировалось покупать в составе готовых модулей и перепаивать на разработанную плату. По факту, только одна микросхема часов оказалась с браком или плохой подделкой — частота кварца у нее была 32727 при положенных 32768кГц.
 
После всех подготовительных работ, берем KiKad, немного гуглим в поисках недостающих посадочных мест, некоторые компоненты рисуем сами и начинаем разводить плату:
 

Проверяем ее, распечатывая в масштабе 1:1. Прикладываем детали и модули и, если все совпадает, подготавливаем Gerber-файлы для производства и отправляем в EasyEda. Через 3 недели получаем 10 симпатичных платочек и собираем их.


На фото их осталось 5, остальные все работают

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

Вот пара кранов на боевом дежурство на даче:

на посту


 

Но тут мысль опять побежала дальше. Автоматизации на даче захотелось больше, а модуль получился довольно компактный и универсальный. Через H-мост вполне себе можно управлять обычным реле. Для DIY автоматизации многие берут Sonoff, а тут получается я сам себе не хуже могу сделать.
 
И тут начинается трансформация простого Wi-Fi крана в то, что получило кодовое название SHAPEsp - сокращение от Esp8266 based Smart Home Automation Platform. По задумке это должно стать недорогим универсальным модулем для домашней автоматизации. Причем это все должно быть надежным и выглядеть законченным изделием после сборки в доступный корпус.
 
Удивительное дело, но оказалось что в китайский корпус с Алиэкспресс на 2DIN юнита прекрасно, тютелька в тютельку, помещается популярный преобразователь AC/DC 220В/12В HiLink (ну или его клон), реле и силовой разъем, ну и конечно мой слегка переразведенный модуль с ESP8266, часами и H-мостом.
 

Делай раз

 

Делай два

Делай три


модуль можно установить как в корпус крана, так и в DIN-реечный корпус

И получаем:

Добавил ему краевых разъемов, чтобы он просто мог стоять вертикально в 2DIN корпусе.
 
Немного изменил форму модуля. Ну и развел плату носителя для реле и источника питания. Разместил на верхнем торце платы индикаторные светодиоды, которые видны на просвет в пластиковом корпусе. Чтобы было дешевле, все это было отправлено в производство одной платой:

Собрал два таких прототипа и поставил их на даче управлять включением конвекторов для зимних наездов:
 

На другом посту


Один из модулей в щитке, рядом с парой контакторов которые включают конвекторы

Но потом решил его еще больше улучшить и сделать более универсальными. Для более надежной и удобной прошивки разместил на модуле схему прошивки от NodeMcu. Вывел все возможные пины и добавил контактных площадок для удобства подключения разных датчиков. Все краевые пины разместил с шагом 2.54мм, так что модуль можно воткнуть в breadboard макетную плату. Естественно опробовал подключение термометра ds1820, комбинированного датчика BME280 и датчика влажности на компараторе. Получилось что, кроме простого таймера с реле или краном, можно легко построить метеостанцию или например систему аквастоп. Ну и всякие другие системы извещения и управления…
 
Увлекшись, нарисовал модель своего модуля для Fritzing. Так что можно оценить и повертеть различные варианты применения виртуально:
 

 
Ссылка на 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. Более того, можно сказать из коробки, просто описав свою конфигурацию с простым реле в файле hardware.h, я получил уже рабочий вариант прошивки WiFi-реле.
 
Однако у моего модуля был более богатый и сложный функционал. В прошивке был обязательно нужный мне функционал таймера — автономный Sheduler. С одной стороны это довольно просто — пишем функционал и делаем pull-реквест, но в реальности это нудный и долгий процесс с не всегда положительным или быстрым результатом. И было принято решение контрибутить в прошивку. В прошивке ESPurna все работало через NTP и библиотеку Time для arduino — ну так исторически сложилось, что знать время нужно, а у изделий Sonoff автономных часов нет и предполагается что они всегда имеют доступ в интернет. Это издержки того что предлагаемый функционал по большому счету нужен только мне и моей неизвестной плате.
 
Начал я с поддержки часов. Принцип был прост — если недоступна синхронизация по NTP, то пытаемся читать время из локальных часов RTC. Для поддержки RTC часов я написал простенький модуль, который при желании подменял функцию провайдера времени с чистого NTP на NTP+RTC. Так часы на моем модуле включились в работу. При появлении доступа к NTP серверам восстанавливаем синхронизацию и при желании синхронизируем локальные часы. Так как я измеряю напряжение питания до DC-DC преобразователя, чтобы отследить разряд АКБ, то мне нужен был мониторинг не напряжения питания модуля ESP8266, а некоторого пользовательского. Pull-реквест довольно быстро приняли, но лег он в отдельной ветке espurna-rtc.
 
Следующим был тривиальный pull-реквест. Но этот запрос как-то повис в воздухе… и желание контрибутить как-то утихло.
 
Кроме этого стало очевидно что добавить свой модуль в список поддерживаемых законченных устройств будет не так-то просто — у него возможна куча разных конфигураций. Что я и оформил в виде pull-реквеста «add support for custom VCC monitoring». И по возможности и желанию поддерживать синхронизацию, делать pull-реквесты или предлагать cherry-pick в основной репозиторий прошивки.
 
После такого решения все стало проще. Поэтому было принято решение просто развивать свой форк прошивки. В нее был добавлен режим управления H-мостом и она стала более удобной в плане добавления пользовательских режимов работы реле.
 
Дальнейшее изучение кода прошивки показало, что ее рефакторить не перерефакторить. В прошивке была частична переписана система управления реле. Например система выдачи отладочных сообщений пожирала стек с огромной скоростью, но при этом, чтобы просто не уронить всю систему, блокировалась когда размер стека становился меньше 10кБайт. Стиль написания и использования ресурсов местами очень жесток для микроконтроллера (хоть он и довольно шустрый 32-битный). Надо будет собраться с духом и закоммитить в основной репозиторий. Я немного переписал код в своей ветке так что теперь все отладочные сообщения и подсказки в консоли выводятся полностью.
 
Ну и на текущий момент в прошивку была добавлена подсистема расчета
восходов/закатов солнца и виртуальный сенсор SunriseSensor, так что можно из модуля SHAPEsp соорудить простое астрономическое реле. Возможно востребованного изделия. Думаю что это полезный функционал.
 
Вот такая история трансформации DIY идеи от прототипа до практически готового изделия. А купленная когда-то плата OrangePi PC лежит в ящике стола и ждет своего часа, чтобы стать контроллером умного дома.
 
Список ссылок: Самое удивительно, что я еще так и не опробовал никаких систем умного дома — все модули трудятся у меня совершенно автономно друг от друга и просто доступны через web-интерфейсы в интернете.

  1. Модель Fritzing и как соберусь с силами думаю будут схема и разводка модуля в Kikad
  2. Простая тестовая прошивка для модуля
  3. Форк прошивки ESPurna с поддержкой модуля
  4. Основной репозиторий прошивки ESPurna

Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Спустя пять лет вышла очередная версия DOSBox под номером 0.74-2

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

Данные пользователей Windows на ПК с поддержкой сенсорного ввода пишутся в отдельный файл

Это сделано для удобства пользователя и ускорения процесса его работы. Большое количество моделей ноутбуков и all-in-one рабочих станций в наше время имеют поддержку сенсорного ввода. Но, как оказалось, у компьютерных систем с активированной поддержкой тач-ввода есть одна малоизвестная функция, которая ...