Емкостный датчик влажности почвы на ESP32 с Алисой: автополив
- Емкостный принцип без электролиза: изолированные дорожки сенсора не контактируют с водой напрямую, исключая растворение меди и окисление грунта.
- Аппаратные ограничения ESP32: для аналогового сигнала используются исключительно выводы блока ADC1 (GPIO32–GPIO39), так как ADC2 блокируется модулем Wi-Fi.
- Защита от сифонного перелива: развоздушивающее отверстие в шланге предотвращает самопроизвольный ток воды из резервуара после отключения помпы.
Организация автоматического полива комнатных цветов и оранжерей часто упирается в ненадежность датчиков: дешевые резистивные вилки с открытыми контактными дорожками под действием постоянного тока и солей грунта растворяются за 2–3 недели из-за электрохимической коррозии. Самодельная система на базе микроконтроллера ESP32 и емкостного сенсора влажности почвы (Capacitive Soil Moisture Sensor v1.2) полностью лишена этого дефекта. Медные проводники датчика изолированы паяльной маской, а замер выполняется на высокой частоте без пропускания постоянного тока через землю. Добавив миниатюрную погружную помпу 5 В и прошивку ESPHome, мы получаем умную систему, которая передает точный процент влажности в приложение «Дом с Алисой» и поливает любимые растения по расписанию или голосовой команде.
В этом руководстве мы разберем схемотехнику подключения, устранение брака китайских сенсоров, правильную калибровку АЦП и создание сценариев безопасного дозирования воды.
1. Физика емкостного сенсора: почему он долговечен
В отличие от резистивных датчиков (типа YL-69) и готовых батарейных Zigbee-сенсоров, которые ради экономии заряда передают данные с задержкой в несколько часов, емкостный сенсор на ESP32 работает непрерывно и функционирует как пластина конденсатора переменной емкости:
| Параметр | Резистивный датчик (YL-69) | Емкостный сенсор (v1.2 / TLC555) |
|---|---|---|
| Физический принцип | Сопротивление постоянному току | Диэлектрическая проницаемость среды |
| Контакт с влагой | Прямой металлический контакт | Полная изоляция паяльной маской |
| Срок службы в грунте | 15–30 дней (электролиз меди) | Более 2–3 лет без деградации |
| Влияние удобрений | Критическое (соли искажают показания) | Минимальное (измеряется емкость) |
| Зависимость сигнала | Больше влаги $\rightarrow$ Меньше Ом | Больше влаги $\rightarrow$ Ниже напряжение |
В основе емкостного датчика лежит встроенный таймер (обычно микросхема серии 555 в корпусе SOP-8), работающий в режиме автогенератора на частоте около 1.5 МГц. Окружающая почва выполняет роль диэлектрика. Диэлектрическая проницаемость сухого воздуха равна 1, а чистой воды — около 80. При насыщении грунта влагой емкость конденсатора возрастает, высокочастотное сопротивление падает, а выпрямленное аналоговое напряжение на выходе VOUT снижается.
IMPORTANT
Главная инверсия показаний: чем суше земля, тем выше напряжение на аналоговом выходе (до 2.8–3.0 В). При погружении в воду напряжение падает до 1.2–1.4 В. Это обязательно учитывается при калибровке в прошивке.
2. Аппаратные Gotchas: ревизии датчиков и АЦП ESP32
При повторении проекта радиолюбители на профильных форумах (4PDA, GitHub) регулярно сталкиваются с тремя неочевидными проблемами:
Проблема 1. Фейковые таймеры NE555 на клонах v1.2
На недорогих платах с маркетплейсов часто распаивают биполярный таймер NE555 вместо КМОП-версии (TLC555 или ICM7555). Классический NE555 требует питания минимум 4.5 В. При питании от линии 3.3 В микроконтроллера генерация срывается, и датчик выдает статичные 2.8 В независимо от влажности.
Решение: Питайте датчик от шины 5 В (pin VIN микроконтроллера). Поскольку пиковый аналоговый сигнал при этом не превышает 3.0 В, он полностью безопасен для входа АЦП ESP32.
Проблема 2. Капиллярное расслоение стеклотекстолита
Торец печатной платы датчика на заводе фрезеруется и остается незащищенным. Со временем влага через микропоры стеклоткани FR-4 просачивается между медными слоями, вызывая дрейф нулевой точки.
Решение: Перед установкой в кашпо покройте боковые торцы и верхнюю границу погружения двумя слоями полиуретанового лака Plastik-71 или нейтрального герметика.
Проблема 3. Ограничения АЦП контроллера ESP32
В микроконтроллере ESP32 встроено два блока АЦП: ADC1 и ADC2.
Критическое правило: Аналоговый сигнал датчика разрешено подключать только к выводам блока ADC1 (GPIO32, GPIO33, GPIO34, GPIO35, GPIO36, GPIO39). Блок ADC2 аппаратно задействуется радиомодулем Wi-Fi, и при активном беспроводном соединении любые попытки чтения с пинов ADC2 возвращают системную ошибку или мусорные значения.
3. Принципиальная схема подключения
Для безопасного управления питанием и поливом схема разделяется на две части: измерительную и силовую.
+---------------------------------------------+
| ESP32 |
| |
| [VIN 5V] ------+-------------+ |
| | | |
| [GND] ---------+------+------+ |
| | | |
| [GPIO34] <-- VOUT | | |
| (ADC1_CH6) | | |
| | | |
| [GPIO25] --> Gate | | |
+------------------------|------|-------------+
| |
+----------------------------+ |
| Емкостный датчик v1.2 |
| VCC -> VIN (5V) |
| GND -> Общая земля |
| AOUT -> GPIO34 |
+-----------------------------------+
|
+-----------------------------------+
| Силовой модуль помпы
| +5V -> Плюс микропомпы
| Минус помпы -> Сток (Drain) MOSFET IRLML2502
| Затвор (Gate) MOSFET -> GPIO25 через 100 Ом
| Исток (Source) MOSFET -> GND
| Диод 1N4007 -> Параллельно помпе (катодом к +5V)
+--------------------------------------------------+
WARNING
Опасность гидроудара и сифонного перелива: Если резервуар с водой находится выше уровня цветочного горшка, после первой активации помпы вода продолжит течь самотеком по принципу сообщающихся сосудов. Чтобы исключить затопление, просверлите микроотверстие диаметром 1 мм в подающей трубке внутри резервуара выше максимального уровня воды (разрыв воздушного сифона) либо используйте капельные компенсаторы давления.
4. Конфигурация в ESPHome и точная калибровка
Для прошивки используем популярный фреймворк ESPHome, который автоматически генерирует сущности для Home Assistant и умного дома Яндекса по локальной сети Wi-Fi.
Замер калибровочных констант:
- Высушите датчик салфеткой и зафиксируйте в воздухе. Запишите показания АЦП (например,
2850). Это0%влажности. - Опустите рабочую лопатку сенсора в стакан с водой строго до белой линии ограничения. Запишите показания (например,
1320). Это100%влажности.
Фрагмент файла конфигурации soil_moisture.yaml:
esphome:
name: plant-watering-esp32
esp32:
board: esp32dev
framework:
type: arduino
sensor:
- platform: adc
pin: GPIO34
name: "Влажность почвы Монстера"
id: soil_moisture
attenuation: 11db
update_interval: 30s
unit_of_measurement: "%"
icon: "mdi:water-percent"
filters:
- median:
window_size: 7
send_every: 4
- calibrate_linear:
- 2850.0 -> 0.0
- 1320.0 -> 100.0
- clamp_min: 0.0
- clamp_max: 100.0
output:
- platform: gpio
pin: GPIO25
id: pump_gpio
switch:
- platform: output
name: "Помпа полива растений"
id: water_pump
output: pump_gpio
icon: "mdi:watering-can"
on_turn_on:
- delay: 8s
- switch.turn_off: water_pump
Обратите внимание на встроенный аппаратный таймер безопасности: даже если связь с сервером пропадет, команда on_turn_on с задержкой 8 секунд гарантированно отключит насос, предотвратив перелив емкости. Для комплексного контроля запаса жидкости рекомендуем также установить умный датчик уровня воды в баке на ESP32.
5. Сценарии автоматизации в Доме с Алисой
После интеграции через навык Home Assistant в приложении «Дом с Алисой» появляются датчик влажности и переключатель полива. При наличии готовых датчиков экосистемы можно также настроить автоматический полив комнатных растений с защитой от перелива или масштабировать решение для теплицы, используя автополив на даче с Алисой.
Сценарий 1. Голосовой полив по требованию
- Активационная фраза: «Алиса, полей цветок в спальне» или «Алиса, включи автополив».
- Действие:
- Включить переключатель «Помпа полива растений» (отработает выверенная порция
60 мл). - Яндекс Станция отвечает: «Поливаю монстеру. Порция воды выдана».
- Включить переключатель «Помпа полива растений» (отработает выверенная порция
Сценарий 2. Автоматический контроль пересыхания грунта
- Условие (ЕСЛИ): Влажность почвы опустилась ниже
22%в интервале времени с10:00до19:00. - Действие (ТОГДА):
- Включить помпу полива.
- Задержка:
15 минут(время на капиллярное распределение влаги в прикорневом слое). - Если влажность осталась ниже
30%(закончилась вода в резервуаре):- Отправить PUSH-уведомление на смартфон: «Внимание: влажность почвы низкая, возможно, закончилась вода в емкости».
- Яндекс Станция объявляет: «Хозяин, пора долить воду в бак автополива».
Такая архитектура защищает домашнюю флору от засухи во время отпусков и командировок, полностью исключая риск аварийных протечек.
Инструкция по настройке
Подготовка и влагоизоляция емкостного датчика
Покройте торцы печатной платы датчика защитным полиуретановым лаком Plastik-71 для исключения капиллярного расслоения стеклотекстолита.
Сборка электрической схемы с помпой и ключом
Подключите аналоговый выход сенсора строго к пинам блока ADC1 на ESP32, а микропомпу 5В скоммутируйте через N-канальный MOSFET с защитным диодом.
Двухточечная калибровка в прошивке ESPHome
Замерьте значения сырого АЦП на сухом воздухе и в стакане с чистой водой, прописав линейную интерполяцию calibrate_linear в YAML.
Создание сценариев автополива в Доме с Алисой
Настройте автоматическую дозированную подачу воды при падении влажности ниже 25% с голосовым отчетом на Яндекс Станции.