Arduino Nano · pinport
готово
⋮

Автополив и фитолампа на Arduino Nano

Настоящее устройство для подоконника: фитолампа 230 В по расписанию и два насоса 12 В, каждый со своим периодом полива. Часы DS3231, датчик HTU21D, экран LCD 16x2 и одна ручка энкодера для всех настроек; настройки хранятся в EEPROM.

Что на схеме

Плата Arduino Nano, к ней подключены:

  • Реле — rl1
  • Реле — rl2
  • Реле — rl3
  • Ввод 230 В — in
  • Автоматический выключатель — qf1
  • Выключатель одноклавишный — sw1
  • Светильник 230 В — la1, тип: импульсный
  • Блок питания 12 В — ps
  • Тумблер — sw2
  • Тумблер — sw3
  • Мотор 12 В — m1
  • Мотор 12 В — m2
  • LCD 16x2 (I2C) — lcd1
  • Часы реального времени DS3231 (I2C) — rtc1
  • Датчик HTU21D: температура и влажность (I2C) — ht1, влажность 45 %, температура 23.5 °C
  • Энкодер KY-040 (ручка с кнопкой) — enc1

Задействованы выводы платы: 5V, GND, A4, A5, D2, D3, D4, D5, D6, D7. Всего соединений на схеме: 39.

Как это работает

Верхняя строка экрана не меняется: часы, температура и влажность с датчика HTU21D. Нижняя — три экрана, их листает поворот ручки:

  • L 07:00-21:00 ON — фитолампа: время включения и выключения, справа — горит ли она сейчас. Интервал может переходить через полночь (например, 20:00-06:00); одинаковое время включения и выключения значит «не включать».
  • 1 100s 3d(2) 20h — насос P1: качать 100 секунд, раз в 3 дня, до полива осталось 2 дня, поливать в 20:00. Ноль в скобках — «сегодня».
  • 2 60s 2d(1) 08h — насос P2, то же самое.

Счётчик «осталось дней» уменьшается при смене суток. Номер последних суток лежит в EEPROM вместе с настройками, поэтому сутки, пропущенные выключенным прибором, тоже засчитываются. Когда счётчик дошёл до нуля и наступил час полива, реле насоса включается на заданное число секунд, а счётчик снова становится равен периоду. Прибор, включённый после часа полива, польёт сразу, а не пропустит день. Во время полива на экране насоса стоит > и идёт обратный отсчёт.

Настройка одной ручкой

В модели ручкой удобнее всего управлять с пульта: он появляется в правом нижнем углу схемы на время прогона, не зависит от масштаба схемы и показывает экран крупно. Щёлкните по пульту — и работают клавиши: ← → поворачивают ручку, пробел нажимает (удержание — долгое нажатие).

  • Поворот — следующий экран.
  • Нажатие — правка: начинает мигать первое поле, поворот меняет его, следующее нажатие переходит к следующему полю. После последнего поля настройки записываются в EEPROM.
  • Долгое нажатие во время правки — отмена: вернуть то, что было записано.
  • Долгое нажатие на экране насоса — полить сейчас или остановить полив. Удобно проверить насос и шланги.
  • Правка, брошенная на полминуты, сохраняется сама — иначе полив так и ждал бы её окончания.

Часы DS3231 при первом запуске ставятся на время сборки прошивки. Точное время задаётся в мониторе порта: time 19:59:40, date 29.09.2026; status печатает все настройки.

Силовая часть

Фитолампа питается от сети: фаза через автомат qf1, выключатель канала sw1 и контакты реле rl1. Насосы — от блока питания 12 В, каждый через свой выключатель (sw2, sw3) и реле (rl2, rl3). Выключатели стоят последовательно с контактами реле, как тумблеры на корпусе: выключенный канал не заработает, что бы ни решила прошивка. Цепи 230 В и 12 В считаются раздельно, у каждой свой разбор на вкладке «Силовая часть».

У модуля шесть реле, заняты три; свободные — на выводах 8, 9 и 10. Третий насос — это третий вывод в RELAY_PUMP и третья строка в DEFAULT_PUMPS: экран, настройка, EEPROM и полив подхватят его сами.

Чем модель отличается от устройства

  • Питание платы. В устройстве Nano питается от того же блока 12 В через понижающий преобразователь XL4015 на 5 В. В модели преобразователя нет, плата питается сама; общий минус с блоком 12 В на железе есть и допустим.
  • Уровень включения реле. В модели реле включается высоким уровнем. Шестиканальные модули с оптронами (HL-56S и похожие) часто включаются низким — проверьте свой и поменяйте константу RELAY_ON.
  • Автомат qf1 в модели добавлен: линию 230 В к лампе без защиты оставлять не стоит и в устройстве.
  • HTU21D в модели отвечает сразу; на железе измерение занимает до 50 мс, и скетч это время ждёт.

Библиотеки

Пример собирается с библиотеками:

  • LiquidCrystal I2C
  • RTClib
  • Adafruit BusIO

Они уже установлены на сервере сборки — отмечать их в проекте вручную не нужно, список приезжает вместе с примером.

Как это устроено в коде

Основное, чем пользуется скетч:

  • EEPROM — энергонезависимая память микроконтроллера: 1 КБ у ATmega328P, 4 КБ у ATmega2560
  • RTClib — работа с часами реального времени
  • LiquidCrystal_I2C — текстовый экран 16×2 по двум проводам
  • DS3231 — точные часы с собственным термокомпенсированным генератором
  • digitalRead() — читает уровень на выводе
  • delay() — пауза, на время которой ядро занято ожиданием
  • constrain() — зажимает значение в границах
  • millis() — миллисекунды с запуска: на них строят работу без остановки
  • Serial.println() — печатает строку в монитор порта
  • digitalWrite() — выставляет на выводе высокий или низкий уровень
  • Serial.begin() — открывает монитор порта на заданной скорости
  • pinMode() — назначает выводу режим: выход, вход или вход с подтяжкой

В скетче 422 строки; свои функции: loadSettings(), onEncoder(), htuRead(), readClimate(), lampShouldBeOn(), startPump(), stopPump(), newDay(); подключено заголовков: 4. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.

Что попробовать изменить

  1. Нажмите «Запустить»: сценарий сам поставит часы на 19:59:40, переведёт ручкой насос P1 на «полить сегодня» и дождётся 20:00 — насос на схеме закрутится. Журнал — на вкладке «Сценарий»; после проверок прибор работает дальше.
  2. Управляйте прибором с пульта в правом нижнем углу схемы: там крупная копия экрана и кнопки ↺ ● ↻. Щёлкните по пульту — и крутите ручку клавишами ← →, а пробел нажимает её (держите — долгое нажатие).
  3. Во время полива щёлкните по выключателю sw2 на схеме: насос встанет, хотя реле по-прежнему включено, — так работает тумблер канала.
  4. Поменяйте температуру и влажность датчика ht1 в его свойствах, не останавливая прогон: верхняя строка экрана обновится через пять секунд.
  5. Наберите в мониторе порта time 20:59:50 и посмотрите, как в 21:00 гаснет фитолампа, а на вкладке «Силовая часть» пропадает её ток.
  6. Добавьте третий насос: вывод 8 в RELAY_PUMP, строку в DEFAULT_PUMPS, на схеме — реле на D8, выключатель и мотор 12 В от того же блока.

Смотрите также

← Все примеры галереи

Схема
Проект из галереи — запускать можно, менять нельзя.

      
Сборка ещё не запускалась.

    Печатайте в Serial числа — они станут графиком. Serial.println(t); — один ряд, Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями. Формат тот же, что понимает плоттер Arduino IDE.