Uncategorized

Умный сад на ESP32: автополив по влажности почвы

Проблема

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

С ESP32, датчиком влажности почвы и реле можно собрать полностью автоматический умный сад, который:

  • Следит за влажностью почвы 24/7
  • Поливает растения, когда им это нужно (а не по расписанию)
  • Присылает предупреждения, когда бак с водой пуст

Что вы соберёте

Систему автополива на ESP32, которая каждый час считывает влажность почвы и включает помпу, когда земля пересыхает. Опционально: подключите WiFi для удалённого мониторинга через MQTT.

Сложность: для начинающих  |  Время: 45 минут  |  Стоимость: ~$35 за детали

Нужное железо (спецификация)

Деталь Модель Кол-во Цена Купить
Микроконтроллер ESP32 DevKitC V4 1 $13.49 Смотреть товар
Датчик влажности почвы Ёмкостный, v1.2 1 $4.49 Смотреть товар
Модуль реле 2 канала, 5В 1 $5.24 Смотреть товар
Дисплей 0.96″ OLED SSD1306 1 $5.99 Смотреть товар
Макетная плата 830 точек 1 $4.49 Смотреть товар
Провода-перемычки M-M, 40 шт. 1 $2.99 Смотреть товар

Ещё понадобится мини-помпа (5В, ~$3 в любом хозяйственном) и силиконовая трубка. Плюсовой провод помпы подключайте через реле.

Шаг 1: Монтаж

ESP32 ↔ датчик влажности почвы

Пин датчика Пин ESP32 Примечание
VCC 3V3 Питание
GND GND Земля
AOUT GPIO 34 Аналоговый выход (ADC1_CH6)

ESP32 ↔ модуль реле

Пин реле Пин ESP32 Примечание
VCC 5V/VIN Питание
GND GND Земля
IN1 GPIO 26 Сигнал управления реле

ESP32 ↔ дисплей OLED

Пин OLED Пин ESP32 Примечание
VCC 3V3 Питание
GND GND Земля
SDA GPIO 21 Данные I2C
SCL GPIO 22 Такт I2C

Важно: подключайте помпу через клеммы NO (нормально разомкнутый) и COM реле. Реле работает как выключатель — когда GPIO 26 уходит в LOW, помпа включается.

Шаг 2: Калибровка

Прежде чем автоматизировать, найдите «сухое» и «влажное» значения вашей почвы:

  1. Воткните датчик в сухую землю → запишите аналоговое значение (например, 3200)
  2. Воткните в влажную → запишите значение (например, 1400)
  3. Вычислите порог — ниже этого значения влаги достаточно, выше — пора поливать
DRY_VALUE = 3200   (your reading in dry soil)
WET_VALUE = 1400   (your reading in wet soil)
THRESHOLD = 2500   (trigger watering above this)

Шаг 3: Загрузите код

#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// --- Pins ---
#define SOIL_PIN 34
#define PUMP_PIN 26

// --- Calibration (change these!) ---
const int DRY_VALUE = 3200;
const int WET_VALUE = 1400;
const int THRESHOLD = 2500;

const unsigned long CHECK_INTERVAL = 3600000;
const unsigned long PUMP_DURATION = 5000;
unsigned long lastCheck = 0;

void displayReading(int raw, int percent) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Smart Garden");
  display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
  display.setCursor(0, 20);
  display.printf("Moisture: %d%%", percent);
  display.setCursor(0, 35);
  if (percent < 40) {
    display.println("Status: DRY");
    display.println("Pump: ACTIVE");
  } else {
    display.println("Status: OK");
    display.println("Pump: OFF");
  }
  display.setCursor(0, 55);
  display.printf("Raw: %d", raw);
  display.display();
}

void setup() {
  Serial.begin(115200);
  pinMode(PUMP_PIN, OUTPUT);
  digitalWrite(PUMP_PIN, HIGH);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED not found!");
  }
  display.clearDisplay();
  display.display();
}

void loop() {
  if (millis() - lastCheck >= CHECK_INTERVAL || lastCheck == 0) {
    lastCheck = millis();
    int raw = analogRead(SOIL_PIN);
    int percent = map(raw, DRY_VALUE, WET_VALUE, 0, 100);
    percent = constrain(percent, 0, 100);
    Serial.printf("Soil: %d%% (raw: %d)n", percent, raw);
    displayReading(raw, percent);
    if (percent < 40) {
      Serial.println("Soil is dry! Watering...");
      digitalWrite(PUMP_PIN, LOW);
      delay(PUMP_DURATION);
      digitalWrite(PUMP_PIN, HIGH);
      Serial.println("Watering complete.");
    }
  }
}

Шаг 4: Запуск

  1. Воткните ёмкостный датчик влажности в горшок с растением
  2. Подключите помпу к ёмкости с водой, а трубку подведите к растению
  3. Запитайте ESP32 от USB или шилда 18650
  4. Дисплей OLED показывает текущий процент влажности и состояние помпы
  5. Каждый час система проверяет влажность почвы и поливает автоматически

Почему ёмкостные датчики лучше

В этой системе используется ёмкостный датчик влажности почвы (а не резистивный). У резистивных датчиков открытые металлические щупы, которые ржавеют во влажной земле за считанные недели. Ёмкостные прячут электронику за защитным слоем — они служат годами без деградации.

Идём дальше

  • Добавьте WiFi + MQTT — пересылайте данные о влажности на телефон (совместите с туториалом по MQTT)
  • Добавьте датчики — мультиплексор (CD4051BE) позволит следить за несколькими растениями с одного ESP32
  • Добавьте датчик уровня воды — предупредит, когда бак на исходе
  • Интеграция с Home Assistant — управляйте помпой с дашборда умного дома
  • Солнечное питание — добавьте солнечную панель 5В + шилд 18650 для постоянной уличной установки

Leave a Reply

Your email address will not be published. Required fields are marked *