Zigbee датчик температуры для бассейна

Приветствую всех читателей Habr! В эти новогодние каникулы хочу поделиться с вами своим летним открытым проектом zigbee датчика температуры для бассейна. Идея разработать такой датчик появилась довольно спонтанно, летом 2023 года после установки бассейна на даче, появилось желание мониторить температуру воды. К тому времени у меня было разработано несколько проектов zigbee датчиков с дисплеями и датчиков температуры с выносными сенсорами. Датчики температуры можно было привязывать к датчикам с дисплеями и выводить температуру, присланную с этих внешних датчиков. Датчик температуры я закреплял на стенке бассейна, а сенсор на проводе опускался в воду. Но как оказалось это не очень то и удобно. Как только пришел к такому выводу то сразу решил что мне нужен плавающий zigbee датчик температуры.

qmzt0pvgjedtbcliuawwv72npcm.jpeg

В этой новогодней статье постараюсь подробно описать весь процесс от и до, возможно к следующему летнему сезону кто-то захочет себе такой же. Но с начала хочу объявить о новогоднем розыгрыше в моем телеграм канале o DIY устройствах.

В новогоднем розыгрыше будут разыграны 5 zigbee датчиков влажности почвы, специально сделанных для этого новогоднего розыгрыша — EFEKTA zFlora SE (Special Edition). Условия розыгрыша простые, до 15 января подписаться на группу DIY DEV, оставить сообщение EFEKTA zFlora SE в группе. 15 января в 15 часов будет произведен розыгрыш среди участников оставивших сообщение EFEKTA zFlora SE, объявлены 5 победителей.
Ну вот объявил, а теперь возвращаемся к проекту датчика температуры для бассейна.

Датчик мне захотелось получить сразу и быстро, поэтому решил вспомнить о ЛУТе. Решил и не пожалел, это конечно одно из приятных занятий которое доступно в электро DIY. Сейчас, во времена доступности промышленно изготовленных плат, это занятие становится редким удовольствием на которое и хочется и жалко тратить время. Но тут всё сошлось, лето, свободное время, проект исключительно для себя, который к тому же хотелось буквально завтра, но лучше если сегодня уже в готовом виде:). На моем гитхаб я выложил 2 версии плат, одна версия для заказа на производстве, вторая для тех кто захочет сделать плату своими руками.

Не буду углубляться в процесс производства плат методом ЛУТ. Инструкций достаточно на ютубе, опишу коротко. Распечатал на лазерном принтере (кстати купленном давным-давно, специально для этого) обе стороны платы на бумаге из глянцевого журнала про автомобили, совместил обе стороны приложив на стекло окна и подсвечивая лампой, склеил скотчем. Вырезал кусок текстолита с двухсторонним медным слоем, зачистил, обезжирил и положил между слоями бумаги. Прогрел утюгом с обеих сторон, смыл бумагу. Подправил кое-где перманентным маркером, вытравил в растворе хлорного железа, отмыл. Дрюмелем обработал контур платы, сделал сверление отверстий, самые мелкие 0.5 мм. Зачистил и залудил сплавом розе в эмалированной кастрюльке. Готово, и лазер и утюг, всё было :), и не надо ждать месяц плату с производства. А эмоции? Их в коробку с платами на производстве не положат.

um0wkd2nfdvu8kq1utyzlylo0-m.jpeg

Что мне нужно было от этого датчика? Основное это что бы он плавал и стабильно передавал измеряемую температуру в умный дом. Если датчик плавающий, то он должен быть герметичным, поэтому нужно было что-то решать с сервисной кнопкой, на которой обычно висит функционал входа, выхода из сети, еще какие-то другие функции. Остановился на варианте с smd кнопкой и герконом. Кнопкой можно было бы пользоваться когда корпус открыт, а герконом уже если нужно, что то сконфигурировать по месту, в бассейне, поднеся магнит.

toe6vl84uaawfyt60wnqdifu6ls.jpeg

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

z9xohzdtg0-ookbeuk3sxxndlnq.gif

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

4a2ym1qrgnb5vjfewwsqs5h0-qe.jpeg
На изображении показан весь доступный функционал у датчика.

Для того что бы датчик получил отправленную конфигурационную команду, после отправки команды из системы умного дома, нужно поднести магнит к корпусу датчика. Датчик выйдет из сна по прерыванию и получит входящее сообщение.

В обязательном порядке была добавленавозможность осуществлять прямой биндинг по кластеру температуры, что бы можно было привязать датчик к моему другому датчику с дисплеем для мониторинга температуры.

const cId_t zclApp_OutClusterListFirstEP[] = {POWER_CFG, TEMP};
#define APP_MAX_OUTCLUSTERS_FIRST_EP (sizeof(zclApp_OutClusterListFirstEP) / sizeof(zclApp_OutClusterListFirstEP[0]))

Конфигурирование отправки отчетов решил не реализовывать, остановился на отчетах по таймеру, который можно настроить через систему умного дома.
pjz8mnwmvu6rqz6e6dxum6n3a3u.png

С проектированием корпуса было немного сложновато, до этого проекта я не пробовал проектировать герметичные корпуса. Для соединения верхней крышки и корпуса с платой, остановился на варианте с винтами и самоконтящимися гайками. Реализацию замка для герметизации подсмотрел на популярных герметичных корпусах в виде коробочек, где используется паз в крышке и уплотнительный шнур из какого то вспененного полимерного материала. Всего я сделал себе 2 таких датчика. В корпусе второго датчика я заменил обычные гайки на вплавляемые в корпус, что позволило немного уменьшить размер корпуса, тем самым облегчив его. Гайки вплавлял в корпус одевая их на паяльник с конусовидным жалом.

wwmslv7lyewqoclbtzgx2mfrw4q.png

Так как шнур из вспененного полимера я найти не смог, то решил залить паз в крышке жидким герметиком, получилось не очень. На первых испытаниях внутрь корпуса просочилось немного воды. Дело оказалось в том что застывший герметик получался плотным и не мог хорошо уплотнятся при сжатии, когда соединялись корпус и крышка. Я решил попробовать обычный прозрачный герметик для сантехники, заложил немного в шприц, и выдавил его в паз на крышке, и еще немного обработал поверхности крышки и корпуса которые будут соприкасаться при закрытии. Получилась своего рода прокладка и это сработало.

audgqmurz1n_7midr-bbvgcehcy.png

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

nmp3xjsgac6by_y6s-5q9um5se0.jpeg

u4zjzuavh8wbsngrjlbvjyef6tk.png

Корпус для первого датчика был напечатан на фотополимерном принтере, полимером белого цвета, поэтому проблемы со светодиодом и датчиком освещенности не было. Корпус для второго датчика, уже на заводской и красивой плате я заказал позднее в китае, на сайте jlcpcb. Он был напечатан по технологии MJF, черным полимером. Для этого варианта корпуса, я просверлил два отверстия в крышке корпуса для светодиода и датчика освещенности. Залил отверстия прозрачной УФ смолой, сделав своего рода линзы.
xogm8wmopacc3njinulypeoa7kg.jpeg

xhx0omzcfxxctd9l8skes2ffva0.jpeg

К слову так же был напечатан корпус на FDM принтере и сверху обработан растворителем D-limonen, чтобы поверхность стала монолитной. Но этот вариант с корпусом напечатанным на FDM принтере я только проверил на плавучесть, дальше его реализовывать не стал, но это рабочий вариант. Самый легкий по весу, но немного менее эстетичный чем варианты корпусов напечатанных по технологии SLA и MJF.
yxkywy9sxrxkjzjthvjwfa2xlx8.jpeg

iuplclg76_qfqhvhhilvswjcjwe.jpeg

Программа датчика была написана в среде разработки IAR. Для тех кто хочет попробовать оставляю ссылки на описание установки среды разработки, настройке, сборке проекта.

github.com/sigma7i/zigbee-wiki/wiki/zigbee-firmware-install
zigdevwiki.github.io/Begin/IAR_install

Проект печатной платы разрабатывался в программе для разработки печатных плат — DipTrace.
Исходники проекта выложены на моем github.

Корпус спроектирован в программе SOLIDWORKS, исходники так же выложены на моем gihhub.

Прошивка устройства
Вам понадобится программа SmartRF Flash Programmer версии 1. Так же вам понадобится CC Debugger или Smart RF04E (рекомендуется из-за простоты подключения).

qktt4whlpzn6_zc76zm8xszfofs.png

Процесс прошивки с помощью SmartRF Flash Programmer v1
Подключите 5 контактов на плате на соответствующие подписанные контакты дебагера. Подключаете дебагер в usb порту компьютера, открываете программу SmartRF Flash Programmer v1. Правее поля в пункте Flash Image нажимаете на иконку «обзор» и выбираете файл прошивки скачанный ранее. В пункте Actions выбираете Erase и ниже нажимаете на кнопку Perform actions. После того как вы очистили чип, выбираете Erase and program том же в пункте Actions и снова нажимаете кнопку Perform actions.
v10h0hzhzpakguqscq3wrtpqzca.png

Для работы устройства через з2 м вам понадобится установить внешний конвертер, процесс установки конвертера описан в файле README на моем github.

Датчик всё лето прекрасно выполнял свою работу, плавая в бассейне и передавая данные в умный дом и на датчик с дисплеем, к которому он был привязан.

ovxrss2nge5cc5baceymqmqsng8.png

p2vv_mbz9tqdxeaazpn23p5wrtc.png

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

август, сентябрь
s6guvwak_pdsvlsg9twllgyfhgu.png
vm0cad7zhfabr6mo5rj8b3xg7c4.png
g_yky1eqbctpl2qlrpvxi3ys5k8.png

октябрь
i1yufxjhbpeevhh2fdfwgsy5jty.png

ноябрь
xwivdqfxa3atryh8smx4fgh9ytw.png

декабрь
zulyqblztj8wpo3cyauzpq7yklw.png

ovm5ld3vnjo1585wjijrtt624tw.png

И вот уже за окном январь 2024 года, я на даче, на новогодних праздниках, сижу и пишу статью об этом летнем проекте. В московском регионе сейчас наступили сильные морозы, это конечно по нашим московским меркам они сильные, -25 в среднем. Датчик и сейчас там, на детской площадке, продолжает работать, исправно отправляет данные, пока я пишу этот текст. Тест продолжается, батарейки из Фикспрайса в норме, сигнал на 20 метрах с улицы стабильный и высокий.

_0qo2jtkwgasgzexlhpn-h6grry.png

eazqsjteseq2hzzboaewkqc4hs8.png

c8gt97q_z-hphbsixbihxdmu8i4.gif

ica7yiu1t24ax1qk_jmktltxolk.png

10wfzetx_9m-mh94bmxvms4aily.png

voauir7awffsavro2sv3ghtzlbo.png

udlgk49srxb3iprterwf6hzwfyw.png

Появились планы на следующий сезон по этому проекту. Хочу добавить в проект сенсор мутности воды, несколько таких сенсоров уже закуплены, думаю к следующему сезону будет вторая версия датчика для бассейна.

eeayvbdlr-ws9kkmhelu-jp7nta.png

ГитХаб проекта — https://github.com/smartboxchannel/EFEKTA-Pool-Temperature-Sensor

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

Спасибо за внимание, всем добра!…

© Habrahabr.ru