Готовим утку

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

Первоначально хотел использовать связку attiny13 + ds18b20 + передатчик на 433 МГц с питанием от солнечной батареи + ионистор: попался на глаза этот проект и хотелось его реализовать; мне нравилась идея минималистичного автономного устройства, приносящего пользу. На странице есть готовый сборщик прошивки (жаль, что не отдаются исходники).

Как-то купил под это дело комплект приемо-передатчиков на 433 МГц, собрал макет для проверки — мультивибратор, «дудящий» через передатчик и приемник, где я смотрел на наличие сигнала осциллографом. Выяснилось, что комплектные приемники никакие — сигнал терялся уже в 7-8 метрах прямой видимости. Заказал тогда более продвинутый супергетеродинный приемник с Aliexpress — и таки да, сильно помогло. Тот же передатчик, размещенный в этот раз в помещении, я вполне видел за 250 метров — дальше просто было лень идти, да и не было смысла.

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

В последнее время в свете увлечения «умным домом» решил возродить тему — правда, в более «грубой» форме, на базе ESP. Попутно попался на глаза на Aliexpress датчик pH, а также примеры использования его с ESP Home — а с него было явно больше пользы, чем от простого термометра: как минимум, с ним мне было бы проще поддерживать нужную химию в бассейне. Заказал, получил.

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

Так что, фактически, все, что надо было для базового варианта — прошивка с ADC + DS18B20 в любом подходящем ESP-контроллере. Так как использовал чаще всего или ESP-01, или ESP32 C3, то подходил больше второй.

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

Как писал выше, сначала была солнечная панелька + ионистор, отправка данных в эфир и длительная спячка attiny13. С ESP32 C3, wifi, а также особенностями при использовании pH-сенсора от ионистора пришлось отказаться — маловато энергии. Нет, в финальном варианте, может быть, было бы проще, в крайнем случае поставил бы еще один ионистор, но в процессе доведения конструкции до ума решил, что перейти на li-ion от одноразовых сигарет будет проще — есть где разгуляться как при разряде батареи, так и при заряде — солнце не обязательно будет тогда, когда устройству надо быть активным. Фактически, кроме замены ионистора на батарею с BMS ничего не поменялось. Стабилитрон, ограничивающий 5В так и оставил — основным ограничением сейчас все равно будет BMS. Кстати, попутно выяснился интересный момент — похоже, что те BMS, которые я использовал для одиночных элементов, напряжение «вверх» не ограничивают. Может, брак отдельного экземпляра, но надо буде изучить тему подробнее. С уткой расчет на то, что напряжение в верхнее значение не должно упираться даже в самый солнечный день.

Питание остальной электроники, как и раньше, делалось через DC-DC, который на выходе давал стабильные 5В для питания контроллера (да, получалось двойное преобразование, второе — линейником на самой ESP32 C3). Датчик pH потреблял несколько мА даже с убранным светодиодом и это было много, пришлось в алгоритм внести управление питанием датчика. DS18B20 же напротив, не потреблял практически ничего, поэтому его посадил напрямую на вывод 3.3V контроллера. Дальше — больше: выяснилось, что датчику pH надо дать побольше времени «под питанием», чтобы показания были плюс-минус адекватны — пришлось растягивать период работы контроллера почти до минуты. Если честно, то даже после всех изменений датчик себя не всегда адекватно ведет. В ночное время pH резко может улететь к 8-9, хотя до того был чуть выше 7. Но хотя бы глядя на график сейчас могу оценить состояние воды в целом.

Дополнительно сделал контроль разряда батареи — сначала больше в информационных целях, но в дальнейшем это стало основой нормальной работы утки. Впервые пришлось разбираться с deep_sleep’ом (потом начал использовать его в том числе в wifi-адаптерах для BMS от Daly). Длительность deep_sleep’а менял в зависимости от состояния батареи: если выше 3,5В, то шлем данные и спим 15 минут, если ниже — то шлем данные и спим 3 часа — чего вполне должно было хватить для того, чтобы переждать ночь. Все отлично работало до первой пасмурной погоды, после чего батарея высадилась до нижнего порога. А дальше — ловушка: панель дает немного энергии, напряжение на BMS повышается, включается контроллер и до того, как дойдет до хоть какого-то deep_sleep’а — высаживает накопившийся заряд в ноль.

Пришлось переделывать уже собранное устройство. Во-первых, нашел ошибку: в цепи светодиода оптопары, сигналящей о заряде батареи, поставил сильно маленький резистор. В итоге одна только оптопара потребляла около 15 мА при включении. Далее, поднял напряжение с 3,5 до 3,7В, чтобы выйти на плато ВАХ для li-ion. Ну и в-третьих, в прошивке контроллера добавил проверку состояния батареи еще до старта wifi и тому подобного и если батарея ниже 3,7V — то sleep на 4 часа. Периоды отправки данных в штатном режиме тоже увеличил до 30 минут. В основной части конфига добавил публикацию состояния заряда батареи на случай, если он изменится в процессе работы контроллера. Но по факту у меня там всегда публикуется «ON». Для нормального измерения уровня батареи потребовался бы второй АЦП, но ESP32 C3 + esphome не позволяет такое делать при использовании wifi (но в целом это реально).

Да! А еще я изначально думал использовать постоянный online и публикацию данных напрямую в Home Assistant. Но, конечно, для этого потребовался бы совершенно другой источник и от идеи пришлось быстро отказаться, а данные публиковать через MQTT (что повлекло за собой освоение этой темы). И даже с этим пришлось применять ухищрения, описанные выше.

Конструктивно — для вывода датчиков использовал гермовводы разных размеров в днище утки. Плату для датчика pH закрепил стяжкой за сам датчик изнутри. Для солнечной панели просверлил небольшое отверстие сверху, пропустил провода и потом обильно залил все термосиликоном. В днище утки сделал пропил, через который все монтировал. По периметру отверстия изнутри прицепил деревянные планки, в которые вкручиваются саморезы, притягивающие «люк» из гетинакса через лист резины. Надо будет найти какую-то альтернативу обычным саморезам, ибо эти потихоньку ржавеют. Конструкция проверена, внутрь вода не попадает. Плата с контроллером и батареей вставлена в голову утке и удерживается исключительно на жесткости проводов. После инцидента с разрядом батареи неподалеку от панели сделал пару «контактов» с помощью заклепочника, через которые можно подпитать аккумулятор (изнутри тоже залил силиконом).

На сейчас вполне успешно все работает — я получаю графики температуры воды и кое-какие графики по pH.

duck.yaml

Добавить комментарий