Введение

Приветствую, меня зовут Алексей Морозов. В этой статье я покажу как сделать простой и практичный автополив на arduino.

Подбор комплектующих

Для этого проекта я подобрал следующие компоненты:

  1. Arduino Nano в качестве контроллера

  2. модуль mosfet транзистора для управления помпой

  3. помпа для аквариумов

  4. датчик влажности почвы v2

Фото деталей
arduino nano
arduino nano
Датчик влажности почвы
Датчик влажности почвы
mosfet модуль
mosfet модуль
Аквариумная помпа
Аквариумная помпа

Сборка

Вот схема подключения:

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

Теперь по сборке:

Есть помпа, и к ней нужно приделать трубку, для этого можно взять трубку от катетера бабочки:

Отрезаем крышечку

И крепим на термоусадку прямо к отводу на помпе.

Готово!

Фото полной сборки
Фото полной сборки

Код

Вот полный код полива:

// --- НАСТРОЙКИ ОБОРУДОВАНИЯ ---
#define SNSR_PIN A0    // Аналоговый пин, к которому подключен датчик влажности почвы
#define PUMP_PIN 3     // Цифровой пин, управляющий реле или драйвером насоса

// --- НАСТРОЙКИ ЛОГИКИ АВТОМАТИКИ ---
#define THRESHOLD_HUMD 50  // Пороговое значение влажности (в процентах).
                           // Если влажность ниже этого значения, насос включается.
#define HYSTERESIS 10      // Гистерезис (разница в процентах).
                           // Нужен, чтобы избежать частого включения/выключения насоса
                           // при колебаниях влажности около порога.
                           // Насос выключится, только когда влажность превысит (THRESHOLD_HUMD + HYSTERESIS).

/**
 * @brief Считывает показания с датчика и преобразует их в проценты влажности.
 * @return Влажность почвы в процентах (0 - сухо, 100 - мокро).
 */
uint8_t get_humd() {
  // analogRead(SNSR_PIN) возвращает значение от 0 до 1023.
  // Функция map() преобразует этот диапазон в проценты от 100 до 0.
  // Логика инвертирована: чем выше напряжение на датчике (больше воды), тем ниже значение АЦП,
  // но для удобства восприятия мы переводим это в "процент влажности", где 100 — это максимум.
  return map(analogRead(SNSR_PIN), 0, 1023, 100, 0);
}

/**
 * @brief Управляет состоянием насоса на основе текущей влажности.
 * @param humd Текущее значение влажности почвы в процентах.
 */
void turn_pump(uint8_t humd) {
  // Если влажность почвы упала ниже порога, включаем насос.
  if (humd < THRESHOLD_HUMD) {
    digitalWrite(PUMP_PIN, HIGH);
  }
  // Если влажность поднялась выше порога с учетом гистерезиса, выключаем насос.
  // Это условие сработает только когда почва станет достаточно влажной,
  // чтобы предотвратить "дребезг" (циклическое включение-выключение).
  else if (humd > THRESHOLD_HUMD + HYSTERESIS) {
    digitalWrite(PUMP_PIN, LOW);
  }
}

/**
 * @brief Блок начальной настройки микроконтроллера. Выполняется один раз при включении.
 */
void setup() {
  // Инициализация последовательного порта для вывода данных в монитор (Serial Monitor)
  Serial.begin(115200);

  // Настройка пинов:
  pinMode(SNSR_PIN, INPUT);   // Пин датчика как вход
  pinMode(PUMP_PIN, OUTPUT);  // Пин насоса как выход
}

/**
 * @brief Основной рабочий цикл. Выполняется бесконечно после завершения setup().
 */
void loop() {
  // Статическая переменная для хранения времени последнего измерения.
  // Статическая переменная сохраняет свое значение между вызовами loop().
  static uint32_t tmr;

  // Проверяем, прошло ли достаточно времени с прошлого измерения (каждые 10 миллисекунд).
  // Использование millis() вместо delay() позволяет не блокировать выполнение программы.
  if (millis() - tmr >= 10) {
    tmr = millis(); // Обновляем таймер

    // Получаем текущее значение влажности
    uint8_t humd = get_humd();

    // Передаем значение в функцию управления насосом
    turn_pump(humd);

    // Выводим текущее значение влажности в Serial Monitor для отладки
    Serial.println(humd);
  }
}

Итоги

Мы собрали автополив. И эту тему можно долго развивать, но вот ключевые моменты которые нужно обязательно добавить в следующей версии:

  • Энергосбережение

  • Несколько помп

  • Контроль уровня воды в бачке

Спасибо за внимание, удачи в ваших проектах!

Комментарии (11)


  1. iShrimp
    03.07.2026 14:35

    Ох уж этот автополив с датчиками влажности.

    Мне тут как-то недавно захотелось вместо электронной системы с кучей датчиков и клапанов "изобрести" чисто механический контроллер полива. Получилось такое изделие: деревянный диск диаметром 30-60 мм и толщиной 10-20 мм, выточенный перпендикулярно волокнам древесины, с пазом вдоль обода, расколот надвое и стянут нержавеющим хомутом, а в щель между половинками вставлена трубка или капельная лента. Натяжение хомута подбирается так, чтобы мокрый диск перекрывал поток воды, а сухой - пропускал. Деревяшка, пропитанная антисептиком, вполне служит целый летний сезон. Такой вот дауншифтинг XXI века.


  1. MirJoui
    03.07.2026 14:35

    Зачем и для кого эта статья написана?
    Автополив на ардуино сделали уже буквально все, таких статей сотни тысяч и все они как под копирку, набор модулей банален до неприличия.
    Если делать что-то подобно возьмите за основу хотя бы метод измерения влажности почвы не стандартный
    Две статьи назад речь шла про робототехнику, качество материала просто летит в низ с невероятной скоростью


    1. ArduDragon Автор
      03.07.2026 14:35

      Работы над манипулятором ведутся, как я и говорил, система будет переведена на ros2


  1. BerZerKku
    03.07.2026 14:35

    Сын такое собирал. Дорожки на датчике влажности похожем, если не ошибаюсь, в горшке где-то за месяц сожрало.


  1. xSVPx
    03.07.2026 14:35

    Вы собрали автозалив.

    Если помпа уже работает час, а влажность всё еще равна нулю, то конечно надо качать и дальше. Да ведь?

    ЗЫ. И, полагаю автопожар, вряд ли эта помпа не сгорит со временем, если ее не выключать сутки скажем...


    1. ArduDragon Автор
      03.07.2026 14:35

      Можно поставить датчик тока и температуры и сделать экстренное отключение


      1. dimao79
        03.07.2026 14:35

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

        А затем, через какое-то время (да, воде надо время на то, что бы пропитать грунт) контролировать влажность почвы.

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

        Но для этого надо думать над задачей, а не лепить датчики к Ардуинам, не понимая физической сути происходящих процессов.


      1. xSVPx
        03.07.2026 14:35

        Где всё это ?

        Именно обработка эдж кейсов превращает набор всякой фигни в систему автополива...


  1. Iscander_Che
    03.07.2026 14:35

    Как бывший препод, участвовавший как в защитах дипломов, так и в руководстве при их разработке, не могу не спросить: в чём оригинальность проекта? :) /irony


  1. ze7
    03.07.2026 14:35

    С нетерпением ждём статью о том, как заставить ардуино мигать встроенным светодиодом!


    1. Erop22
      03.07.2026 14:35

      Воу-воу, полегче, не надо так гнать! Давайте начнём хотя бы с распаковки..