
Привет, Хабр!
Я люблю выращивать острый перчик халапеньо в домашних условиях, но есть небольшая проблема в моем домашнем «садоводстве»: я периодически забываю его поливать. Почему бы не делегировать напоминания о поливе своему умному дому, а в перспективе и автоматизировать полив — подумал я. И чтобы реализовать данную задумку, для начала нужно разработать и собрать датчик влажности почвы. А что из этого получилось — читайте далее.
❯ Начало
Для начала нужно разобраться с тем, чего мы хотим и как это делать. Затем подумаем об аппаратной части датчика, чтобы она была экономически оправдана и проста в реализации. И преимущественно я буду собирать датчик из тех компонентов, которые у меня есть в наличии.
После непродолжительного обдумывания вырисовывается следующий перечень основных компонентов для реализации нашего DIY-проекта:
Наименование |
Кол-во, шт |
Цена, ₽/$ |
|
ESP-02S модуль Wi-Fi (ESP8285) |
1 |
150 |
1,96 |
Датчик влажности почвы HW-390 |
1 |
67 |
0,87 |
I2C АЦП ADS1115 |
1 |
115 |
1,5 |
Модуль с датчиками AHT20+BMP280 |
1 |
77 |
1 |
Теперь поговорим о питании, в датчике я решил использовать батарейный вариант питания с двумя элементами типа АА. Данный вариант опробован в моей метеостанции и это отличный и долгоиграющий вариант питания. При периодичности отправки данных датчиком каждые два часа питания от двух элементов АА должно хватить на пару лет.
В качестве вычислительной платформы, как видно из таблицы, я буду использовать модуль ESP-02S с чипом ESP8285 — отличный вариант, который я использую в своих IoT-устройствах.
В качестве датчика влажности почвы я использую ёмкостный сенсор HW-390 на базе таймера TLC555. В отличие от более дешевого резистивного датчика, ёмкостной надежнее, так как не имеет прямого контакта измерительных электродов с почвой, соответственно, нет коррозии и других сопутствующих проблем — думаю, это очевидно.
Также стоит обратить внимание на используемый тип таймера при покупке датчика. В нашей схеме напряжение питания соответствует уровню в 3 вольта, поэтому необходимо убедиться, что в датчике используется таймер TLC555, у которого более широкий диапазон питания — от 2 до 15 В.
Использование АЦП ADS1115. У ESP-02S имеется один аналоговый вход (ADC/АЦП), который мы не сможем использовать для подключения аналогового выхода датчика, так как он задействован для внутренних механизмов замера питающего напряжения ядра, а оно нам нужно для мониторинга уровня заряда батареи питания. Поэтому простым и недорогим решением будет использование дополнительного I2C-модуля с АЦП ADS1115.
Замер микроклимата на поверхности почвы. Изначально я не планировал использование дополнительных датчиков в данном устройстве, кроме датчика влажности почвы, но позже подумал о масштабировании и решил, что было бы хорошо ещё и мониторить температуру и влажность на поверхности почвы, например, для использования нашего устройства в системах автоматизации теплиц. Тем более добавление нового датчика не сильно влияет на экономику проекта — ни в техническом, ни в экономическом плане.
❯ Железо и схемы
Давайте перейдём ближе к схеме. Сама принципиальная схема довольно проста, а модульность элементов позволит собрать её даже начинающим DIY-щикам. На скорую руку набросал принципиальную схему, которую вы можете наблюдать ниже:

На схеме вы можете видеть, кроме описанного в таблице набора компонентов, дополнительные элементы: кнопки (SW1 и SW2) и светодиод. Кнопка SW1 нужна для перехода в режим конфигурации, а светодиод — для индикации режима.
При использовании модуля ESP-02S есть небольшая проблема: модуль изначально не может работать в режиме DeepSleep, а он нам крайне необходим при батарейном питании для экономичной работы датчика. Однако есть решение, как это исправить, и ниже оно показано на фото:

Проблема в том, что на модуле ESP-02S не выведен GPIO16, а он как раз является выходом RTC-таймера, который должен выводить устройство из режима глубокого сна. Поэтому на фото вы видите, как я подпаял тонкую жилу медного провода к данному контакту. Далее он будет соединён с контактом RST. И для изоляции и фиксации данного соединения я использую термоклей.
И для большей энергоэффективности питание всех датчиков подаётся через пин GPIO4, который отключается при переходе в режим глубокого сна (Deep Sleep).
❯ Корпус устройства
Корпус датчика, как обычно, проектировался во FreeCAD. Постарался сделать максимально красиво и компактно. Ниже представлены рендеры моего творчества:


Далее корпус был напечатан на моём 3D-принтере FlashForge 5M. Ниже представлен скриншот из слайсера для оценки расхода филамента:

Модель корпуса печаталась из пластика PETG и с конфигурацией толщины слоя 0,24 мм. Ниже представлен результат печати:

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


Как можно видеть на фото, так были установлены микропереключатели и светодиод. Их установка выполняется просто — они запрессованы в корпус небольшим усилием, но при этом держатся достаточно надёжно.
А до этого выполнялась примерка датчика влажности почвы, и это выглядело так:

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

Закрываем весь этот электронный ужас бэкенд крышкой — и в результате получаем следующее:

И, само собой, перед сборкой устройства нам необходимо загрузить прошивку — о ней и пойдёт речь дальше.
❯ Дела программные. Микро ПО и интеграция в Home Assistant
Микропрограмма, она же прошивка. Здесь всё стабильно: микропрограмма нашего датчика реализована на базе моей прошивки для IoT. Идеально подходит прошивка для метеостанции прошлой статьи с небольшими изменениями — её и будем использовать. DIY-вариант написан в популярной среде разработки Arduino IDE, ссылка на исходный код прошивки будет указана в конце статьи.
Затрону лишь некоторые моменты использования датчика почвы в прошивке. Замер аналогового сигнала выполняется с помощью АЦП ADS1115, для работы с которым я использовал первую попавшуюся библиотеку ADS1115_WE. Сам датчик имеет обратную зависимость выходного сигнала от измеряемой влажности почвы: то есть если влажность высокая, то уровень выходного сигнала приближается к нулю, и наоборот. Ниже представлена функция замера и преобразования сигнала с датчика:
float soil_hum(){ float mes_voltage = 0; if(sens_stat){ mes_voltage = ADC.getResult_V(); } return progress(mes_voltage, 0, 1.72, 100, 0); // 1.72 - это значение напряжения сухого датчика }
Где с помощью метода ADC.getResult_V() мы получаем данные с АЦП по каналу A0 в вольтах. Преобразование полученного сигнала выполняется с помощью аналога функции map():
float progress(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
Соответственно, функция soil_hum() возвращает уже преобразованное значение датчика в процентах. Чтобы инвертировать шкалу влажности почвы, мы просто в аргумент out_min передаём значение 100, а в out_max — 0. Значение 1.72 — это калибровочное значение, уровень сигнала сухого датчика. Оно и будет точкой отсчёта.
Для мониторинга уровня заряда батареи используется встроенный метод:
voltage = ESP.getVcc() * 0.001;
Чтобы это работало, нужно перевести режим работы встроенного АЦП на замер напряжения шины питания:
ADC_MODE(ADC_VCC);
В данном режиме нет необходимости подключать аналоговый вход к элементам питания.
Первоначальная прошивка выполняется стандартными средствами среды разработки Arduino IDE и RS232-программатора, а последующие обновления — через веб-интерфейс датчика в режиме конфигурации. Остальные стандартные пользовательские настройки устройства выполняются с помощью встроенного веб-интерфейса. Ниже представлены скриншоты нескольких ключевых страниц:

По умолчанию пароль — admin, далее вы можете изменить стандартный пароль на свой в соответствующем разделе меню.

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

На данной странице выполняются настройки передачи данных — она же отвечает за интеграцию с умным домом Home Assistant. Связь с умным домом выполняется по протоколу MQTT, а за автоматическую интеграцию устройства отвечает метод MQTT Discovery.
Интеграция в Home Assistant
Для экономии вашего времени, с вашего позволения, здесь, пожалуй, я не буду расписывать в подробностях, что и как, — это уже было много раз описано в прошлых статьях. Я лишь приведу несколько скриншотов из Home Assistant:

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

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

Выше размещено фото теста на сухой почве, чтобы наглядно объяснить переход датчика в режим конфигурации.
Правая кнопка отвечает за функцию сброса, а левая — за режим конфигурации. Как я уже упоминал выше, светодиод отвечает за индикацию режима. Для перехода в режим конфигурации необходимо нажать левую кнопку и, не отпуская её, кратковременно нажать правую. Не отпуская левую кнопку, дождитесь мигания зелёного светодиода. Всё, режим конфигурации активирован. Если вам нужно просто отправить данные, кратковременно нажмите правую кнопку.
❯ Итоги
Давайте подведём итоги. За небольшую стоимость и удовольствие от разработки мы получили датчик, с помощью которого Home Assistant сообщит мне, что я плохой садовод и что пора бы полить перец. А для долгих поездок стоит подумать о системе автополива — но это уже совсем другая история. А портативность и автономность питания позволяет применить данный датчик для автоматизации теплиц, ведь в нём уже предусмотрены датчики для мониторинга микроклимата на поверхности почвы, что позволяет реализовать целый измерительный кластер.
Кстати, насчет автономности. Ниже представлены фото с замерами токов потребления в разных режимах работы:


Если датчик будет использовать литиевые батареи при режиме отправки данных каждые два часа, то расчётное время работы на одном комплекте батарей составит 7–8 лет. Конечно, это фантастические сроки, но если устройство проработает на одном комплекте батарей 1–2 года, то это вполне удовлетворительные сроки.
На этой позитивной ноте можно и завершать статью. Спасибо, что дочитали.
И, как всегда, если у вас есть желание что-то добавить, обсудить, осудить, похвалить или поделиться опытом — добро пожаловать в комментарии! Всем успехов!
Ссылки к статье:
Может быть интересно:

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩
LinkToOS
А зачем нужен будет комплект батарей, если они будут литиевые? Устройство рассчитано на питание 3 вольта (в теории 2,5-3,6в), и соответственно комплект 2 х 1,5в щелочных АА. Или может быть использована одна литиевая, но требуется уточнить какого типа.
CyberexTech Автор
Есть литиевые батареи АА, они более энергоемкие. Речь шла не об аккумуляторах.
LinkToOS
Литиевые батарейки есть 1,5 и 3 вольта. Нужно уточнять тип.
Емкость может быть примерно такая же. Зависит от производителя. Цена существенно больше.
LinkToOS
Про то что батарейки 1,5в именно литиевые, в начале статьи не сказано, и в прайс они не включены. Хотя их цена может превосходить цену остальных компонентов.
CyberexTech Автор
Использование данного типа батарей по желанию, а необходимость. Вполне хорошо работают дешёвые варианты, на год точно хватит.
LinkToOS
Тогда нужно делать на этом акцент, и обосновать почему батареи должны быть именно литиевыми. Если минимальное требуемое напряжение 2,5 в, то обозначить через какое время щелочные разряжаются ниже 1,25в, и их придется заменить.
В списке расходов не хватает пункта про батарейки.