Автоматический полив комнатных растений

Наверно, любая домохозяйка время от времени сталкивается с вопросом - кому бы поручить полив комнатных растений во время длительного отсутствия, например во время отпуска. Конечно на помощь всегда могут прийти добрые родственники или соседи. Если беспокоить других людей не хочется - на помощь могут прийти подручные средства из пластиковых бутылок мокрых тряпок и тазиков…. Однако по приезду можно обнаружить, что  цветы все равно завяли така как система которую вы установили перед отъездом дала сбой, корни засохли, а вся вода из емкости вылилась на пол и залила соседей… 

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

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

А что если реализовать полив комнатных растений как Интернет сервис? С первого взгляда очевидный недостаток такого подхода - требуется постоянное подключение к сети Internet. Впрочем, интернет сейчас есть практически везде и это не проблема. 

Online решение подкупает своей простотой, и масштабируемостью - всегда можно зайти на сайт и проверить, когда был последний полив, перед отъездом достаточно лишь убедиться, что текущих запасов воды хватит на то время пока вы будете отсутствовать. Если заканчивается вода в емкостях сервис заблаговременно вас уведомит о необходимости дозаправки расходников. Если какое либо растение поливается недостаточно можно откорректировать количество воды для полива прямо на сайте без необходимости физического доступа к устройству, если по какой либо причине что-сломалось сервис пришлёт SMS или email о необходимости вмешательства.

Онлайн решение в отличие он offline, также, теоретически может предложить более оптимальный режим полива выбранных растений в зависимости от времени года, широты географического расположения, температуры воздуха, влажности и десятков других параметров. Если же интернет не очень стабильный, а необходимо, чтобы полив был регулярным, в систему можно добавить часы реального времени и использовать ещё и их в случае если интернет пропадет.

Что делать если провайдер на несколько дней перестал оказывать услуги? К счастью, такие вещи сейчас довольно редки, в современных городах отсутствие интернета сейчас воспринимается гораздо больнее чем отсутствие, скажем, горячей воды. Если важно обеспечить бесперебойную работу,  то можно воспользоваться резервным каналом, например через 3G модем, благо сейчас, многие WiFi роутеры позволяют поднимать резервный канал через 3G модем автоматически. Да и нужен ли интернет вообще? Если связь плохая, просто поднимаем локальный сервер во внутренней сети и работаем из дома!

Перепробовав несколько вариантов, я остановился на связке ESP8266 и 1-wire шины реализованной на чипах ds2413 (у меня используются их более дешевые функциональные аналоги, которые китайцы продают под видом 3A 2100H, от оригинальных они отличаются другим кодом семейства а в остальном работают идентично).

1-wire допускает в сети до 256 устройств, что для задачи полива более чем достаточно. Для организации шины используются всего три провода - плюс, минус и сигнальный. 

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

Электродвигатель коммутируется мощным полевым транзистором, который в свою очередь открывается командами от управляющего устройства по сети 1-wire собранному на базе ESP8266. Все устройства пока собраны на макетной плате. Так как ESP8266 очень чувствителен к помехам создаваемым коллекторными двигателями - для того чтобы устройство не зависало и не перезагрузилось во время полива на каждый моторчик напаяны несколько конденсаторов а сами они подключены через индуктивности - такая схема представляет собой широкополосный фильтр надёжно отфильтровывающий помехи. Для прошивки используется cp2102, для чего предусмотрена перемычка на плате. 

Корпус помп разработан в системе Open SCAD и напечатан на 3d принтере. Он представляет собой полый цилиндр обрезанный таким образом, чтобы его можно было повесить на горшок с цветком Корпус состоит из двух частей, которые легко прищелкиваются друг к другу. Перистальтическая помпа приклеивается внутри корпуса при помощи клеевого пистолета. 

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

Благодаря топологии 1-wire управляющее устройство можно поставить в любом удобном месте на шине при помощи такого же разъема который используется для помп. Питание ко всей системе подаётся напрямую на провода общей шины, что также очень удобно, так как блок питания можно расположить там где он наименее заметен. В качестве блока питания используется стандартный пятивольтовый блок питания мощностью не менее одного ампера.

Каждое устройство имеет свой уникальный код, который прописывается на сервере.

Периодически устройство подключается к wifi и запрашивает у сервера - не пора ли поливать. Сервер, если настало время полива, возвращает время на которое нужно нужно включить помпу у того или иного горшка с растением. 

В собранных прототипах устройства стоят модули ESP-01 или ESP-03 - Поскольку для организации шины используется всего один провод то количества доступных GPIO хватает даже при использовании ESP-01. Для индикации работы устройства используется зеленый светодиод, который загорается в момент запроса устройства к серверу. Прошивка мастер устройства создана в среде Ардуино. Для подключения нового растения достаточно просто воткнуть новое устройство в общую шину используя типовые элементы из т-образных отрезков провода с разъёмами и прописать адрес нового устройства на сервере. В качестве электрических разъемов отлично себя зарекомендовали трехпиновые разъемы SM-3 JST. Вода подводится при помощи ПВХ шланга диаметром 5 мм. Если растение стоит на полу то шланг можно спрятать в плинтус с кабель каналом. Если растения  стоят на подоконнике - можно спрятать шланги под самим подоконником, либо просверлив пластик, либо используя декоративные накладки. Для разветвления используются пластмассовые тройники, которые можно купить в аквариумном магазине а можно напечатать самостоятельно на 3d принтере. Более мягкий силиконовый шланг для поливалки не подошёл ввиду излишней мягкости силикона - в момент полива он может схлопнуться. Для того чтобы можно было отключить отдельную помпу от системы не осушая систему каждая помпа подключается через однонаправленный клапан который можно купить в зоомагазине.

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

За время эксплуатации система показала себя хорошо. 

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

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

Весь код в т.ч. серверная часть и 3d модели, выложены на github.

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

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