Система полива растений с управлением по Wi-Fi

В этой статье мы рассмотрим еще одну схему автоматизации процесса полива растений. Человек, сделавший эту систему, увлекается электроникой и разведением цветов.

Цветы растут в пяти ящиках в двух местах на террасе над водоемом. Расстояние от зеркала воды до цветов около 60 см. Задача была следующая:
Автоматический забор воды из пруда и полив с помощью капельной ленты в пяти цветочных горшках.
Два отдельных насоса, один для ящиков с цветами у перил, другой для ящиков на палубе.
Полив растений только в определенное время утром и вечером в течение короткого периода времени.
Полив растений только в теплые и солнечные дни.
При реализации этого проекта предполагается, что есть домашняя автоматизация (с погодной станцией) и установлен Home Assistant.

Инструменты и материалы:
-Компьютер;
-Паяльник;
-Клеевой пистолет;
-3D-принтер (опция);
-Плата ESP-Wroom-32;
-Блок питания, 12 В, 2 А;
-Разъем питания вилка / розетка;
-Модуль L298N;
-Самовсасывающий водяной насос 12 В — 2 шт;
-Водяной фильтр;
-Система микрокапельного орошения, включая шланг длиной 10 м;
-Корпус из АБС-пластика;

Шаг первый: схема
Схема работы устройства следующая:
Блок питания подает 12В на драйвер двигателя.
Драйвер мотора подает 5В на ESP32.
Драйвер мотора подает питание на оба водяных насоса.
ESP32 управляет драйвером двигателя через два вывода данных GPIO.

Шаг второй: плата драйвера двигателя L298N
Чтобы плата драйвера генерировала 5В нужно установить перемычку рядом с входом 12 В. С установленной перемычкой плата драйвера двигателя L298N может также напрямую питать ESP32.

Драйвер двигателя имеет 6 цифровых входов, по 3 на каждый двигатель. ENA и ENB — это входы с широтно-импульсной модуляцией (ШИМ), которые определяют скорость двигателя. Входы In1 / In2 и In3 / In4 управляют направлением вращения двигателя. После проверки направления вращения двигателя ,входы In1, In2, In3 и In4 могут быть подключены к 5V / Gnd ESP32 соответственно. В данном случае подключение следующее:
In1 / In3 = high, In2 / In4 = low
ENA и ENB по умолчанию подключены к 5 В через две перемычки. Когда для установки скорости двигателей используется ШИМ, эти перемычки необходимо удалить.

Оба двигателя подключаются к выходным контактам двигателя на плате драйвера.

Шаг третий: самовсасывающий мембранный насос
Первым насосом, который мастер попробовал в данной сборке, был простой и дешевый бесщеточный насос постоянного тока 12 В AD20P-1230C. Но этот насос не мог всасывать воду снизу. Для таких целей нужен так называемый «самовсасывающий» мембранный насос.

К основным параметрам этого насоса можно отнести:
Модель: диафрагменный насос постоянного тока R365
Рабочее напряжение: 12 В постоянного тока
Ток без нагрузки: 0,23 А
Максимальный расход: 2-3 л / мин.
Максимальное давление на выходе: 1-2,5 кг
Максимальный подъем: 1-2,5 м
Максимальное всасывание: 2 м
Таким образом, он может всасывать воду с глубины 2 м, чего более чем достаточно, так как в данном случае нужно поднять воду только на 90 см вверх. Затем он должен протолкнуть воду еще на метр. В любом случае, этот насос удовлетворяет техническим требованиям.

Шаг четвертый: подключение ESP32
ESP32 — дешевый, но мощный чип от Espressif Systems. Его довольно часто используют в различных простых проектах беспроводной автоматизации. Особенности ESP32:
ESP32 имеет множество входных и выходных контактов.
ESP32 имеет встроенные Bluetooth и Wi-Fi для беспроводной передачи данных.
В сочетании с ESPHome ESP32 можно интегрировать в Home Assistant.
ESPHome обновляется по воздуху
ESPHome имеет простой локальный веб-сервер
Подключения следующее:
Питание 5 Вольт подключается от платы драйвера двигателя к выводу Vin ESP32.
Gnd подключена к Gnd
Контакт GPIO D14 подключен к ENA для ШИМ двигателя A
Контакт GPIO D32 подключен к ENB для ШИМ двигателя B

Шаг пятый: корпус
Устройство должно быть размещено в водонепроницаемом корпусе. Мастер разработал и напечатал на 3D-принтере, несущую конструкцию, которая удерживает все компоненты и которую можно легко установить в стандартный корпус из АБС-пластика.
Насосы и электронная часть находятся в разных отсеках корпуса. Разъем питания 12 В расположен сбоку.

Шаг шестой: программирование
Сначала нужно прописать некоторые параметры.
В esphome устанавливается название устройства, а также конкретная используемая плата ESP. Если контакты In1, In2, In3 и In4 платы драйвера двигателя подключены напрямую к 5V (In1, In3) и земле (In2, In4), вся запись on_boot может быть удалена.
В Wi-Fi необходимо указать сетевые учетные данные.
Запись api гарантирует, что Home Assistant найдет устройство.
Запись web_server создает веб-сервер, через который можно напрямую управлять устройством.
Запись ota позволяет обновлять данные через сеть Wi-Fi, а не через USB-соединение.
В output entry устанавливаются два контакта управления двигателем. Платформа ledc выбрана для управления ШИМ с частотой 1000 Гц. Если контакты In1, In2, In3 и In4 платы драйвера двигателя подключены напрямую к 5V (In1, In3) и земле (In2, In4), эти настройки не используются и могут быть удалены.
Запись sensor определяет уровень сигнала WiFi.
Код можно скачать ниже.

 Показать / Скрыть текст#
# Smart WiFi Controlled Irrigation System Using Home Assistant and ESPHome
#

# Generic ESP32, name, platform and initial GPIO pin states
esphome:
name: waterpump
platform: ESP32
board: esp-wrover-kit
# The on_boot entry can be removed when pins In1, In2, In3 and In4 are directly
# connected to 5V (In1, In3) and Gnd (In2, In4) respectively.
on_boot:
then:
— output.turn_on: gpio_in1
— output.turn_off: gpio_in2
— output.turn_on: gpio_in3
— output.turn_off: gpio_in4

# WiFi, connect to network as defined in secrets.yaml file.
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_pass
# I have preference for fixed IP address, comment out for dynamic IP address
manual_ip:
static_ip: 192.168.1.95
gateway: 192.168.1.1
subnet: 255.255.255.0
# fast_connect: true
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Waterpump Fallback Hotspot"
password: "Waterpump"

# Enable Captive Portal in case connection to defined WiFi network fails.
captive_portal:

# Enable logging
logger:

# Enable Home Assistant API, required to auto discover new ESPHome devices
api:

# Enable local web server for direct connection outside Home Assistant
web_server:
port: 80

# Enable over-the-air updates
ota:

# Define the output pins connected to the Motor Driver board
# The entries for pins In1, In2, In3 and In4 can be removed when directly
# connected to 5V (In1, In3) and Gnd (In2, In4) respectively.
output:
# Motor 1 — ENA, Enable A (= PWM)
— platform: ledc
pin: GPIO14
id: gpio_m1
frequency: "1000Hz"
# Motor 1 — IN1
— platform: gpio
pin: GPIO27
id: gpio_in1
# Motor 1 — IN2
— platform: gpio
pin: GPIO26
id: gpio_in2
# Motor 2 — IN3
— platform: gpio
pin: GPIO25
id: gpio_in3
# Motor 2 — IN4
— platform: gpio
pin: GPIO33
id: gpio_in4
# Motor 2 — ENB, Enable B (= PWM)
— platform: ledc
pin: GPIO32
id: gpio_m2
frequency: "1000Hz"

# Define two light switches in HA that control both water pumps
light:
# Motor 1
— platform: monochromatic
output: gpio_m1
name: "Water pump 1"
# Motor 1
— platform: monochromatic
output: gpio_m2
name: "Water pump 2"

# Define a WiFi strength sensor to indicate the WiFi strength of connection
sensor:
— platform: wifi_signal
name: "Waterpump_WiFi_Signal"
update_interval: 60s
filters:
— median:
window_size: 7
send_every: 4
send_first_at: 3
Шаг седьмой: настройка в Home Assistant
Автоматика настроена так, что она запускается каждое утро в 7:00 и каждый вечер на закате. Но только когда небо ясное, туманное или частично облачное.

 Показать / Скрыть текстautomation:
— alias: 'waterpump automation'
trigger:
# Every morning at 7:00
— platform: time
at: "07:00:00"
# every evening at sun set
— platform: sun
event: sunset
condition:
# Only run when sky is clear, cloudy or partly-cloudy
— condition: or
conditions:
— condition: state
entity_id: weather.waterfront
state: 'clear'
— condition: state
entity_id: weather.waterfront
state: 'cloudy'
— condition: state
entity_id: weather.waterfront
state: 'partlycloudy'
action:
# Switch the pump on, and let it run for 3 minutes
— service: light.turn_on
entity_id:
— light.water_pump_1
— light.water_pump_2
— delay:
minutes: 3
— service: light.turn_off
entity_id:
— light.water_pump_1
— light.water_pump_2
# Just to be sure, switch it off once more
— delay:
seconds: 30
— service: light.turn_off
entity_id:
— light.water_pump_1
— light.water_pump_2

Источник

Если вам понравилась статья, поделитесь ей в соц.сетях !