$ 0
en
English
  • hello@colorlib.com

Конструктор автоматики

  • Константин Поляков
  • 0 Comments

Вступление

Термины и сокращения, используемые в статье:

  • МК — микроконтроллер.
  • ЦАП — цифро-аналоговый преобразователь.
  • ШИМ — широтно-импульсная модуляция.
  • Актуатор — тождественно "исполнительное устройство". Например свет, полив.

В Интернете можно найти множество самописных прошивок для автоматизации растениеводства. Все они разрабатывались под нужды авторов, и настройки алгоритмов зашиты непосредственно в прошивку, что делает невозможным их перенастройку "налету", без перепрограммирования.

В моей версии исходного кода алгоритмы настраиваются без перепрограммирования МК. Исходный код разделён на независимые модули. Аппаратная часть тоже разделена на независимые модули. При этом все программные модули допустимо собрать в одну программу и "зашить" в один МК.

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

Преимущества разделения

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

Ускоряется и упрощается отладка отдельных модулей, т. к. для их запуска достаточно МК с малым объёмом памяти, процесс компиляции и перепрограммирования для которых очень быстр.

Исходный код написан на C++ и не привязан к Arduino, что делает возможным компиляцию и запуск на МК разных архитектур и практически любом компьютере с Linux, WASI и WASM.

Несложно вынести модуль актуаторов на отдельный МК или разбить код по процессорным ядрам, чтобы применить ШИМ или диммирование для плавного включения/выключения нагрузки. Так плавный пуск не будет влиять на выполнение расписания.

Ядро

Исходный код: Github

Ядро - это модуль, выполняющий 4 вида расписания:

  • цикл с резким переключением
  • цикл с плавным переключением
  • климат-контроль
  • таймер

Ядро устанавливает нужное значение на нужном актуаторе в нужное время. Ядро не знает ничего о датчиках и актуаторах, кроме их номера и значения.

  • 2. Принимает на вход настройки расписания (часов и автоматики).
  • 4. При изменении состояния актуаторов сообщает об этом во вне
  • 5. Считывание настройек происходит с общей памяти, поэтому внешние устройства не отвлекают ядро от выполнения программы.

Аппаратный модуль Ядро связан с аппаратными модулями Датчики и Актуаторы через I2C в большинстве случаев.

Время

Модуль времени даёт количество секунд, прошедших от начала дня. На основании чего Ядро расчитывает расписание.

Пока доступен один источник времени - время, прошедшее с момента включения МК.

Датчики

Исходный код: Github

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

Актуаторы (Исполнительные устройства)

Исходный код: Github

Модуль актуатора хранит установленное на актуаторе значение, позволяя избегать фактической установки того же значения.

Варианты исполнения:

Прослойка меж ядром и ключом:

Устройство Соединение с ядром
Расширитель HC595 shift
Микроконтроллер I2C
Расширитель HC595 + МК I2C
LoRaWan I2C. С ключами соединяется через радиоканал

Ключи:

Устройство Коммутация Примечание
Симистр Переменные 220V Можно диммировать, если в качестве прослойки - МК. Либо попробовать встроенный/внешний ЦАП (не ШИМ).
Транзистор полевой/биполярный Постоянные 12V или 5V Плавная регулировка через ШИМ, если в качестве прослойки - микроконтроллер, иначе - внутренний/внешний ЦАП
Реле Переменные 220V Только вкл/выкл. Плавная регулировка невозможноа

Дисплей

Исходный код: Github

G-код

Исходный код: Github

Модуль открывает связь с устройством из внешнего мира через команды. Это позволяет конфигурировать устройство, вводя G-команды, например через всем знакомый UART. Скоро появятся модули для связи через Интернет.

Сам модуль взят из проекта Marlin - прошивки для 3D-принтера. Внесены небольшие изменения, позволяющие пользователям добавлять собственные коды без изменения модуля.

Вспомогательные модули

Исходный код: Github

  • Category: Концепция
  • Tags: информация