DIY автополив на Arduino с датчиком влажности почвы

от автора

Введение

Приветствую, меня зовут Алексей Морозов. В этой статье я покажу как сделать простой и практичный автополив на 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);  }}

Итоги

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

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

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

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

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

ссылка на оригинал статьи https://habr.com/ru/articles/1055346/