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

Розрахунок ABV за температурою пари

ABV (Alcohol By Volume) — об'ємна частка спирту, у відсотках. У готовому продукті її міряють ареометром. Але під час перегонки міцність треба знати зараз, у колоні, кожні кілька секунд — щоб автоматика встигала реагувати. Ареометр туди не поставиш: він працює в рідині кімнатної температури, а не в потоці гарячої пари.

oCBot розв'язує це інакше: міцність обчислюється з температури пари й тиску. Жодного окремого «датчика спирту» не потрібно — потрібні давачі, які й так стоять на апараті.


Фізичний принцип#

Суміш спирту й води кипить не при одній температурі, а в діапазоні: чиста вода — 100 °C, чистий етанол — 78,4 °C (за нормального тиску). Проміжні суміші киплять десь між.

Ключове: пара над киплячою сумішшю завжди міцніша за рідину. І ця залежність жорстка — за фіксованого тиску кожній температурі кипіння відповідає рівно один склад рідини й рівно один склад пари. Це і є VLE (Vapor–Liquid Equilibrium, рівновага пара–рідина).

Отже, ланцюжок обчислення такий:

flowchart LR
  T["Температура пари<br/>(верх колони)"] --> C{{"Модель<br/>рівноваги"}}
  P["Тиск у колоні<br/>(надлишковий)"] --> S["Абсолютний тиск"]
  B["Атмосферний тиск<br/>(барометр)"] --> S
  S --> C
  C --> A["ABV пари, %"]
Важливо

Тиск обов'язковий, а не «уточнення». Тиск зсуває всю температурну шкалу: за +10 кПа надлишку вода кипить уже не при 100 °C, а приблизно при 102,7 °C. Якщо цього не врахувати, ті самі 92 °C будуть прочитані як зовсім інша міцність. Тому контролер бере абсолютний тиск: надлишковий у колоні + атмосферний з барометра.


Два алгоритми на вибір#

Прошивка вміє рахувати двома способами. Обидва живуть в одному модулі (rb_abv_algorithms) і викликаються з однаковими аргументами — температура пари, надлишковий тиск колони, атмосферний тиск.

Legacy (спрощений) VLE (розумний)
Значення параметра «Алгоритм» 0 1 (типово)
Модель лінійна інтерполяція справжня рівновага пара–рідина
Обчислень на такт десятки сотні (два вкладені пошуки)
Точність біля 40–70 % ABV груба висока
Коли доречний історична сумісність, звірка зі старими журналами усе нове

Legacy — лінійна інтерполяція#

Найпростіша модель, яку десятиліттями використовують аматорські калькулятори:

  1. За рівнянням Антуана рахуються температури кипіння чистої води й чистого етанолу за поточного тиску.
  2. Виміряна температура пари відкладається на відрізку між ними — лінійно.
  3. Результат множиться на емпіричний коефіцієнт 95,6 (поправка «на реальний апарат»), а тоді обрізається до діапазону 0…100 %.

Модель не знає нічого про неідеальність суміші спирт–вода — а суміш дуже неідеальна (недарма існує азеотроп 95,6 %). Тому Legacy систематично «пливе» в середині діапазону. Лишається в прошивці лише для сумісності.

VLE — рівновага пара–рідина#

Тут рахується справжня термодинаміка бінарної суміші етанол–вода:

  1. Тиск насиченої пари кожного компонента за виміряної температури — рівняння Антуана.
  2. Коефіцієнти активності γ₁, γ₂ — модель Вільсона (двопараметрична, з молярними об'ємами й енергетичними константами для пари етанол–вода). Саме вона описує неідеальність, через яку суміш і поводиться «дивно».
  3. Загальний тиск суміші: P = x₁·γ₁·p₁ˢᵃᵗ + x₂·γ₂·p₂ˢᵃᵗ.
  4. Пошук складу рідини: методом половинного ділення (40 ітерацій) добирається такий склад рідини, який за виміряної температури дає рівно виміряний тиск. Це і є рідина, що зараз кипить у цій точці колони.
  5. Склад пари над нею: y₁ = x₁·γ₁·p₁ˢᵃᵗ / P.
  6. Мольна частка переводиться в об'ємні відсотки через густини й молярні маси компонентів.

Обчислення повністю детерміноване: тих самих трьох чисел на вході завжди достатньо, жодного стану чи історії не зберігається.


Зворотна задача: яка температура відповідає потрібній міцності#

Той самий модуль вміє рахувати й у зворотний бік: цільова ABV + тиск → цільова температура пари. Функція шукає температуру половинним діленням у діапазоні між точками кипіння чистих компонентів (із запасом ±2 °C).

Навіщо це потрібно: керувати процесом за температурою зручніше, ніж за міцністю. Уставка «тримати 40 % ABV» один раз перераховується в «тримати верх колони на 88,3 °C», і далі працює звичайний температурний контур — швидкий, гладкий і зрозумілий оператору за показами того самого давача. Як це застосовано в сценаріях — у статті ABV у сценаріях.


Що саме показує це число#

Нотатка

Розрахунок дає міцність пари в тій точці, де стоїть давач температури — а не міцність продукту в приймальній ємності. Це різні величини. Пара, що дійде до холодильника й сконденсується, дасть приблизно цю міцність; те, що вже накопичилось у банці, — усереднення за весь час відбору.


Межі застосовності#


Далі#