Автоматизированная гидропоника с автоматической корректировкой параметров.
Введение
Напомним, что мы уже разрабатывали автоматизированную гидропонику для домашнего использования. Сегодня мы рассмотрим ещё один вариант конструкции, и создадим систему интернета вещей: данные о параметрах питательного раствора и состоянии системы будут отправляться в облачный сервис, где можно в режиме реального времени отслеживать их изменение и корректировать значения, которые система должна поддерживать. Поддержание кислотности и насыщенности питательного раствора, а также долив чистой воды, будет производиться автоматически.
Если вы впервые работаете с контроллером Piranha ESP-32, ознакомьтесь с нашей инструкцией. Также, если вы впервые работаете в среде Arduino IDE, вам поможет статья. Мы постарались описать процесс сборки максимально подробно и дать все необходимые ссылки, чтобы вы могли повторить данный проект, даже если у вас нет опыта программирования.
Видео
Нам понадобится
Обращаем внимание, что о том, как собрать модули долива компонентов, мы написали в отдельной статье. Необходимые материалы для их сборки приведены там же.
Если определённый функционал системы вам не нужен, некоторое из элементов можно не использовать. При этом, код либо останется без изменений, либо необходимо будет указать используемые модули в начале скетча. Подробнее читайте далее.
Основной блок (на базе Piranha ESP-32)
- 1х Piranha ESP-32
- 1х I2C Силовой ключ (P или N-канал)
- 2х I2C Реле (2 канала)
- 1х I2C Hub
- 1х 4-проводной шлейф «мама-мама»
- 1х Датчик кислотности жидкости (pH-метр)
- 1х Солемер для воды с щупом TDS, EC-метр
- 1х Pull Switch UP/DOWN
- 1х Светодиод 10мм — RGB
- 1х Провод «Мама — Мама» (2 провода)
- 1х Провод «Папа — Мама» (2 провода)
- 1х Твердотельное реле
- 3х Датчик уровня воды (у нас угловой)
- 1х Источник питания 12В, ток зависит от мощности вашей установки (у нас на 10А)
- 1х Понижающий DC-DC Преобразователь LM2596
- 2x Гнездо USB A (самосборное)
- 1х Вилка USB A (самосборная)
- 3x Винты (например, М3х6, порядка 30 штук)
- 2х Стойка М3*6 Nylon-black
- 2х Стойка М3*20 Nylon-black
- nx Провод для соединения силовой электроники, например, силиконовый 24AWG
- Светодиодная лента (фитолента) 12В
- 1х Циркуляционный насос (у нас аквариумный, 220В, 11Вт)
- Вам может понадобиться набор DuPont разъемов 2.54мм для подключения уровнемеров, силиконовый провод 24AWG и/или другой провод для их подключения
- Сетевая вилка, сетевые провода, крепёж, стяжки
Также помните про конструктивные элементы: мы использовали алюминиевый профиль, контейнеры, горшки, шланг и штуцеры для него.
Принцип работы
В основе установки — управляющий блок на основе Piranha ESP-32, к которому подключены датчики и исполнительные механизмы. Контроллер, благодаря встроенному модулю Wifi, подключается к интернету и получает от панели управления необходимые настройки и отправляет на неё показатели кислотности, концентрации, расхода электроэнергии, число прошедших дней с момента посадка.
Вторая часть системы — модули долива. Это самостоятельные устройства со своим контроллером, которые по команде от управляющего контроллера включатся на долив жидкости (кислоты, щёлочи, концентрата А, В, или чистой воды). Таким образом производится автоматическая регулировка параметров питательного раствора. В нашей системе мы используем пять модулей долива, однако, если вам не нужен какой-либо из этих модулей, его можно не ставить, при этом скетч редактировать не нужно.
Измерение параметров питательно раствора производится каждые пол часа: pH в 0 минут каждого часа, и ppm в 30 минут каждого часа. При запуск измерения вручную через панель ioControl оба параметра измеряются одновременно. При отклонении параметров от заданного диапазона, включается автоматическая корректировка с помощью модулей долива.
Работа модулей долива
Модули долива могут работать как в режиме дозирования порции (по времени или по объёму жидкости), так и в режиме прямого долива (пока есть управляющий сигнал). Модуль начинает подачу жидкости, когда получает управляющий сигнал от главного контроллера, или при нажатии кнопки.
- Если кнопка нажата кратковременно, то происходит подача порции. Размер порции и способ её измерения задаётся в коде программы модуля долива. Например, можно установить время подачи 2 секунды, или, например, объём подачи 20мл. Задание объёма возможно в случае, если установлен расходомер. Соответственно, если вы не собираетесь использовать задание порции по расходу, расходомер можно не ставить.
- Если кнопка удерживается, то происходит подача жидкости до момента, пока кнопка не будет отпущена.
Аналогично модуль долива работает и с сигналом от управляющего контроллера. При этом стоит отметить, что в случае, если будет превышено установленное время работы модуля, он отключится и светодиод сообщит об ошибке (см. раздел «Режимы защиты и световой индикации»).
Схема управляющего контроллера
Перед сборкой установите модулям I2C необходимые адреса (раздел адресации устройств I2C)
Перед сборкой настройте напряжение 5В на выходе понижающего преобразователя!
Обратите внимание, что устройства I2C могут подключаться к шине I2C в любые колодки, главное соблюдать полярность. Например, на схеме видим, что модуль реле подключен к модулю силовых ключей. Его можно было бы подключить и к I2C Hub’у, если бы так было удобнее.
Также возможно подключение щупа TDS-метра через реле (вместо двух реле для подключения самого модуля).
Подробное описание подключения элементов
Вывод модуля | Подключается к. |
IN+ | + 12В |
IN- | — 12В |
OUT+ | Vcc (красная колодка) Piranha ESP-32 |
OUT- | GND (черная колодка) Piranha ESP-32 |
Вывод модуля | Вывод Piranha ESP-32 |
B | 1 |
GND | GND (черная колодка) |
V | Vcc (красная колодка) |
R | 13 |
G | 12 |
Pull Switch UP/DOWN (модуль подтяжки для уровнемеров)
Вывод модуля | Вывод Piranha ESP-32 |
1 | 14 |
GND | GND (черная колодка) |
V | Vcc (красная колодка) |
2 | 15 |
3 | 26 |
Нижний уровнемер (полярности нет)
Вывод модуля | Колодка модуля подтяжки для уровнемеров |
1 | 3 |
2 | G |
Средний уровнемер (полярности нет)
Вывод модуля | Колодка модуля подтяжки для уровнемеров |
1 | 2 |
2 | G |
Верхний уровнемер (полярности нет)
Вывод модуля | Колодка модуля подтяжки для уровнемеров |
1 | 1 |
2 | G |
Модули долива (подключаются к колодке GVS)
Модуль | Колодка Piranha ESP-32 |
pH Down | 17 |
pH Up | 16 |
Концентрат А | 23 |
Концентрат В | 18 |
Вода | 19 |
Вывод модуля | Вывод Piranha ESP-32 |
G | GND (черная колодка) |
V | Vcc (красная колодка) |
S | 25 |
Циркуляционный насос подключается к сети 220В через твердотельное реле.
Вывод | Вывод Piranha ESP-32 |
GND | GND |
Vcc | +5V |
SCL | SCL |
SDA | SDA |
pH-метр, модуль силовых ключей, модуль реле
Вывод модуля | Вывод I2C Hub |
GND | GND |
Vcc | +5V |
SCL | SCL |
SDA | SDA |
Вывод модуля | Вывод I2C Hub или модуля реле |
GND | NO канала 1 реле 1 |
Vcc | NO канала 2 реле 1 |
SCL | SCL канала 1 реле 2 |
SDA | SDA канала 2 реле 2 |
Также на модуле реле 1 соединить:
GND | K1 (канал 1) |
Vcc | K2 (канал 2) |
Также на модуле реле 2 соединить:
SCL | K1 (канал 1) |
SDA | K2 (канал 2) |
Особенности схемы
1) TDS-метр, как и прочие устройства I2C, подключается к шине I2C. Однако, для устранения влияния pH-метра на работу TDS-метра, последний включен через реле. Во время измерения контакты реле замкнутся, на TDS-метр подастся напряжение и произойдет измерение.
Как мы говори, некоторые модули можно не ставить. Например, если вы используете только pH-метр или только TDS-метр, то модуль реле можно не ставить, а TDS-метр подключить напрямую к шине I2C (просто шлейфом к I2C Hub’у).
2) Обратите внимание, что на модуле подтяжки переключатель подтяжки находится в положении «UP».
3) Обратите внимание, что на модуле двухканального реле переключатель питания находится в положении «Vcc», т.е. питание реле будет производиться не от внешнего источника питания, а от шины I2C.
4) Модуль силовых ключей содержит 4 канала управления. При большой мощности светодиодных лент мы рекомендуем соединить каналы параллельно, или подключить светодиодную ленту частями, к разным накалам. Это позволит уменьшить нагрузку на силовые ключи.
5) Также мы снимаем таймлапс на Raspberry Pi, поэтому дополнительно к выходу понижающего преобразователя 5В мы подключили еще два USB гнезда. Так можно удобно подключать устройства USB при необходимости.
Установка библиотек
Скачайте и установите библиотеки, указанные ниже. Они понадобятся для установки I2C аресов модулей и для работы скетча. Вам может пригодиться инструкция по установке библиотек.
Перечень библиотек:
Адресация устройств I2C
Для устройств I2C перед началом сборки необходимо задать адреса:
Модуль | Адрес |
Модуль силовых ключей | 0x09 |
pH-метр | 0x0A |
TDS/EC-метр | 0x0B |
Двухканальное реле (разрыв GND и Vcc TDS-метра) | 0x0C |
Двухканальное реле (разрыв SCL и SDA TDS-метра) | 0x0D |
Также у нас в скетче вы можете видеть ещё одно реле с адресом 0x0E. Оно необходимо для коммутации 220В освещения. Вы можете обойтись без него (редактировать код не нужно) или использовать его для включения ламп освещения.
Для изменения адресов вы можете воспользоваться установщиком адресов, или изменить адреса с помощью любого контроллера.
1) Установите библиотеку iarduino_I2C_Address. Она необходима для установки адресов модулей серии I2C-flash.
2) Подключите модуль, у которого хотите изменить адрес, к имеющемуся у вас контроллеру. Если контроллер имеет колодку I2C, то подключаемся к ней напрямую. Если нет (на рисунке это Arduino Nano), то подключаемся к выводам A4 и A5 (см. рисунок).
3) Загрузите в контроллер следующий скетч, указав в третьей строке адрес, который необходимо установить. Не забудьте перед загрузкой выбрать используемый контроллер (статья для начинающих).
Если открыть монитор порта, то можно будет увидеть информационные сообщение о ходе процесса.
4) Установите необходимые адреса всем модулям I2C (таблица в начале раздела).
Создание и настройка панели ioControl
Особенность проекта в том, что система имеет выход в интернет, а управлять ей и отслеживать показания с датчиков можно из любой точки мира.
Мы разработали облачный сервис интернета вещей ioControl, в котором и будем работать. Выполнение всех описанных ниже действий не займёт много времени.
1) Выполните действия из раздела «Начало работы». Так вы поймёте принцип работы сервиса и подготовитесь к работе.
2) Создайте панель. Её название должно быть уникальным.
3) Теперь добавляем переменные. О том, как их создавать, подробно написано в разделе «Начало работы». Здесь мы приводим их названия и типы. Если вы хотите задать переменным и другие имена, необходимо будет изменить их название и в скетче.
Название переменной | Тип переменной | Вид карточки |
timeLedOn | Целочисленная | Ввод/вывод значения |
timeLedOff | Целочисленная | Ввод/вывод значения |
alertMode | Текстовая | Вывод значения |
switch | Целочисленная | Кнопка |
totalPower | С плавающей точкой | Вывод значения |
measureMode | Целочисленная | Кнопка |
sensorPH | С плавающей точкой | Вывод значения |
sensorTDS | С плавающей точкой | Вывод значения |
setPh | С плавающей точкой | Ввод/вывод значения |
setTDS | С плавающей точкой | Ввод/вывод значения |
Отлично, панель создана!
Скетч и настройки управляющего контроллера (Piranha ESP-32)
Если вы впервые работаете с контроллером Piranha ESP-32, ознакомьтесь с нашей инструкцией.
Перед загрузкой убедитесь, что к контроллеру не подключены модули ИЛИ на схему подано внешнее питание. Такие меры необходимы, чтобы модули не начали питаться от контроллера, когда вы подключите его к компьютеру. Это может вызвать выход его из стоя.
Желательно отключить все модули от контроллера во время прошивки. Подключённые к некоторым пинам модули могут сделать загрузку кода в контроллер невозможной (из-а подтяжки выводов контроллера шинам питания).
Также напоминаем про необходимость предварительной установки адресов I2C-модулей.
Настройки
Рассмотрим основные настройки, которые требуют комментария:
- io_timeLedOn— время включения освещения. Этот параметр также можно будет изменить из панели облачного сервиса.
- io_timeLedOff— время выключения освещения. Аналогичен предыдущему.
- nightMode— ночной режим: активен или нет. Если режим активен, что в ночное время (интервал времени, когда свет выключен) нормализация параметров не будет производиться. Актуально для домашней установки, чтобы ночью не включались насосы модулей долива.
- delayTime— время задержки перед началом измерения параметров питательного раствора. Измерение должно производиться на неподвижной жидкости, поэтому на время измерения циркуляционный насос выключается. delayTime — это время выдержки паузы после выключения насоса, чтобы жидкость в системе успела остановиться.
- moduleMixInterval— интервал времени между добавлениями компонентов концентрата. Выдержка необходима, чтобы первый добавленный компонент успел распределиться в системе и концентраты не смешались друг с другом.
- minPh, maxPh — минимальное и максимальное значение pH, при которых будет включаться автокорректировка. По сути, это диапазон, в рамках которого следует поддерживать кислотность.
- minTDS, maxTDS — аналогично предыдущему, это значение ppm (концентрация).
- limitValuePhLow, limitValuePhHigh — граничные (аварийные) значения кислотности, при получении которых будем считать, что произошла ошибка и данные не корректны, соответственно нормализовывать раствор не будем.
- limitValueTDSLow, limitValueTDSHigh — аналогично предыдущему, значения концентрации.
Не забудьте указать необходимую информацию для подключения к Wifi: