← На главную / Все проекты

🌿 Автополив сада

Автоматический полив по влажности почвы — 2 зоны, веб-интерфейс, защита от сухого хода

Платформа
WeMos D1 Mini Pro (ESP8266)
Сложность
Средняя ⭐⭐⭐
Польза
Сад поливается сам, экономия воды до 40%

📋 Описание

Контроллер измеряет влажность почвы в двух зонах сада и температуру/влажность воздуха. Если почва пересохла ниже порога и наступило вечернее окно полива (18:00–22:00), открывается электромагнитный клапан на заданное время. Поплавковый датчик защищает насос от сухого хода. Управление — через встроенный веб-интерфейс, прошивка обновляется по OTA.

🔧 Компоненты

КомпонентКол-воРоль
WeMos D1 Mini Pro V3.01Контроллер, Wi-Fi, веб-интерфейс
Ёмкостный датчик влажности почвы2Влажность в зонах A и B
DHT111Температура/влажность воздуха
Реле-модуль 5V ×2 канала1Коммутация клапанов
Электромагнитный клапан 12V (1/2")2Подача воды в зоны
Поплавковый датчик уровня1Защита от сухого хода
БП 12V + DC-DC понижающий1Питание клапанов и логики

⚡ Схема подключения

WeMos D1 Mini Pro          Компонент
──────────────────────────────────────────────
A0  ◄───────────────  Датчик влажности A (AO)
D4  ◄───────────────  DHT11 (DATA) + подтяжка 10k
D5  ◄───────────────  Поплавковый датчик → GND
D1  ───────────────►  IN1 реле (клапан зоны 1)
D2  ───────────────►  IN2 реле (клапан зоны 2)
5V  ◄── DC-DC ◄────  БП 12V

Силовая часть:
БП 12V ── клапан ── COM/NO реле ── обратно на БП

🧠 Логика работы

  1. Опрос датчиков раз в 5 минут с усреднением по 5 замерам.
  2. Если влажность < порога и время 18:00–22:00 (NTP) → открыть клапан зоны.
  3. Полив ограничен таймаутом (10 минут на зону).
  4. Ёмкость пуста → полив запрещён, реле принудительно выключаются.
  5. Веб-страница: показания, пороги, кнопки «полить» / «стоп всё».
  6. OTA-обновление прошивки через /update.

💻 Код

Полная прошивка: Vault/04_Code/auto_irrigation/auto_irrigation.ino
Библиотеки: ESP8266WiFi, ESP8266WebServer, ESP8266HTTPUpdateServer, DHT sensor library.
Перед заливкой: указать Wi-Fi SSID/пароль и часовой пояс (UTC+5 в коде).
// Ядро логики
void autoControl() {
  if (!waterAvailable()) {           // сухой ход — всё закрыть
    for (int i = 0; i < 2; i++) setValve(i, false);
    return;
  }
  if (!inWateringWindow()) return;   // только 18:00–22:00
  if (soilA < soilThresholdA) setValve(0, true);
  if (soilB < soilThresholdB) setValve(1, true);
}

🛠️ Этапы сборки