Автоматизированная теплица на базе микроконтроллера STM32
От обычной теплицы много мороки: полив, вентиляция, постоянный контроль за посевами. С системой автоматизированного контроля всё, о чем нужно будет заботиться, – о посадке и сборе урожая (при условии отсутствия сорняков и болезней растений).
История проекта
Идея проекта пришла как возможность решить наболевшую проблему – ежегодное неизбежное событие по уходу за посевами в теплице на дачном участке. Старые способы выращивания в теплицах хотя и просты, дешевы и надежны, но отнимают много времени, сил, даже. Однако прогресс и энтузиазм не стоят на месте, поэтому если что-то можно автоматизировать, да и к тому же получить удовольствие от процесса (и пользу от практики программирования), то дальнейшие действия напрашиваются сами собой – автоматизировать эту трудозатратную работу.

За основу были взяты проекты из Интернета по автоматизации обычных теплиц (пример: https://www.hackster.io/LuisLabMO/smart-modular-watering-system-b571ec), микроконтроллер (далее – МК) STM32, а также подключаемые к МК модули для реализации функционала умной теплицы (далее – УТ). Функционал прост, но при этом выполняет большую часть работы по уходу за посевами внутри: периодическое проветривание теплицы за счет измерения количество СО2 в воздухе, полив пересохших участков земли за счет измерения влажности почвы датчиками, а также связь с сервером, на котором будут храниться все данные о технических процессах работы УТ (начало и конец полива, начало и конец проветривания и т.п.), а также осуществляться ручное управление при необходимости. Самая сложная часть – это написание кода для нужного функционирования УТ: все модули должны бесперебойно и точно работать вместе друг с другом – и создания интерфейса для вывода данных.
Описание проекта

В данном подразделе можно привести наши задачи по проекту. В конце каждого пункта будет указано, получилось ли реализовать то, что планировалось.
Модули проекта
- Модуль автономной работы в зависимости от выбранного режим. То есть будет поддерживаться заданный режим температуры, влажности почвы, влажности воздуха. Если какие-либо датчики отсутствуют, то будет задан примерный интервал времени для работы – реализовано;
- Модуль работы с дисплеем. Через дисплей будет производится первоначальная настройка, выбор режима работы, настройка мелких текущих параметров. Во время работы на дисплей будет выводится текущее состояние теплицы (Влажность, температура, давление), а также служебная информация (работает или не работает насос, работу вентиляторов, наличие беспроводной сети). Так же на дисплей в случае необходимости выводятся сообщения об ошибках – реализовано;
- Модуль проводного соединения. Выполнен по средствам виртуального RS232. Модуль общается с основной программой посредствам коротких сообщений. Необходимо будет разработать систему команд (реализовано). Так же через модуль задаются основные настройки. Через модуль можно вручную управлять органами теплицы, например, открыть окно, поменять требуемый режим, изменить желаемую влажность почвы или температуру воздуха – реализовано частично;
- Модуль беспроводного соединения. Выполняется подключением модуля wifi esp-01. Начальная настройка и подключение к беспроводной сети выполняется в основной программе. Микроконтроллер отправляет данные о своём состоянии на облачный сервер – не реализовано, подключен только wifi-модуль;
- Модуль логов. Модуль будет вести лог состояния микроконтроллера и датчиков. Время будет отсчитываться от начала работы микроконтроллера, или по текущему времени, если оно будет настроено – реализовано.
- Модуль связи. Модуль связи будет отвечать за соединение с контроллером и приём и передачу команд. Желательно реализовать модуль в отдельном потоке. Необходимо договорится о системе команд – реализовано частично, модуль связи не работает в отдельном потоке;
- Модуль настройки. Должен предоставлять возможность полной настройки МК. Основные настрой: дата/время, беспроводная сеть, наличие датчиков, настройка основных режимов (влажность, температура, влажность воздуха, уровень CO2) – реализовано;
- Модуль ручного мониторинга и управления. Позволяет отслеживать текущее состояние МК, датчиков. Позволяет в ручном режиме управлять теплицей, например, открыть окно, или включить насос – реализовано;
- Модуль статистики. Выводит накопленные в результате работы МК данные в виде таблицы. Так же, выводить данные в виде графиков (например, график температуры). Так же в модуле необходимо будет отобразить лог возникших ошибок – реализовано в виде вывода таблиц в текстовый документ.
Что осталось не реализовано: подключение сервера и беспроводной связи, создание модели настоящей теплицы: с подачей воды, открытием окон. В будущем планируется довести проект до ума.

Описание, представленного на картинке:
- Дисплейный модуль, подключен к первой шине I2C, частота тактирования 400khz (Меньше он работать не может);
- Модуль термометра, и измерения атмосферного давления, частота тактирования 100khz: такая частота выбрана в связи с тем, что на частоте 400khz, выдаются неверные данные температуры;
- Модуль измерения влажности воздуха, подключен ко второй шине I2С;
- Модуль SD-Card, подключен по шине SPI;
- Модуль часов реального времени, подключен ко второй шине I2C;
- Датчик влажности почвы, подключен к АЦП;
- Сервоприводы sg90 для открытия окна;
- Wi-fi модуль, общение с МК происходит по средствам uart;
- Анализатор газа (углекислого), подключен к АЦП;
- Шина USB.


Пример кода с использованием фреймворка Qt на С++. Данный код представляет собой одну из главных функций из класса mainwindow (главное окно) – обработка полученных данных. Именно здесь заложена система команд по передаче данных. На следующей картинке будет представлены примеры сообщений:

Исходный код можно посмотреть на github, ссылка ниже.
Ссылки
- Пример реальной работающей теплицы: https://www.hackster.io/LuisLabMO/smart-modular-watering-system-b571ec
- Пример теплицы, реализованной силами студентов 14-ой кафедры ГУАП: https://www.youtube.com/watch?v=3LxqKR-fYrI
- Исходный код и скриншоты всего проекта доступны по ссылке: https://github.com/zuwarka/Practise/tree/main/practise02
- Документация по фреймворку Qt: https://doc.qt.io
- Документация по STM32: https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
Команда проекта
- Ермилов Денис – студент группы 1944, product owner, программирование STM32, разработка системы команд, связь микроконтроллера с ПК
- Фердимонов Захар – студент группы 1944, разработчик приложения для ПК, ux/ui-дизайнер, разработка системы команд, принятие данных с микроконтроллера и вывод их в приложение
- Денисенко Федор – студент группы 1944, разработчик приложения для ПК, разработка класса логирования, вывод данных по ошибкам в текстовые файлы, дизайн