Датчик температуры для бассейна – давний проект, который провалялся пару лет на окне мастерской и в том виде, в котором изначально планировался, так и не был закончен. Но в итоге сделал альтернативный и расширенный вариант.
Первоначально хотел использовать связку 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.