Статті бази ▾ ← Усі бази знань
Автоматика oCBot
Концепція та філософія12 Ласкаво просимо до екосистеми oCBotЗвідки взявся oCBotІдеологія oCBotСфери призначення та режими роботиПериферійні пристроїСвобода периферіїБазові скрипти автоматизаціїВіртуальні панелі оператораСкладні сценарії та логіка автоматизаціїМультиконтролерністьЗагальний огляд автоматики oCBotАрхітектура та опис
Підтримувані контролери18 Контролер Kincony KC868-A6Підключення живлення й USB на KC868-A6Реле й аналогові виходи KC868-A6Сухі контакти й аналогові входи KC868-A6Шини й роз'єми KC868-A6: RS485, I2C, 1-Wire і рештаЩо зайнято на ESP32 у KC868-A6: карта GPIOЯк зібрати щиток на KC868-A6Як прогнати сценарії без куба: тестовий стенд для KC868-A6Контролер Kincony KC868-A16Підключення живлення й USB на KC868-A16Силові виходи KC868-A16: MOSFET замість релеСухі контакти й аналогові входи KC868-A16Шини й мережа KC868-A16: Ethernet, RS485, I2C, 1-WireЩо зайнято на ESP32 у KC868-A16: карта GPIOЯк зібрати щиток на KC868-A16Як прогнати сценарії без куба: тестовий стенд для KC868-A16Контролер WT32-ETH01Універсальний ESP32 DevKit (Custom)
Каталог периферійних пристроїв9 Датчики температуриДатчики тискуДатчики рівня рідиниДатчики потоку (витратоміри)Виконавчі механізми (Клапани, Насоси, ТЕНи)Датчики середовища (Вологість, Світло, Тиск)Датчики електричні та вагиОргани керування (Кнопки, Енкодери)Електродвигуни та вентилятори
Складання та Перший запуск (DIY)20 Збирання контролера oCBot своїми рукамиПервинне прошивання та запуск контролераШвидке підключення Wi-Fi через BluetoothПідключення ТЕНів та регуляторів потужностіВибір та підключення електромагнітних клапанівКілька плат PCA9685 на одній шиніПін OE — апаратне зняття всіх виходівПлата PCA9685 зблизька — що на ній є і навіщоПлата розширення PCA9685 — 16 каналів ШІМСервопривід і плата розширення — чому це не працюєТвердотілки на платі розширенняПідключення LCD та OLED дисплеїв по шині I2CДвигун і частотний перетворювач: силове підключенняПромисловий протокол RS485 (Modbus RTU)Частотник AE200 (Yingshida) по Modbus: клеми, параметри й регістр завдання частотиЧастотник CFM310 по Modbus: панель RS485, сервісне меню і три регістриЧастотник Ennera FCE по Modbus: налаштування і діагностикаЧастотник без Modbus (900E): пуск реле й оберти 0–10 ВКалібрування ваг на тензодатчиках (HX711)Усунення типових несправностей
Робота з веб-інтерфейсом17 Головна сторінка (Home)Діаграма процесу (Flow)Сценарії автоматизаціїРедактор скриптівПульти оператораДизайнер пультів HMI DesignerПериферіяПлати та шиниЗагальні налаштуванняОбладнанняТочки монтажуНалаштування графіківОновлення прошивкиНалаштування Wi-FiЛогиПорталПро програму
Написання сценаріїв (C++ Скрипти)10 Огляд скриптівМій перший сценарій: Крок за крокомШІМ-відбір: Як налаштувати клапан правильноНалаштування ПІД-регулятора для стабілізаціїАвтоматизація температурних пауз при затиранні солодуСкрипт ББКРегулювання тискуРозрахунок ABV за температурою париСкрипт «Розрахунок ABV»ABV у сценаріях
Безпека, Хмара та Інтеграція5 Система безпеки oCBot: Захист від аварійСтворення хмарного кабінету UA DistilleryЯк опублікувати звіт про перегонкуШеринг кастомних пультів оператора (HMI)Інтеграція з Home Assistant та MQTT
База знаньАвтоматика oCBotНаписання сценаріїв (C++ Скрипти)

ШІМ-відбір: Як налаштувати клапан правильно

Широтно-імпульсна модуляція (ШІМ, англ. PWM) є основним методом регулювання швидкості відбору спирту або дистиляту за допомогою стандартних електромагнітних клапанів. Оскільки клапан може перебувати лише у двох станах, повністю відкритий або повністю закритий, швидкість відбору (літрів на годину) регулюється часовим співвідношенням цих станів.


Принцип роботи ШІМ-відбору#

ШІМ-відбір базується на понятті періоду ШІМ (зазвичай становить від 5 до 20 секунд).

Наприклад, якщо встановлено період ШІМ 10 секунд, то відсоткове значення відбору (швидкість) визначає час відкриття клапана всередині цього вікна:

Часова діаграма ШІМ-відбору: три періоди по 10 секунд для відбору 100, 50 і 10 відсотків — відсоток задає частку часу, коли клапан відкритий


Нотатка

Занадто короткий період ШІМ (наприклад, менше 3 секунд) призводить до швидкого механічного зносу клапана та перегріву його котушки. Занадто довгий період (понад 20 секунд) може спричинити температурні коливання в колоні через циклічне осушення та переповнення насадкової частини дефлегматора. Оптимальним вважається період 10 секунд.


Реалізація ШІМ-відбору в C++ скрипті oCBot#

В автоматиці oCBot ви можете реалізувати логіку ШІМ як програмно через таймери, так і апаратно, якщо клапан налаштований у системі як пристрій із підтримкою ШІМ на рівні драйвера.

Ось приклад коду для програмної реалізації циклу ШІМ-відбору «голів» (швидкість 8%):

#include "OcbScript.h"

class PwmSelectionScenario : public OcbScript {
private:
    int valveId;             // ID клапана відбору
    unsigned long lastPeriodStart;
    const unsigned long periodMs = 10000; // Період ШІМ = 10 секунд (10000 мс)
    float selectionPercent;  // Поточний відсоток відбору (0.0 - 100.0)

public:
    PwmSelectionScenario() {
        valveId = 3;            // ID клапана з меню Периферії
        selectionPercent = 8.0; // Встановлюємо 8% для відбору голів
    }

    void init() override {
        lastPeriodStart = millis();
        setPeripheralValue(valveId, 0.0); // Зачиняємо клапан
        logMessage("Запуск ШІМ-відбору. Швидкість: " + String(selectionPercent) + "%");
    }

    void loop() override {
        unsigned long currentMillis = millis();
        unsigned long timeInPeriod = currentMillis - lastPeriodStart;

        // Якщо поточний період завершився, починаємо новий
        if (timeInPeriod >= periodMs) {
            lastPeriodStart = currentMillis;
            timeInPeriod = 0;
        }

        // Розраховуємо час, протягом якого клапан має бути відкритим
        unsigned long openDuration = (periodMs * selectionPercent) / 100.0;

        if (timeInPeriod < openDuration) {
            // Клапан має бути відкритим
            setPeripheralValue(valveId, 1.0);
        } else {
            // Клапан має бути зачиненим
            setPeripheralValue(valveId, 0.0);
        }
    }
};

Практичні поради щодо калібрування швидкості#

  1. Визначення максимальної пропускної здатності:
    • Повністю відкрийте клапан (100% ШІМ) на 60 секунд. Виміряйте об'єм зібраної рідини (наприклад, отримали 50 мл).
    • Помножте на 60, щоб отримати максимальну швидкість в л/год: 0.050 л * 60 = 3 л/год.
  2. Розрахунок відсотка для відбору «голів»:
    • Якщо вам потрібна швидкість відбору голів 150 мл/год, то необхідний відсоток складе: $$\text{Відсоток} = \left( \frac{150 \text{ мл/год}}{3000 \text{ мл/год}} \right) \times 100% = 5%$$
    • Задайте selectionPercent = 5.0 у вашому сценарії.