Полив — вечная головная боль фермера. Поливаешь по расписанию — либо заливаешь, либо пересушиваешь. Щупаешь землю рукой — субъективно. Смотришь на растения — уже поздно, стресс пошёл. А ведь влажность почвы — это параметр, который легко измерить электроникой за копейки.
В этой статье мы соберём систему автополива на ESP32, которая сама измеряет влажность почвы, включает помпу когда нужно и отправляет данные в Telegram. Бюджет — около 2 500 ₽ на одну зону полива. Минимум паяльных навыков, максимум пользы.
Зачем вообще автоматизировать полив
Ручной полив — это не только ваше время (которого и так не хватает). Это ещё и неравномерность, которая напрямую бьёт по урожаю. Перелив — корневая гниль, грибковые болезни, вымывание питательных веществ. Недолив — стресс, опадание завязей, мелкие плоды.
Промышленные системы автоматического полива стоят от 50 000 ₽ за зону и требуют специалиста для настройки. Наша самоделка будет стоить в 20 раз дешевле и делать ровно то же самое: измерять влажность → принимать решение → включать воду. Плюс отправлять отчёты в Telegram — этого промышленные контроллеры за те же деньги обычно не умеют.
Что нам понадобится
Список компонентов короткий, всё покупается на маркетплейсах или в магазинах электроники:
- ESP32 DevKit v1 — микроконтроллер с Wi-Fi, ~450 ₽
- Ёмкостной датчик влажности почвы v1.2 — именно ёмкостной, не резистивный, ~180 ₽
- Реле-модуль 5V на 1 канал — для управления помпой, ~120 ₽
- Погружная помпа 12V — подойдёт любая на 3–5 л/мин, ~400 ₽
- Блок питания 12V 2A — для помпы, ~350 ₽
- Понижающий модуль DC-DC (LM2596) — чтобы запитать ESP32 от 12V, ~80 ₽
- Провода, макетная плата, корпус — ~300 ₽
- Силиконовый шланг 8мм — метров пять, ~200 ₽
Итого: около 2 100 ₽. Плюс ёмкость для воды — бочка, канистра, что найдётся. Если у вас уже есть центральный водопровод, вместо помпы можно поставить электромагнитный клапан 12V (~350 ₽) — принцип тот же.
Почему ёмкостной датчик, а не резистивный
Это принципиально важный момент. Дешёвые резистивные датчики влажности (две металлические пластины) корродируют в земле за 2–4 недели. Это не шутка — через месяц от них остаётся зелёная каша, и показания плывут настолько, что проще поливать рукой.
Ёмкостной датчик (Capacitive Soil Moisture Sensor v1.2) работает по другому принципу — он измеряет диэлектрическую проницаемость почвы через защитное покрытие. Не корродирует, показания стабильны месяцами. Стоит на 50 ₽ дороже, служит в 10 раз дольше. Выбор очевиден.
Единственный нюанс: ёмкостные датчики с AliExpress часто имеют разброс показаний между экземплярами. Поэтому калибровку нужно делать индивидуально для каждого датчика — покажу как ниже.
Схема подключения
Схема максимально простая, справится любой, кто хоть раз подключал лампочку к батарейке:
Датчик влажности → ESP32:
- VCC → 3.3V (именно 3.3V, не 5V!)
- GND → GND
- AOUT → GPIO 34 (аналоговый вход)
Реле → ESP32:
- VCC → VIN (5V от USB или DC-DC)
- GND → GND
- IN → GPIO 26 (цифровой выход)
Помпа → реле:
- Плюс помпы → COM (средний контакт реле)
- Плюс 12V → NO (нормально разомкнутый контакт)
- Минус помпы → минус 12V блока питания
Питание: блок питания 12V → помпа + модуль LM2596, на выходе LM2596 выставляем 5V → VIN ESP32.
Всё. Четыре компонента, десяток проводов. Паять ничего не надо — все соединения можно сделать на макетной плате с DuPont-проводами. Для постоянной установки рекомендую пропаять и залить контакты термоклеем — влага в теплице своё дело делает.
Калибровка датчика
Прежде чем писать код автополива, нужно узнать, какие значения выдаёт конкретно ваш датчик. ESP32 имеет 12-битный АЦП, поэтому значения будут от 0 до 4095.
Загрузите на ESP32 простой скетч для чтения:
void setup() {
Serial.begin(115200);
}
void loop() {
int value = analogRead(34);
Serial.println(value);
delay(1000);
}
Теперь два замера:
- Сухой датчик (на воздухе) — запишите значение. Обычно это 2800–3500.
- Мокрый датчик (в стакане воды до метки на плате) — обычно 1200–1800.
Внимание: у ёмкостного датчика логика инвертирована — чем влажнее, тем ниже значение. Это нормально. Мои конкретные экземпляры показали: сухой = 3200, мокрый = 1400.
Нам нужно определить порог включения полива. Для большинства огородных культур оптимальная влажность — 60–70%. Грубая формула: порог = сухой - (сухой - мокрый) × 0.6. Для моих значений: 3200 - (3200 - 1400) × 0.6 = 2120. Округлим до 2100 — при значении выше 2100 включаем помпу.
Прошивка: основной код
Полный скетч для Arduino IDE. Включает: чтение датчика, управление помпой, защиту от слишком долгого полива и отправку уведомлений в Telegram.
#include <WiFi.h>
#include <HTTPClient.h>
// === НАСТРОЙКИ ===
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_PASSWORD";
// Telegram
const char* BOT_TOKEN = "123456:ABC-DEF...";
const char* CHAT_ID = "-100123456789";
// Пины
const int SENSOR_PIN = 34;
const int RELAY_PIN = 26;
// Пороги (подставьте свои после калибровки)
const int THRESHOLD_DRY = 2100; // выше — сухо, включаем полив
const int THRESHOLD_WET = 1700; // ниже — мокро, выключаем
// Защита
const unsigned long MAX_PUMP_TIME = 300000; // 5 минут макс
const unsigned long MIN_PAUSE = 1800000; // 30 минут пауза
const unsigned long READ_INTERVAL = 60000; // читаем раз в минуту
const unsigned long REPORT_INTERVAL = 3600000; // отчёт раз в час
bool pumpOn = false;
unsigned long pumpStartTime = 0;
unsigned long lastPumpStop = 0;
unsigned long lastRead = 0;
unsigned long lastReport = 0;
int lastMoisture = 0;
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // реле выключено (active LOW)
WiFi.begin(WIFI_SSID, WIFI_PASS);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 30) {
delay(500);
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
sendTelegram("🌱 Автополив запущен. IP: " + WiFi.localIP().toString());
}
}
void loop() {
unsigned long now = millis();
// Чтение датчика раз в минуту
if (now - lastRead >= READ_INTERVAL) {
lastRead = now;
// Среднее из 10 измерений для стабильности
long sum = 0;
for (int i = 0; i < 10; i++) {
sum += analogRead(SENSOR_PIN);
delay(10);
}
lastMoisture = sum / 10;
Serial.printf("Влажность: %d (сухо > %d)\n", lastMoisture, THRESHOLD_DRY);
// Логика полива
if (!pumpOn && lastMoisture > THRESHOLD_DRY) {
if (now - lastPumpStop >= MIN_PAUSE) {
startPump();
}
}
if (pumpOn && lastMoisture < THRESHOLD_WET) {
stopPump("Почва увлажнена");
}
}
// Защита от залива
if (pumpOn && (now - pumpStartTime >= MAX_PUMP_TIME)) {
stopPump("⚠️ Аварийный стоп: 5 минут полива");
}
// Часовой отчёт
if (now - lastReport >= REPORT_INTERVAL) {
lastReport = now;
String msg = "📊 Отчёт: влажность=" + String(lastMoisture);
msg += pumpOn ? " | помпа ВКЛ" : " | помпа ВЫКЛ";
msg += " | uptime " + String(now / 60000) + " мин";
sendTelegram(msg);
}
delay(100);
}
void startPump() {
digitalWrite(RELAY_PIN, LOW); // active LOW
pumpOn = true;
pumpStartTime = millis();
sendTelegram("💧 Полив включён. Влажность: " + String(lastMoisture));
}
void stopPump(String reason) {
digitalWrite(RELAY_PIN, HIGH);
pumpOn = false;
lastPumpStop = millis();
unsigned long duration = (millis() - pumpStartTime) / 1000;
sendTelegram("✅ " + reason + ". Полив выключен через "
+ String(duration) + " сек. Влажность: " + String(lastMoisture));
}
void sendTelegram(String message) {
if (WiFi.status() != WL_CONNECTED) return;
HTTPClient http;
String url = "https://api.telegram.org/bot" + String(BOT_TOKEN)
+ "/sendMessage?chat_id=" + String(CHAT_ID)
+ "&text=" + urlEncode(message);
http.begin(url);
http.GET();
http.end();
}
Код выглядит длинным, но логика простая: читаем датчик → если сухо и прошло достаточно времени с последнего полива → включаем помпу → ждём пока станет мокро или пройдёт 5 минут → выключаем. Плюс отчёт каждый час в Telegram.
Гистерезис: почему два порога, а не один
Обратите внимание: в коде два порога — THRESHOLD_DRY (2100) для включения и THRESHOLD_WET (1700) для выключения. Это называется гистерезис, и без него система будет «дребезжать» — включаться-выключаться каждую минуту, когда показания крутятся вокруг одного значения.
С гистерезисом всё плавно: помпа включается когда реально сухо, и выключается только когда земля реально пропиталась. Разница между порогами (400 единиц в нашем случае) — это зона нечувствительности. Чем она шире, тем реже циклы полива, но каждый цикл длиннее. Для большинства культур зазор в 300–500 единиц работает хорошо.
Защита от аварий
В коде три уровня защиты, и все они критически важны. Без них вы рано или поздно зальёте теплицу:
Таймер максимального полива (5 минут). Даже если датчик сломался или вылетел из земли — помпа остановится через 5 минут. Этого хватит примерно на 15–25 литров воды (зависит от помпы), что для одной зоны полива безопасно.
Минимальная пауза (30 минут). После остановки помпы система ждёт 30 минут перед следующим включением. Это нужно, чтобы вода успела впитаться — датчик показывает влажность в точке установки, а не по всему объёму грядки. Без паузы система может несколько раз подряд полить одно и то же место.
Среднее из 10 измерений. Одиночные показания АЦП ESP32 прыгают на ±50–100 единиц. Среднее из 10 замеров с интервалом 10мс даёт стабильное значение. Это простейший цифровой фильтр, но он убирает 90% ложных срабатываний.
Установка в теплице
Где и как ставить компоненты — это не менее важно, чем код:
Датчик влажности. Закопать на глубину 15–20 см в корневой зоне. Не ставить прямо под капельницу — покажет вечно мокрую землю. Не ставить на краю грядки — покажет вечно сухую. Оптимально — между двумя растениями, в средней части грядки. Провод к ESP32 можно удлинить обычным трёхжильным кабелем до 3–5 метров без потери точности.
Электроника (ESP32, реле, DC-DC). Обязательно в герметичном корпусе. В теплице влажность воздуха 80–95% — без корпуса плата покроется конденсатом за пару дней. Подойдёт обычная распределительная коробка IP55 из электрического магазина за 150 ₽. Вырежьте отверстия для проводов и загерметизируйте силиконом.
Помпа. Погружная в бочку с водой. Бочку лучше поставить в теплице — тёплая вода меньше стрессирует корни. Шланг от помпы к грядке — силиконовый 8 мм, прозрачный, чтобы видеть, если забился. На конце шланга сделайте несколько отверстий для равномерного полива по длине грядки.
Wi-Fi. ESP32 имеет встроенную PCB-антенну. В теплице из поликарбоната сигнал дома проходит нормально на расстоянии до 15–20 метров. Если теплица далеко — купите версию ESP32 с внешним разъёмом для антенны (~650 ₽) и прикрутите антенну 5dBi.
Настройка Telegram-бота
Чтобы получать уведомления, нужен Telegram-бот. Это бесплатно и занимает 2 минуты:
- Откройте @BotFather в Telegram
- Отправьте /newbot, придумайте имя и username
- Скопируйте токен (длинная строка вида 123456:ABC-DEF...)
- Создайте группу в Telegram, добавьте бота, отправьте любое сообщение
- Откройте в браузере: https://api.telegram.org/bot{TOKEN}/getUpdates
- Найдите chat id (число со знаком минус для групп)
Подставьте токен и chat_id в код скетча — готово. Теперь каждый час будет приходить отчёт, а при включении/выключении помпы — мгновенное уведомление.
Масштабирование: несколько зон
Одна ESP32 может управлять несколькими зонами полива одновременно. У неё достаточно аналоговых входов (до 8 без мультиплексора) и цифровых выходов. Для двух-трёх зон просто добавьте датчики и реле:
// Зона 1
const int SENSOR_1 = 34;
const int RELAY_1 = 26;
const int DRY_1 = 2100;
// Зона 2
const int SENSOR_2 = 35;
const int RELAY_2 = 27;
const int DRY_2 = 2200; // другой тип почвы — другой порог
// Зона 3
const int SENSOR_3 = 32;
const int RELAY_3 = 25;
const int DRY_3 = 1900; // песчаная почва сохнет быстрее
Для каждой зоны — свои пороги, свои таймеры, свои отчёты. Три зоны на одной ESP32 обойдутся примерно в 3 500 ₽ (одна плата + три датчика + три реле + три помпы). Пять зон — около 5 000 ₽.
Если зон больше пяти или они далеко друг от друга — ставьте отдельную ESP32 на каждые 2–3 зоны. При цене 450 ₽ за плату это не проблема.
Типичные грабли и как их обойти
Датчик показывает ерунду. Проверьте питание: ёмкостной датчик v1.2 должен питаться от 3.3V. При 5V показания нестабильны, АЦП ESP32 может уходить в перегрузку. Ещё частая причина — провода длиннее 5 метров без экранирования: наводки от помпы искажают сигнал. Решение — витая пара или экранированный кабель.
Помпа не включается. Модули реле бывают active LOW и active HIGH. Если у вас active HIGH — замените LOW/HIGH в коде на противоположные. Проверить просто: при подаче HIGH на вход реле светодиод на модуле должен загореться и послышится щелчок.
Wi-Fi отваливается. ESP32 имеет известную проблему с Wi-Fi при высокой загрузке АЦП. Решение — не читать датчик слишком часто (раз в минуту достаточно) и добавить автореконнект:
// В начало loop()
if (WiFi.status() != WL_CONNECTED) {
WiFi.reconnect();
delay(5000);
}
Конденсат на плате. Даже в корпусе IP55 конденсат образуется из-за перепадов температуры. Бросьте в корпус пакетик силикагеля (из обувной коробки) и меняйте раз в месяц. Или покройте плату лаком — есть специальные аэрозоли для электроники (Plastik 71, ~300 ₽).
Сколько экономит автополив
Конкретные цифры зависят от культуры и региона, но порядок такой:
Помидоры в теплице 20 м². Ручной полив «на глазок» — расход воды ~150 литров в день. Автоматический полив по датчику — ~90 литров в день. Экономия воды — 40%. Если вода из скважины с насосом — экономия электричества ~200 ₽ в месяц. Но главное не вода, а урожай: равномерное увлажнение повышает урожайность томатов на 15–25% по сравнению с ручным поливом.
Клубника на открытом грунте 5 соток. Без автоматики полив — это человек на 2 часа каждый вечер (в жаркий период). С автоматикой — 0 часов. За сезон (май–сентябрь) — это 300 человеко-часов. При стоимости рабочего времени 300 ₽/час — 90 000 ₽ экономии.
Конечно, для 5 соток клубники вам понадобится не одна зона полива, а 10–15. Но даже с учётом десятка ESP32 и датчиков общий бюджет — 25 000–30 000 ₽. Окупаемость — меньше чем за половину первого сезона.
Что можно улучшить
Наша система делает базовую вещь — полив по влажности. Но ESP32 способна на большее:
Веб-интерфейс. ESP32 может поднять мини-веб-сервер. Открываете в браузере IP-адрес контроллера — видите текущую влажность, графики, можете менять пороги без перепрошивки. Готовые библиотеки: ESPAsyncWebServer + Chart.js.
Датчик температуры (DS18B20). Температура почвы влияет на скорость испарения. Зная температуру, можно корректировать пороги: в жару допустимая влажность выше, в прохладу — ниже.
Публикация данных в облако. ThingSpeak, Blynk или собственный MQTT-брокер. Удобно для мониторинга нескольких теплиц с одного телефона. Продвинутый вариант — интеграция с платформами типа ТерраКвант, где данные с датчиков ложатся в общую картину по хозяйству.
Датчик уровня воды в бочке. Ультразвуковой HC-SR04 (~90 ₽) покажет, сколько воды осталось. Когда бочка почти пуста — уведомление в Telegram: «наполните бочку». Это предотвратит работу помпы всухую (что убивает её за минуты).
Итог
За 2 500 ₽ и один вечер работы вы получаете систему, которая поливает грядки лучше, чем вы это делаете вручную. Не потому что вы плохой фермер — а потому что у датчика нет субъективности, усталости и других дел. Он измеряет влажность каждую минуту и принимает решение по чётким правилам.
Главное — правильная калибровка и ёмкостной (не резистивный!) датчик. Остальное — дело техники.
В следующей статье поговорим о том, как хозяйства управляют сезонными бригадами — от найма до расчётов. Спойлер: Excel и бумажные табели — это не система, а источник конфликтов.




