Контроллер измерения влажности почвы для вертикальной фермы

Приветствую, Хабр!

Статья о разработке контроллера измерения влажности почвы с передачей данных по Wi‑Fi. Конкретно это устройство было разработано для вертикальной фермы на 64 ячейки.

Вертикальная ферма – обобщённое название высокоавтоматизированного агропромышленного комплекса для выращивания культурных растений методами гидропоники или аэропоники в закрытых помещениях внутри специально спроектированного или адаптированного для этого здания (Материал из Википедии).

Наше устройство сложно назвать высокоавтоматизированным комплексом. В данный момент это лишь часть системы. Помимо влажности почвы выращиваемых растений необходимо заботиться о таких деталях, как: температура, освещение, газовоздушный состав почвы/атмосферы, и многие другие. В ряде случаев важными параметрами являются цветовая температура освещения, влажность воздуха и кислотность почвы. На данном этапе разработки необходимо только измерение влажности с передачей данных на сервер. Остальное реализовано на стороннем оборудовании. Поэтапное внедрение новых ячеек системы (полив, освещение и т.д.) позволит постепенно отладить каждое из звеньев. Следующим этапом планируется разработка системы полива для этой же фермы.

Схема реализована на микроконтроллере STM32F030C6T6 и довольно распространенном Wi-Fi модуле ESP-12E. Конечно, существует масса возможных вариантов реализации данной задумки, но так как контроллер и модуль уже были освоены в других проектах, было решено применять именно эту связку. Я занимался аппаратной частью, все ПО на Алексее, который программировал другой наш совместный проект (https://habr.com/ru/post/411537/). Также есть непосредственно заказчик, который придумывает функционал, тестирует и дает рекомендации. Например, в качестве датчиков влажности применены готовые емкостные, что-то типа:

Рис.1. Датчик влажности почвы
Рис.1. Датчик влажности почвы

Это обусловлено их дешевизной и легкой доступностью. Даже через лаковое покрытие на плате со временем появляется коррозия и датчики являются расходниками (нет смысла производить свои датчики в данный момент, хотя готовое и проверенное решение у нас есть). Задачу гидроизоляции верхней части датчиков тоже на заказчике. Протяжка проводов для подключения происходит на этапе установки фермы.

Наше устройство питается от блока питания 12В. С помощью DC/DC на датчики подается 4,5В. Напряжение выдается на два отдельных разъема, с каждого на 32 ячейки (включением и отключением можно управлять через WEB интерфейс). Для питания контроллера и модуля Wi-Fi стоит LDO.

Для опроса всех каналов задействованы 8 АЦП STM32, сигналы на которые подаются через мультиплексоры CD74HC4051M96. То есть каждый мультиплексор (соответственно один АЦП) получает данные от 8 ячеек.

Рис.2.1. Схема одного мультиплексора
Рис.2.1. Схема одного мультиплексора

Входы каждого мультиплексора заведены на разъемы TJ2-8P8C (RJ-45) позже стали использовать прямые, а не угловые – это упрощает прокладку проводов внутри корпуса. Тесты показали, что данные с датчиков без искажений приходят по витой паре. В другом нашем проекте мы заземляли экран кабелей аналоговых датчиков, так как в противном случае были существенные наводки от внешнего оборудования, но здесь этого не потребовалось.

С ESP все стандартно. Один программный UART используется для связи с микроконтроллером. Второй UART для вывода консольных логов. Две кнопки используются для сброса настроек и обновления прошивки. Для удобства есть индикация светодиодами и буззером.

Рис.2.1. Схема включение ESP
Рис.2.1. Схема включение ESP

Программная часть

Микроконтроллер одновременно переключает все мультиплексоры и читает данные со всех датчиков. Данные копятся в скользящее окне и усредняются. Отправка в ESP происходит по 128 байт. Далее ESP запаковывает все в JSON и отправляет на сервер по MQTT. На сервере вместе живут три сущности: Node-RED, influxdb и Grafana. Мы решили использовать облачный сервер, хотя можно запустить и на своей машине.

Node-RED с брокером MQTT получает данные, парсит их (level->function 1) и отправляет в базу данных influxdb. Тут все настраивается как в детском конструкторе – просто и удобно.

Рис.3. Node-RED
Рис.3. Node-RED

Также у Node-RED есть GUI для настройки системы и отображения, например, статуса. В данный момент он сделан в минималистическом виде. Сюда уходят статусные сообщения и применяются параметры. Параметры летят в ESP (какие каналы передаем) и STM32 (управление питанием и интервал отправки данных).

Рис.4. Dashboard GUI
Рис.4. Dashboard GUI

influxdb позволяет копить (хранить) данные и отображать их на графике в реальном времени. На кривизну графиков не обращайте внимания – мы тестируем отображение данных, постоянно меняем положение датчиков и т.д.  

Рис.5. База данных influxdb
Рис.5. База данных influxdb

В принципе, на этом можно уже и остановиться, но, чтобы все было совсем удобно и красиво используется Grafana. Она забирает данные с сервера и отображает графики. Вообще тут очень емкий функционал, с которым мы еще разбираемся.

Рис.6. Grafana
Рис.6. Grafana

Скорее всего, Алексей еще напишет подробнее по программному обеспечению и настройке в отдельной статье, так как мне не охватить даже половины проделанной по софту работы.

Корпус использовали стандартный, для вывода кабелей датчиков – гермоввод. Контроллер установлен в сухом помещении и герметичный корпус – это лишь предосторожность.

Рис.7. Контроллер в корпусе
Рис.7. Контроллер в корпусе
Рис.8. Вариант с вертикальными разъемами
Рис.8. Вариант с вертикальными разъемами

В данный момент ведется отладка и тестирование изделий. Мы копим данные, эмулируем различные варианты показаний и проводим проверки в реальной почве. Еще предстоит пересчет значений в проценты или относительные единицы с человеческой шкалой, возможно калибровка датчиков перед установкой.

Спасибо за внимание!