В этой новогодней статье постараюсь подробно описать весь процесс от и до, возможно к следующему летнему сезону кто-то захочет себе такой же. Но с начала хочу объявить о новогоднем розыгрыше в моем телеграм канале o DIY устройствах.
В новогоднем розыгрыше будут разыграны 5 zigbee датчиков влажности почвы, специально сделанных для этого новогоднего розыгрыша — EFEKTA zFlora SE (Special Edition). Условия розыгрыша простые, до 15 января подписаться на группу DIY DEV, оставить сообщение EFEKTA zFlora SE в группе. 15 января в 15 часов будет произведен розыгрыш среди участников оставивших сообщение EFEKTA zFlora SE, объявлены 5 победителей.
Ну вот объявил, а теперь возвращаемся к проекту датчика температуры для бассейна.
Датчик мне захотелось получить сразу и быстро, поэтому решил вспомнить о ЛУТе. Решил и не пожалел, это конечно одно из приятных занятий которое доступно в электро DIY. Сейчас, во времена доступности промышленно изготовленных плат, это занятие становится редким удовольствием на которое и хочется и жалко тратить время. Но тут всё сошлось, лето, свободное время, проект исключительно для себя, который к тому же хотелось буквально завтра, но лучше если сегодня уже в готовом виде :). На моем гитхаб я выложил 2 версии плат, одна версия для заказа на производстве, вторая для тех кто захочет сделать плату своими руками. Проект разработан на soc сс2530 (радиомодуль E18-MS1PA2-IPX, E18-MS1PA2-PCB, E18-MS1-PCB)
Не буду углубляться в процесс производства плат методом ЛУТ. Инструкций достаточно на ютубе, опишу коротко. Распечатал на лазерном принтере (кстати купленном давным-давно, специально для этого) обе стороны платы на бумаге из глянцевого журнала про автомобили, совместил обе стороны приложив на стекло окна и подсвечивая лампой, склеил скотчем. Вырезал кусок текстолита с двухсторонним медным слоем, зачистил, обезжирил и положил между слоями бумаги. Прогрел утюгом с обеих сторон, смыл бумагу. Подправил кое-где перманентным маркером, вытравил в растворе хлорного железа, отмыл. Дрюмелем обработал контур платы, сделал сверление отверстий, самые мелкие 0.5мм. Зачистил и залудил сплавом розе в эмалированной кастрюльке. Готово, и лазер и утюг, всё было :), и не надо ждать месяц плату с производства. А эмоции? Их в коробку с платами на производстве не положат.
Что мне нужно было от этого датчика? Основное это что бы он плавал и стабильно передавал измеряемую температуру в умный дом. Если датчик плавающий, то он должен быть герметичным, поэтому нужно было что-то решать с сервисной кнопкой, на которой обычно висит функционал входа, выхода из сети, еще какие-то другие функции. Остановился на варианте с smd кнопкой и герконом. Кнопкой можно было бы пользоваться когда корпус открыт, а герконом уже если нужно, что то сконфигурировать по месту, в бассейне, поднеся магнит.
Второстепенный функционал, который решил реализовать это подсветка rgb светодиодом измеренной температуры воды, что бы можно было визуально находясь рядом с бассейном, понять какая температуры воды в бассейне. Так же решил добавить датчик освещенности, тут не могу объяснить зачем, просто решил. В процессе размышлений над корпусом, смотрел в интернете разнообразные варианты плавающих датчиков, в основном попадались всякие датчики подсветки бассейнов. Насмотревшейся на них решил добавить rgb светодиоду в проекте функциональности. Добавил управление длинной свечения и управление интервалом между свечениями. Ну и просто полное отключение светодиода для экономии батарейки.
Так как датчик мало того, что должен был работать на улице, так еще и в бассейне, предположил что могут быть проблемы со стабильностью радиосвязи. Поэтому решил делать датчик на радио модуле с усилителем сигнала и внешней антенной. Тут я имею в виду не торчащую из корпуса антенну, а подключаемую к радио модулю через IPEX коннектор, что бы была возможность как можно выше расположить антенну у верхней части корпуса. Забегая вперед скажу что это было хорошее решение.
На изображении показан весь доступный функционал у датчика.
Для того что бы датчик получил отправленную конфигурационную команду, после отправки команды из системы умного дома, нужно поднести магнит к корпусу датчика. Датчик выйдет из сна по прерыванию и получит входящее сообщение.
В обязательном порядке была добавленавозможность осуществлять прямой биндинг по кластеру температуры, что бы можно было привязать датчик к моему другому датчику с дисплеем для мониторинга температуры.
const cId_t zclApp_OutClusterListFirstEP[] = {POWER_CFG, TEMP};
#define APP_MAX_OUTCLUSTERS_FIRST_EP (sizeof(zclApp_OutClusterListFirstEP) / sizeof(zclApp_OutClusterListFirstEP[0]))
Конфигурирование отправки отчетов решил не реализовывать, остановился на отчетах по таймеру, который можно настроить через систему умного дома.
С проектированием корпуса было немного сложновато, до этого проекта я не пробовал проектировать герметичные корпуса. Для соединения верхней крышки и корпуса с платой, остановился на варианте с винтами и самоконтящимися гайками. Реализацию замка для герметизации подсмотрел на популярных герметичных корпусах в виде коробочек, где используется паз в крышке и уплотнительный шнур из какого то вспененного полимерного материала. Всего я сделал себе 2 таких датчика. В корпусе второго датчика я заменил обычные гайки на вплавляемые в корпус, что позволило немного уменьшить размер корпуса, тем самым облегчив его. Гайки вплавлял в корпус одевая их на паяльник с конусовидным жалом.
Так как шнур из вспененного полимера я найти не смог, то решил залить паз в крышке жидким герметиком, получилось не очень. На первых испытаниях внутрь корпуса просочилось немного воды. Дело оказалось в том что застывший герметик получался плотным и не мог хорошо уплотнятся при сжатии, когда соединялись корпус и крышка. Я решил попробовать обычный прозрачный герметик для сантехники, заложил немного в шприц, и выдавил его в паз на крышке, и еще немного обработал поверхности крышки и корпуса которые будут соприкасаться при закрытии. Получилась своего рода прокладка и это сработало.
На колбу с датчиком температуры, в месте прикасания колбы к стенкам корпуса, в отверстии, нанес по кругу двухкомпонентный, водостойкий эпоксидный клей. И после установки колбы дополнительно залил сверху, в месте выхода проводов.
Корпус для первого датчика был напечатан на фотополимерном принтере, полимером белого цвета, поэтому проблемы со светодиодом и датчиком освещенности не было. Корпус для второго датчика, уже на заводской и красивой плате я заказал позднее в китае, на сайте jlcpcb. Он был напечатан по технологии MJF, черным полимером. Для этого варианта корпуса, я просверлил два отверстия в крышке корпуса для светодиода и датчика освещенности. Залил отверстия прозрачной УФ смолой, сделав своего рода линзы.
К слову так же был напечатан корпус на FDM принтере и сверху обработан растворителем D-limonen, чтобы поверхность стала монолитной. Но этот вариант с корпусом напечатанным на FDM принтере я только проверил на плавучесть, дальше его реализовывать не стал, но это рабочий вариант. Самый легкий по весу, но немного менее эстетичный чем варианты корпусов напечатанных по технологии SLA и MJF.
Программа датчика была написана в среде разработки 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(рекомендуется из-за простоты подключения).
Процесс прошивки с помощью SmartRF Flash Programmer v1
Подключите 5 контактов на плате на соответствующие подписанные контакты дебагера. Подключаете дебагер в usb порту компьютера, открываете программу SmartRF Flash Programmer v1. Правее поля в пункте Flash Image нажимаете на иконку «обзор» и выбираете файл прошивки скачанный ранее. В пункте Actions выбираете Erase и ниже нажимаете на кнопку Perform actions. После того как вы очистили чип, выбираете Erase and program том же в пункте Actions и снова нажимаете кнопку Perform actions.
Для работы устройства через з2м вам понадобится установить внешний конвертер, процесс установки конвертера описан в файле README на моем github.
Датчик всё лето прекрасно выполнял свою работу, плавая в бассейне и передавая данные в умный дом и на датчик с дисплеем, к которому он был привязан.
Но пришло время лету заканчиваться, бассейн был разобран, а датчик поставлен на длительный тест на детской площадке, на сетке-качелях.
август, сентябрь
октябрь
ноябрь
декабрь
И вот уже за окном январь 2024 года, я на даче, на новогодних праздниках, сижу и пишу статью об этом летнем проекте. В московском регионе сейчас наступили сильные морозы, это конечно по нашим московским меркам они сильные, -25 в среднем. Датчик и сейчас там, на детской площадке, продолжает работать, исправно отправляет данные, пока я пишу этот текст. Тест продолжается, батарейки из Фикспрайса в норме, сигнал на 20 метрах с улицы стабильный и высокий.
Появились планы на следующий сезон по этому проекту. Хочу добавить в проект сенсор мутности воды, несколько таких сенсоров уже закуплены, думаю к следующему сезону будет вторая версия датчика для бассейна.
ГитХаб проекта — https://github.com/smartboxchannel/EFEKTA-Pool-Temperature-Sensor
Вот такая получилась зимняя статья о летнем проекте. Если вы дочитали статью об этом проекте zigbee датчика до конца, то вам точно нужно добавится в самое большое русскоязычное сообщество в Телеграм по тематике Zigbee — Вокруг да около Zigbee. Так же приглашаю всех читателей, которым интересна тематика DIY, разработка электронных устройств, всех кто хочет расказать о своих самоделках или почитать о чужих в мою группу в телеграм DIYDEV
Спасибо за внимание, всем добра!..
Автор:
Berkseo