Все статьиHardware

Автоматический полив растений на Arduino с датчиком влажности

БА
Бексултан Айтен
CTO, Alashed
5 мая 2025 г.
9 мин чтения
Автоматический полив растений на Arduino с датчиком влажности

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

Зачем автоматизировать полив

Цветы в школьном кабинете или дома часто страдают от забывчивости хозяев. Одни растения заливают, другие засыхают. Система автоматического полива на Arduino решает эту проблему: датчик влажности измеряет состояние почвы, а микроконтроллер включает помпу ровно тогда, когда земля пересохла. Через заданное время помпа выключается, и система ждёт следующего цикла проверки.

Этот проект находится на пересечении электроники и биологии. Ученики осваивают работу с аналоговыми датчиками, управление нагрузкой через реле и написание логики принятия решений. Подходит для 7-10 классов. Результат — реально работающее устройство, которое можно оставить в классе на весь учебный год.

Собранная система автоматического полива на Arduino
Собранная система автоматического полива на Arduino

Список компонентов

  • Arduino Uno — 1 шт.
  • Датчик влажности почвы (ёмкостный v1.2 или резистивный FC-28) — 1 шт.
  • Модуль реле 5V (одноканальный, 10A) — 1 шт.
  • Погружная водяная помпа 5V — 1 шт.
  • Силиконовая трубка (диаметр 6 мм, длина ~40 см) — 1 шт.
  • Ёмкость для воды (бутылка или контейнер)
  • Внешний источник питания (блок питания 5-6V или батарейный отсек 4xAA)
  • Макетная плата и соединительные провода
  • Светодиод и резистор 220 Ом — для индикации полива

Рекомендуем ёмкостный датчик вместо резистивного: он не имеет открытых металлических контактов и не окисляется от постоянного контакта с влажной землёй. Резистивный датчик прослужит несколько недель, ёмкостный — годы.

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

Датчик влажности почвы:

  • VCC — к 5V Arduino
  • GND — к GND Arduino
  • Аналоговый выход (AO) — к пину A0 Arduino

Модуль реле:

  • VCC — к 5V Arduino
  • GND — к GND Arduino
  • Управляющий вход (IN) — к цифровому пину D7 Arduino

Водяная помпа:

  • Подключается через нормально разомкнутые контакты реле (NO и COM)
  • Один провод помпы — к плюсу внешнего источника питания
  • Второй — через реле к минусу источника

Светодиод-индикатор:

  • Анод через резистор 220 Ом — к пину D8 Arduino
  • Катод — к GND

Важное правило: помпу нельзя питать напрямую от Arduino. Пин 5V на плате рассчитан на небольшой ток, а помпа потребляет 100-300 мА. Внешний источник питания обязателен. Не забудьте соединить GND Arduino и GND внешнего источника — без общей земли реле не сработает.

Датчик погружается в горшок с растением. Помпа опускается в ёмкость с водой. Трубка от помпы направляется в горшок.

Схема подключения датчика влажности почвы к Arduino
Схема подключения датчика влажности почвы к Arduino

Полный код проекта

```cpp

// Автоматический полив растений на Arduino

// Датчик влажности + реле + помпа

// Пин датчика влажности (аналоговый)

const int soilPin = A0;

// Пин управления реле

const int relayPin = 7;

// Пин светодиода-индикатора

const int ledPin = 8;

// Порог сухости (подбирается экспериментально)

// Ёмкостный датчик: ~300 = мокро, ~600 = сухо

// Резистивный датчик: ~200 = мокро, ~800 = сухо

const int dryThreshold = 600;

// Длительность полива (мс). 4 секунды — для маленького горшка

const unsigned long wateringDuration = 4000;

// Интервал между проверками (мс). 60 секунд

const unsigned long checkInterval = 60000;

// Минимальная пауза после полива для впитывания (мс)

const unsigned long soakTime = 30000;

unsigned long lastCheckTime = 0;

bool justWatered = false;

unsigned long waterEndTime = 0;

void setup() {

pinMode(relayPin, OUTPUT);

pinMode(ledPin, OUTPUT);

// Всё выключено при старте

digitalWrite(relayPin, LOW);

digitalWrite(ledPin, LOW);

Serial.begin(9600);

Serial.println("=== Система автополива ===");

Serial.print("Порог сухости: ");

Serial.println(dryThreshold);

Serial.print("Время полива: ");

Serial.print(wateringDuration / 1000);

Serial.println(" сек");

}

void loop() {

unsigned long now = millis();

// Если только что поливали — ждём, пока вода впитается

if (justWatered) {

if (now - waterEndTime >= soakTime) {

justWatered = false;

Serial.println("Пауза впитывания завершена.");

}

return;

}

// Проверяем почву с заданным интервалом

if (now - lastCheckTime >= checkInterval) {

lastCheckTime = now;

// Считываем датчик влажности

int moisture = analogRead(soilPin);

Serial.print("Влажность: ");

Serial.print(moisture);

if (moisture >= dryThreshold) {

Serial.println(" — СУХО. Включаю полив!");

waterPlant();

} else {

Serial.println(" — норма.");

digitalWrite(ledPin, LOW);

}

}

}

// Функция полива

void waterPlant() {

// Включаем индикатор

digitalWrite(ledPin, HIGH);

// Включаем помпу через реле

digitalWrite(relayPin, HIGH);

Serial.println("Помпа: ВКЛ");

// Поливаем заданное время

delay(wateringDuration);

// Выключаем помпу

digitalWrite(relayPin, LOW);

digitalWrite(ledPin, LOW);

Serial.println("Помпа: ВЫКЛ");

// Запоминаем время окончания для паузы впитывания

justWatered = true;

waterEndTime = millis();

Serial.println("Ожидание впитывания воды...");

}

`

Разбор кода

Аналоговый датчик. Функция analogRead() возвращает число от 0 до 1023. Влажная почва хорошо проводит электричество — значение низкое. Сухая почва — плохой проводник, значение высокое. Порог dryThreshold = 600 — отправная точка, которую нужно подобрать для конкретного датчика и типа почвы.

Калибровка. Перед установкой откройте монитор порта. Воткните датчик в мокрую землю — запишите значение (например, 280). Воткните в сухую — запишите (например, 750). Выберите порог посередине — в данном случае около 500-550.

Реле как переключатель. Реле — электромеханический ключ. Когда Arduino подаёт HIGH на пин D7, внутри реле замыкается контакт, и ток от внешнего источника поступает на помпу. Это позволяет слабому сигналу Arduino (5V, 20 мА) управлять мощной нагрузкой.

Пауза впитывания. После полива система ждёт 30 секунд, прежде чем снова проверить почву. Без этой паузы вода не успеет дойти до датчика, и система запустит повторный полив — растение будет залито.

Защита от перелива. Длительность полива ограничена переменной wateringDuration. Даже если датчик выйдет из строя, помпа проработает максимум 4 секунды за один цикл.

Советы для учителей

Проект отлично подходит для межпредметного занятия: информатика (код), физика (электрические цепи) и биология (потребности растений в воде). Предложите ученикам вести журнал наблюдений: записывать значения влажности до и после полива, строить графики высыхания почвы. Разные группы могут поливать разные растения и сравнить результаты.

Для школьной выставки добавьте LCD-дисплей 16x2 — он покажет текущую влажность и статус системы без компьютера. Продвинутые ученики могут заменить Arduino Uno на ESP32 и отправлять уведомления на смартфон через Wi-Fi, превратив проект в полноценное IoT-устройство.

Как Alashed помогает

В Alashed Hardware можно собрать и протестировать схему в виртуальном симуляторе, не рискуя реальными компонентами. CodeStudio позволяет писать и компилировать Arduino-код в браузере, а учитель видит работу каждого ученика в реальном времени и может подсказать, не подходя к каждому компьютеру.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо