Возникла необходимость сделать настройку гроубокса максимально комфортной -- удалённо, без программирования. Все исходные коды доступны по ссылкам в конце статьи. В статье будет упор на программную часть: прошивка гроубокса, графический интерфейс (GUI) для компьютера.

Результат выполнения G-кода не должен зависеть от его реализации, что делает гибким выбор электроники/ПО и переносимость настроек G-кода.

Потенциальное применение:

  • Любительское и промышленное выращивание растений.

  • Лёгкость параметризации условий среды позволяет, предположительно, постепенно (с каждым поколением растения) уменьшать температуру, пока в последних поколениях не останутся растения, приспособленные к климату крайнего севера. Конечно, для такой селекции необходимы десятки и сотни тысяч особей, т. к. некоторые растения имеют низкую выживаемость в таком климате.

Анатомия G-кодов

Подробное описание каждой команды — здесь.

Команды обозначены буквой E вместо G, чтобы не спутать с командами для 3D‑принтеров, но называть их буду по‑прежнему — G‑командами. G‑команды разделены на группы и позволяют:

  • Включать/выключать исполнительные устройства.

  • Снимать показания датчиков.

  • Включать/выключать и настраивать автоматику: циклы освещения и вентиляции, удержание влажности и т. д.

Автоматики - 3 варианта:

  • Циклическая с резким переключением периода (например, для периодического включения вытяжки).

  • Циклическая с плавной сменой периода (для имитации световых рассвета, дня, заката и ночи).

  • Климат-контроль: значение на исполнительном устройстве удерживается между минимальным и максимальным значением на основании показаний с датчика (для поддержания влажности, например).

Электроника

Использую:

  • Arduino Uno - годится для прототипирования и домашнего использования. При промышленном применении могут быть нюансы.

  • датчик влажности и температуры AM2320.

На картинке намерено не показаны схемы ключей и исполнительных устройств, так как они выбираются исходя из ваших потребностей и предпочтений.

Например, у меня такой вариант:

  • симисторный ключ для управления светом;

  • транзисторный ключ + реле для управления увлажнителем;

  • прожекторы и светодиодные лампы с цоколем E27 - белого света. Мощность - 13 Вт максимум;

Вместо ардуинки и прошивки может быть Ваша собственная разработка, главное, чтобы G-код оставался прежним, ради совместимости.

Прошивка

Для ускорения разработки я временно откзался от использования часов реального времени: с каждым инкрементом минут (или при сбрасывании счётчика в ноль при переполнении буфера) проверяется необходимость смены периода у автоматики. Это доставляет некоторые неудобства:

  • При перезапуске микроконтроллера отчёт начнётся заново.

  • Если сохранять текущие минуты в постоянной памяти (EEPROM, Flash), то это выручит только при краткосрочном отключении электроэнергии.

  • У меня световой день настроен на 14 часов, следовательно, для синхронизации дня с реальностью я вынужден запустить гроубокс в 8:00.

Графический интерфейс

Написан на Python с применением PyQt6. Позволяет:

  • Создавать управляющие программы для разных растений и режимов их развития без программирования.

  • Загружать в гроубокс программы из G-кода.

  • Видеть показания датчиков, текущие настройки, текущие периоды и продолжительность.

Отправка команд в гроубокс осуществляется в отдельном потоке, чтобы интерфейс не зависал. При высоком таймауте (у меня 2.2 секунды на чтение) после нажатия на кнопку желательно подождать перед следующим нажатием, иначе может показаться, что интерфейс живёт своей жизнью, пока последовательно не исполнятся все команды.

За выполнение команд в потоке отвечает класс SerialWorkersManager модуля thread_tools.py - через него легко добавлять call-объекты (функции, методы и прочее) на выполнение в поток. Например:

from growbox.thread_tools import SerialWorkersManager
worker_manager = SerialWorkersManager()
worker_manager.add_and_start_worker(result_func, task_func, *args, **kwargs)

Программа устанавливается как пакет для Python:

pip install git+https://github.com/syeysk/sy-cnc-growbox-py

Встраивание программы

Для удобной работы с G-кодом написан модуль gcode_builder . Его можно использовать отдельно от графического интерфейса:

G-code будет выведен в консоль:

from growbox.gcode_builder import GrowboxGCodeBuilder  
  
gcode = GrowboxGCodeBuilder()
gcode.a_white_light.set(255)
gcode.s_temperature.get()

G-code будет отправлен в гроубокс:

from growbox.gcode_builder import GrowboxGCodeBuilder  
from serial.tools.list_ports import comports  
import serial  


port = None  
for port, desc, hwid in comports():  
    print(port)  
    break  
  
with serial.Serial(port, baudrate=9600, timeout=2, write_timeout=0.1) as opened_serial:  
    gcode = GrowboxGCodeBuilder(opened_serial)  
    print(opened_serial.read(100))  
    print(gcode.a_white_light.set(255))  
    print(gcode.s_temperature.get())

Использование программы

Чтобы запустить программу, достаточно в консоле набрать:

growbox

При запуске видим окошко:

Нажмём на "Создать управляющую программу", чтобы создать нашу первую программу из G-команд. Увидим окно с пустыми значениями:

Кнопки с чёрным овалом посередине - это кнопка редактирования (овал - это так отображён карандашик).

В нижнем поле отображаются G-команды, генерируемые при нажатии кнопок. В верхнем блоке можно установить значения исполнительных устройств, которые гроубокс будет устанавливать при старте (сохранение значений в постоянную память пока не реализовано). Так как мы включим автоматику, то оставим значения пустыми:

Включим автоматику, нажав на галочки:

Настроем автоматику "Резкий переход" для вытяжки:

Это значит, что вытяжка будет включаться (значение = 255) на 1 минуту, при этом в выключенном (значение = 0) состоянии будет 719 минут, т. е. почти 12 часов.

Настроем автоматику "Плавный переход" для белого света:

Это значит, что свет будет включаться на 840 минут (14 часов), а выключен - на 600 минут (10 часов). Можно указать длительность рассвета и заката - тогда включение и выключение будет плавным. Это сработает, если у вас свет представлен 12-вольтовыми светодиодами, подключёнными через транзисторный ключ. Если через симистр и светодиодные прожекторы (как у меня), то свет будет мигать вместо плавного перехода.

Если у вас есть дальний красный свет, то через автоматику резкого или плавного перехода можно настроить включение дальнего красного в момент заката, например, а синий свет включать на рассвете. То есть, один вид автоматики можно включать и настраивать для разных исполнительных устройств независимо.

Настроем автоматику "Климат-контроль" для увлажнителя:

Тут всё просто: увлажнитель будет включаться при влажности менее 70% и выключаться при более 75%. Это для экзотических растений, любящих влажный тёплый климат.

Теперь сохраним нашу управляющую программу:

Сохранённый файл можем открыть:

И изменить настройки, если нужно.

Если в окне при запуске пуске нажмём "Подключиться по Serial", увидим окно настройки подключения:

Выберем порт, скорость. Таймауты - в секундах. После нажатия на "ОК":

Увидим уже знакомое окошко, добавились блок с показаниями датчиков и кнопка обновления показаний. Теперь при нажатии кнопок будут отправляться в гроубокс соответствующие команды. Ещё можно загружать в гроубокс ранее составленные файлы с G-кодом. Достаточно нажать на соответсвующий пункт меню и выбрать файл:

G-код, который мы только что составили, соответствует настройкам по-умолчанию в Arduino-прошивке гроубокса.

Вот так просто настраивать гроубокс под нужды разных растений.

О профилях растений

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

Например, шпинат и салат - теневые "терпилы", что означает, что его листья будут увеличиваться при повышенном дальнем красном свете и сниженном белом свете, а огурец и томат - теневые "избегатели", т. е. в этих условия они будут удлинять свои стебли ("вытягиваться"), что уже не есть хорошо. У земляники садовой вообще необходимые для плодошения спектры света различаются не только у ремонтантных/неремонтантых растений, но и разных сортов. Источник

Планы

G-код и прошивка:

  1. Добавить команды для сохранения и получения сторон поверхности гроубокса, чтобы автоматически расчитывать количество помещающихся стаканчиков.

  2. Указывать значения исполнительных устройств не в диапазоне 0-255 (шкала деления напряжения), а в виде единиц измерения (Люмен, градус Цельсия) - это сделает G-код более аппаратно независимым.

Электроника и прошивка:

  1. Добавление WiFi-модуля, чтобы вместо соединения по Serial использовать HTTP.

  2. 1-й вариант ключей для 220V: электромагнитное реле, управляющего каждым проводом (ноль, фаза, земля). Это позволит полностью убрать напряжение с проводов при отключении и избавиться свечения выключенных светодиодов. Закат/рассвет не получится.

  3. 2-й вариант ключей для 220V: ЦАП (внешний у дешёвых микроконтроллеров, внутренний - у подороже) + симистор, чтобы получить регулировку яркости без диммера. Не уверен, что сработает.

  4. Добавление новых исполнительных устройств: подогрев грунта, автоматизация полива, дальний красный и так далее.

  5. Добавить часы реального времени с синхронизацией через Интернет + добавление резервного питания.

  6. Сохранение значений исполнительных устройств в постоянную память, чтобы при отключенной автоматике они устанавливались при запуске гроубокса.

Графический интерфейс:

  1. Окно для построения управляющих программ агротехническими специалистами. Эдакое окно-мастер, в котором указываем фотопериодичность, реакцию на тень, климатическую зону и прочее, на основании чего сгенерируется G-код с дефолтным значениями. После чего их можно будет настроить более тонко.

  2. Сделать элементы управления симпатичными и дружелюбными.

Прочее, посложнее:

  1. Добавление мониторинга роста и здоровья растений.

  2. Учёт состояния окружающей среды вне гроубокса.

  3. Разработать профили растений под конкретный биологический вид и сорт растения.

Посткриптум и наблюдение

Наблюдения:

  • При подключении к UART "наживую" - микроконтроллер перезапускается.

  • Самое главное при выращивании растений: мощный белый свет, умеренный полив тёплой водой, хороший грунт, проветривание помещения. Это даст крупные листья и здоровые растения. Хитрая автоматика же даст комфорт обслуживания, повышенное содержание вторичных метаболитов, "знатные" плоды.

Ссылки

Комментарии (7)


  1. VRyabchevsky
    18.05.2024 16:15
    +2

    Интересное и нетипичное применение g-кодов:)

    UART "наживую" - микроконтроллер перезапускается.

    Это «фишка» ардуиновских плат. Лечится отключением перемычки для перезагрузки. Так же предлагаю рассмотреть подключение отдельного интерфейса usb-uart через ОГР или взять тот же HC-06 (или другой радиомодуль) для организации связи.


  1. garbagecollected
    18.05.2024 16:15
    +7

    Прочитал и ужаснулся.

    Конечно, это здорово, что вы занимаетесь для вас чем-то новым, обдумываете разные идеи для реализации решений бытовых вопросов.

    Но зачем делать то, что уже лет как 5 назад было идеально реализовано в опенсурсе? Да еще и интерфейс под Windows. - Ну а как же, гроверы же у нас 24ч в сутки за компьютером сидят.

    Наверное, лучшее ПО для подключения датчиков к железкам - ESPHome. Есть возможность базового планировщика, подключения к серверу по USB, Wifi, Bluetooth, Zigbee, да хоть UART.

    Есть web-интерфейс. Можно подключать различные кнопки, двух-трех-цветные LCD-дисплеи, чтобы выводить на них графики. Эти же графики могут отображаться и в web-интерфейсе (но, как правило, web-сервером не пользуются, для управления и сбора достаточно api). ESPHome даже может даже подключиться к VPN-серверу через wireguard.

    Если не использовать мощные чипы, отдавать информацию на сервер по принципам mqtt, то на одной батарейке ESPHome может работать месяцами, а то и больше года.

    Но самое главное - всё это можно использовать не писав ни одной строки кода. Все фичи подключаются в прошивку через конфиг на YAML. Просто выбираешь нужные модули, указывыаешь что подключено к какому пину - нажимаешь кнопку в IDE и через секунды прошивка скомпилирована, и даже автоматически заливается в уже работающую плату, например, по Wifi. То есть в прошивке отлично реализован механизм обновления OTA. И, если вы что-то подключили/отключили от платы, можно заливать прошивку в работающее в боевом режиме устройство буквально одной кнопкой или хоткеем в IDE.

    В качество сервера для сбора/анализа данных, с ESPHome идеально сочетается Home Assistant. Тут уже есть богатые возможности управления сотнями реле и обработки датчиков. Написаны сотни дополнений по планировщикам. Есть возможность подключать к автоматизации лунный и солнечный календари. Расчеты коммунальных платежей с учетом получения части электроэнергии от ветряков и солнечных панелей. Всё также работает без единой строки кода на ЯП. Сцены, скрипты и автоматизации в Home Assistant можно создавать/редактировать в визуальном редакторе или в конфигах на YAML. Очень гибридный подход - переключаться между формами интерфейса и YAML можно десятки раз оформляя один модуль. Также, для тех, кому это удобно, можно подключать автоматизации на Node-RED.

    Всё это устанавливается/настраивается за 1-2 дня: свет, полив, дренаж, датчики протечек, дыма, присутствия, сигнализации. Автоматические уведомления в телеграм, пуши или СМСками.

    Все уже есть готовое - берите и пользуйтесь.


    1. syeysk Автор
      18.05.2024 16:15

      Благодарю за ознакомление со статьёй.

      для реализации решений бытовых вопросов.

      В статье указано, что не только бытовых.

      Да еще и интерфейс под Windows. - Ну а как же, гроверы же у нас 24ч в сутки за компьютером сидят.

      Ничто не мешает запусттить на Linux. Это же Python и PyQt6. Настройка делается один раз перед запуском. Не понятно, откуда 24ч в сутки, -- о мониторинге в статье не говорится

      нажимаешь кнопку в IDE и через секунды прошивка скомпилирована, и даже автоматически заливается в уже работающую плату, например, по Wifi

      Настройка должна быть без перепрошивки.

      Благодарю за рекомендацию Home Assistant. Он понадобится при соединении нескольких гроубоксов/теплиц и погодной станции. Да и часы можно будет подключить как отдельное одно устройство, а не как часть в каждом гроубоксе.


      1. garbagecollected
        18.05.2024 16:15

        В статье указано, что не только бытовых.

        Зачем вы придираетесь к словам? Мой посыл был совсем о другом. Этим я хотел сказать, что изобретать велосипеды - это нормально, но зачем изобретать велосипед с колесами от трактора?

        Hidden text

        Да и какие такие не бытовые вопросы вы решили?

        Это же Python и PyQt6.

        Так в этом то и вопрос. Какую необходимость они там решают? У вас на скринах базовый интерфейс. Зачем вам такие тяжелые зависимости. Вы бы еще Unreal Engine 5 туда прикрутили, чтобы ваша поливалка требовала RTX 4080 для запуска.

        У вас задача решается 2-3 кнопками, как в часах Casio, за каким х..м там нужен Qt6, да еще и Windows?

        Но изначально я имел в виду, что гроверы - не компьютерщики, они не сидят за компьютером. У них могут быть под рукой смартфоны, магнитолы, и, возможно у единиц из них будут смарт-часы. Зачем гроверу клиент на Windows? Чем плох тот же браузер или мини-приложение в Телеграме?

        Настройка должна быть без перепрошивки.

        Вы совсем не понимаете о чем я говорю. Параметры вы можете задавать любые без прошивки, но если вы, например, вместо счетчика потока на те же повесите датчик влажности почвы, то прошивать так или иначе придется - как минимум, это два разных модуля pulse_counter и adc.

        А по вашим словам любой компьютер должен продаваться уже со всеми установленными системами и программами. Любая программа должна запускаться без установки.


  1. FireWind
    18.05.2024 16:15
    +1

    Извините, а что такое это самый "гроубокс"? Что то для выращивания растений?


    1. Raegdan
      18.05.2024 16:15
      +1

      Да. Грубо говоря, как умный дом, только умная теплица.


      1. FireWind
        18.05.2024 16:15

        Спасибо!