Умная система автополива растений на Arduino Nano
Компоненты и материалы
| Arduino Nano R3 | × | 1 |
| Adafruit LCD 16x2 (белый на синем) | × | 1 |
| Микронасос для воды | × | 1 |
| Ротационный энкодер с кнопкой | × | 1 |
| Драйвер двигателей L298N | × | 1 |
| Фоторезистор | × | 1 |
| Транзистор NPN (общего назначения) | × | 1 |
| Резистор 10 кОм | × | 1 |
| Потенциометр 10 кОм | × | 1 |
| Конденсатор 10 мкФ | × | 1 |
| Конденсатор 1000 мкФ | × | 1 |
| Конденсатор 470 мкФ | × | 1 |
| Конденсатор 100 нФ | × | 7 |
| Диод 1N4001 | × | 8 |
| RCA-разъем | × | 1 |
| Датчик влажности почвы | × | 1 |
| Клеммные блоки (3 шт.) | × | 3 |
| Стабилизатор AMS1117-ADJ | × | 1 |
| Резистор 2 кОм | × | 1 |
| Резистор 680 Ом | × | 1 |
| Блок питания DC 9V 3A | × | 1 |
Инструменты
| Паяльник |
Приложения и сервисы
| Arduino IDE |
О проекте
Еще один автополиватель
В интернете много проектов и руководств по использованию датчиков влажности почвы. В этом проекте лучшие идеи из сети объединены и дополнены программной частью для создания контроллера системы автополива домашних растений. Иногда решение кажется очевидным, пока не углубишься в детали. Давайте разберем эти детали.
Основные функции контроллера
- Поддержка двух растений — два независимых канала; любой канал можно отключить
- У каждого канала два общих параметра: время полива вперед и назад (в десятках секунд)
- Ручной режим — полив по нажатию кнопки
- Проверка влажности после полива: канал отключается, если влажность не выросла
- Датчик освещенности предотвращает работу ночью
- Меню настройки параметров. Конфигурация сохраняется в EEPROM
Измерение влажности почвы
Как точно измерить влажность почвы? Можно заказать датчик, вставить в горшок и измерить сопротивление. Так делают многие руководства. К сожалению, в моем случае сопротивление «сухой» и «влажной» почвы было близко (300 кОм и 500 кОм) — точно определить момент полива сложно. Проблема в том, что чистая вода не проводит ток — проводят минералы. Измеряемое сопротивление сильно зависит от количества и типа минералов, а не от количества воды.
В интернете нашел блестящую идею: измерять не сопротивление, а емкость датчика. Вода имеет высокую диэлектрическую проницаемость, поэтому емкость «влажного» датчика в миллион раз больше «сухого» (200 мкФ против 200 пФ)!
Как измерить емкость?
Гениальные люди превратили Arduino в точный измеритель емкости. Но этот метод сложен и избыточен для наших целей. Другой способ проще: использует всего два аналоговых пина и дает приемлемую точность для различия «сухое/влажное». Поскольку показания «сухого» и «влажного» сильно отличаются, в коде используется натуральный логарифм показаний емкости, чтобы сузить диапазон значений.
Зачем H-мост?
Казалось бы, достаточно одного MOSFET для насоса. Но уровень воды в баке может быть выше растения. В таком случае вода течет по инерции после остановки насоса. Как гарантированно остановить поток? Запустить насос в обратную сторону на короткое время. Для DC-мотора достаточно поменять полярность. Для этого нужен H-мост. L298N — хороший выбор. Насосы потребляют 9V и 3A, поэтому нужны радиатор на чипе и мощный резистор (1 Ом 5Вт). L298N управляет двумя моторами, поэтому контроллер может поливать два растения одновременно.
Меню контроллера
Управление через ротационный энкодер. После запуска появляется главный экран:
- Верхняя строка: текущие показания датчиков обоих каналов. Если канал отключен —
xxxx - Нижняя строка: пороги сухости

Ручной полив: короткое нажатие энкодера → экран ручного управления.
Настройка: длинное нажатие (~1 сек) на главном экране → меню:
- Левый канал
- Правый канал
- Яркость подсветки дисплея (или авто)
- Яркость ночью
Меню каждого канала:
- Включение канала
- Порог сухости (натуральный логарифм емкости датчика). Текущие значения на главном экране
- Время работы насоса вперед (десятки секунд)
- Время работы насоса назад (десятки секунд)
- Тест параметров — проверка работы полива перед сохранением в EEPROM
Аппаратная часть
Контроллер собран на двух двусторонних платах 3×7 см.
Плата 1: драйвер L298N, диоды, клеммные блоки для питания и насосов, разъемы датчиков. Модуль питания AMS1117-ADJ для 5В (L298N и Arduino). Удобно для отладки. Можно использовать стабилизатор на самой Arduino.
Плата 2: Arduino Nano, разъемы для энкодера и фоторезистора, сокет для LCD.
Код
WateringSystem
Исходный код: GitHub
Схемы
Производственный процесс
- Автоматизированная система полива растений на Raspberry Pi с веб-дашбордом
- Умная система мониторинга отеля и дома с облачными автоматизированными управлениями
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- DIY детектор землетрясений на ADXL335 с усилением ОУ OP07
- Автоматическая система полива растений на Arduino — уходи в отпуск спокойно
- Умная система мониторинга растений на AWS IoT
- Arduino Home Controller с Alexa: умный дом голосовым управлением
- Умная система мониторинга растений на Windows 10 IoT: Arduino Due + Raspberry Pi
- Умный очиститель воздуха на Arduino Yun + Sharp Plasmacluster + AWS IoT
- Самодельная система солнечной энергии с слежением за солнцем на Arduino UNO