27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

Полная автоматизация дробной дистилляции на Raspberry Pi

Форум самогонщиков Автоматика
1 2 3 4 1
Distibot Dad Студент Санкт-Петербург 27 7
10 Дек. 19, 16:55
Добрый день.

Хочу предложить для рассмотрения свой вариант автоматизации.
Оказалось, что принципы, которые я положил в основу проекта уже сформулированы коллегой. Полностью поддерживаю и полагаю, что я их воплотил в железе и софте.
Тут уже ответили, напишу и свою позицию:

1. Автоматика должна быть максимально "умной", чтобы самостоятельно управлять объектом автоматизации и принимать решения по нештатным ситуациям.
2. Вмешательство оператора в работу автоматики необходимо только для её первоначальной настройки и в случае аварии.
3. Контроль со стороны оператора должен быть удалённым (лучше по воздуху, чтобы не тянуть лишних проводов).
4. Автоматика должна собирать статистику своей работы для последующего анализа и более тонкой настройки.

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

Одноплатные же компьютеры с такой задачей справляются уверенно.C-Bell, 01 Янв. 17, 05:28

При некоторой схожести с [Ненавязчивая автоматизация ректификационной установки]
проект самостоятельный с иной идеологией.
Проект называется Дистибот (дисти[лляционный] [ро]бот). Программы написаны на python под Raspberry Pi (исходные тексты на github).
Нагрев осуществляет индукционная плитка, управляемая программно Raspberry Pi.
Аппаратная часть была спроектирована в KiCad (тоже есть на github):
принципиальная схема
distibot2-2.pdf
и разводка печатной платы
pcb.pdf
Для оповещения использую pushbullet и получаю на смартфон сообщения о ходе процесса:
2019-12-10 16-03-48.JPG
2019-12-10 16-03-48. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.


Сценарий работы задаётся текстовым файлом, например для дробной перегонки из СС:
dib-body-from-low-wine.play
В каждой строчке файла:
температура срабатывания, температурный датчик (boiler-куб, condenser-холодильник), выполняемое действие (метод на python), комментарий

Первая строчка сценария
00.0, boiler,    start_process      # старт
означает: при превышении 0°С по датчику куба запустить метод start_process,
в котором включается плитка на максимальную мощность и взводится таймер. Таймер нужен для борьбы с автооключением плитки, он раз в заданный период (у меня 1 час) делает выкл-вкл на 1 секунду.

Вторая строчка
65.0, condenser, start_watch_heads  # включить датчик голов и охлаждение
указывает, что при достижении 65°С по датчику на входе холодильника запустить метод start_process, в котором:
- включается охлаждение холодильника (клапан на пуск водопроводной воды)
- активирует датчик потока на выходе холодильника
- плитка переводится на малую мощность
- активируется датчик старта голов
- блок соленоидных клапанов включает путь до сосуда сбора голов

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

Следующая строчка сценария
94.2, condenser, stop_body          # прекратить отбор тела, переключиться на отбор хвостов
прекращает отбор тела, плитка - на максимум, путь для дистиллята (хвосты) переключается на третью ёмкость.

Последняя строчка сценария
98.5, condenser, finish             # финиш
выключает плитку, питание с блока клапанов, отключает охлаждение.

На выходе системы охлаждения стоит датчик потока, который при отсутствии потока (перекрыли водопровод, обрыв подводки и т.п.) остановит весь процесс.

На протяжении всего процесса собираются данные с датчиков температуры, ведётся протокол действий, отправляются оповещения об этапах на смартфон, на веб-сайте дистибота строятся графики температуры датчиков, отображаются фазы процесса:
- отбор голов
distibot-2019-01-04 13-28-00-heads.png
Distibot-2019-01-04 13-28-00-heads. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.

- отбор тела
distibot-20190104140756-1280x989-body-before-finish.png
Distibot-20190104140756-1280x989-body-before-finish. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.

- отбор хвостов
distibot-20190104142351-1280x989-tails-cooker-restart.png
Distibot-20190104142351-1280x989-tails-cooker-restart. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.

На последнем снимке виден провал на оранжевом графике температуры от датчика холодильника: это сработала автоматика выкл-вкл плитки.

Проект, конечно же, ещё в развитии. Очень надеюсь получить от заинтересовавшихся конструктивную критику и советы.
OldBean Доцент Красноярск 1K 1.4K
Отв.1  11 Дек. 19, 05:36
Проект, конечно же, ещё в развитии. Очень надеюсь получить от заинтересовавшихся конструктивную критику и советы.Distibot Dad, 10 Дек. 19, 16:55
Использование малинки в автоматике - это, конечно, всегда интересно. Но, пока только вопросы :)
1. Какого рода дистилляты планируется получать с помощью предлагаемой автоматики?
2. Насколько критично для этих задач (из вопроса 1) использование (в качестве критериев окончания отбора тела и хвостов) только температуры кипения (в частности, без учета атмосферного давления)?
3. Как регулируется/контролируется мощность нагрева куба (плитки)?
4. Что используется в качестве датчиков потока?
5. "Философский" вопрос: почему для такой задачи (в общем-то, несложной) выбрана именно малинка, а не, например, ESP32 (c MicroPython)? :)

PS
Попросите модератора вставить ссылки на github: https://github.com/vscherbo/distibot и на свой сайт: https://www.distibot.ru/
Distibot Dad Студент Санкт-Петербург 27 7
Отв.2  11 Дек. 19, 17:44
1. Какого рода дистилляты планируется получать с помощью предлагаемой автоматики?
2. Насколько критично для этих задач (из вопроса 1) использование (в качестве критериев окончания отбора тела и хвостов) только температуры кипения (в частности, без учета атмосферного давления)?
3. Как регулируется/контролируется мощность нагрева куба (плитки)?
4. Что используется в качестве датчиков потока?
5. "Философский" вопрос: почему для такой задачи (в общем-то, несложной) выбрана именно малинка, а не, например, ESP32 (c MicroPython)? УлыбающийсяOldBean, 11 Дек. 19, 05:36

Начну с 5-го вопроса:
я - айтишник, не "железячник", поэтому связка малинка+линукс для меня более близка. Я начинал в 2012 пробовать python и мне была интересна ещё одна задача, но на стандартном python, не MicroPython. Хотел, чтобы мне были  доступны все библиотеки/модули через pip/github. Для веб-сервера мне нужен фреймворк (сейчас bottle, хочу перейти на cherrypi).
4. Датчик потока SEN-HZ21WA куплен на алиэкспрессе: крыльчатка с магнитом и датчиком холла
SEN-HZ21WA.jpg
SEN-HZ21WA. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
.
3. Я вывел провода от кнопок индукционной плитки (вкл, увеличить, уменьшить и макс. мощность) и "кликаю" кнопками программно через порты GPIO и оптопары.
2. Т.к. у датчика температуры DS18B20 погрешность 0,5°С (от -10°C до 85°C, а свыше 85°C и того больше - 2°C), то влиянием атмосферного давления на температуру кипения я пренебрёг. Судя по вопросу, у Вас другое отношение к учёту атмосферного давления, рад буду услышать.
1. Дистиллят из сахарной браги, если это имелось в виду в вопросе. Первая перегонка - получение СС, вторая - дробная.
OldBean Доцент Красноярск 1K 1.4K
Отв.3  12 Дек. 19, 04:49
Спасибо за пояснения! С плиткой Вы лихо расправились :)

Насчет атмосферного давления.
Температура кипения зависит не только от состава (здесь - спиртуозности) смеси, но и от давления. В таблице ниже - значения спиртуозностей для Ваших температурных критериев при разном давлении.
Давление, мм.рт.ст.    94.2°         98.5°
760                  7.45 об%    1.56 об%
750                  7.88 об%    1.16 об%
740                  6.29 об%    0.71 об%
730                  5.75 об%    0.24 об%
720                  5.20 об%      -   
Для разделения сахарной бражки всего на три фракции это, наверное, не так критично, но могут быть сюрпризы. Например, с окончанием отбора хвостов - при пониженном атмосферном давлении (да еще, если датчик температуры занижает) можно просто не дождаться окончания отбора хвостов.

Может быть имеет смысл в качестве критериев окончания отбора фракций вместо температуры использовать более четкий критерий - спиртуозность?

PS
У вас в С-П 720 мм.рт.ст, наверное, никогда не было, а у меня (на горе) - запросто :)
makh Профессор Sаmara 2.1K 1K
Отв.4  12 Дек. 19, 06:11
Идею о необходимости датчика давления в такого рода автомате полностью и безоговорочно поддерживаю! Без него сюрпризы гарантированы, раньше или позже.
Distibot Dad Студент Санкт-Петербург 27 7
Отв.5  13 Дек. 19, 17:12
Для разделения сахарной бражки всего на три фракции это, наверное, не так критично, но могут быть сюрпризы. Например, с окончанием отбора хвостов - при пониженном атмосферном давлении (да еще, если датчик температуры занижает) можно просто не дождаться окончания отбора хвостов.OldBean, 12 Дек. 19, 04:49
Прошу обратить внимание, что хозяин дистибота - автор сценария и режиссёр, а дистибот по сценарию поёт и пляшет. Поэтому дистиллятор в гористой местности, зная, что у него сегодня 720 мм рт.ст. напишет в файле сценария (*.play) свои пороговые значения температуры. Это сработает прямо сейчас, в текущей версии.
Пожалуй можно добавить параметр "текущее атмосферное давление" и, не редактируя пороговые значения температуры в файле-сценарии, пересчитывать их.
Можно найти сайт, который отдаёт данные по давлению, и считывать текущее давление в данной местности, тогда в настройку нужно добавить другой параметр - название населённого пункта или координаты (зависит от того, что нужно дать на вход сайту).
Можно и добавить датчик атмосферного давления, но есть и "против": какова погрешность такого датчика? не принесёт ли он больше вреда, чем пользы? Плюс соображение из теории надёжности: чем больше элементов в системе, тем ниже её надёжность (выше вероятность отказа).

Может быть имеет смысл в качестве критериев окончания отбора фракций вместо температуры использовать более четкий критерий - спиртуозность?OldBean, 12 Дек. 19, 04:49
Давайте обсудим, чем измерять спиртуозность. Известен ли Вам "цифровой попугай", т.е. устройство с цифровым выходом для подключения к малинке? Видел тему [Электронный попугай. (Идея)] , но в том устройстве нужно измерять: вес, температуру и давления, каждый датчик привнесёт свои погрешности. Получим ли мы на выходе более точное определение окончания отбора фракций?
Distibot Dad Студент Санкт-Петербург 27 7
Отв.6  13 Дек. 19, 17:17, через 5 мин
Идею о необходимости датчика давления в такого рода автомате полностью и безоговорочно поддерживаю! Без него сюрпризы гарантированы, раньше или позже.makh, 12 Дек. 19, 06:11
Подскажите, пожалуйста, какие сюрпризы могут подстерегать?
На один (определение окончания отбора хвостовой фракции при экстремально низком атмосферном давлении) коллега OldBean уже указал.
makh Профессор Sаmara 2.1K 1K
Отв.7  13 Дек. 19, 19:10
Определение начала отбора хвостовой фракции, например.. При любом давлении, отличном от 760 торр..
А метр полдюймовой гофры паропровода при 4-х КВт вдуваемой мощи добавит в куб порядка полкилопаскаля, например..
А если забьет паропровод сливовой косточкой или рисовой кашей -- автомат не будет ждать когда куб порвет, а выключит нагрев и позовет оператора..
Кроме того, наличие датчика давления позволит мониторить интенсивность брожения, а если бродит в котле, то и автоматизировать начало перегонки, например..
Разного можно еще высказать в пользу наличия датчика.. Точнее, двух датчиков -- абсолютный (барометрический) + дифференциальный, или, ИМХО лучше, два абсолютных.
Рекомендую MS5611 -- фабрично калиброванные, в отсутствие температурного эталона можно по нему калибровать кубовой градусник.
OldBean Доцент Красноярск 1K 1.4K
Отв.8  13 Дек. 19, 19:18, через 9 мин
Ну и я немного попишу :)

зная, что у него сегодня 720 мм рт.ст. напишет в файле сценария (*.play) свои пороговые значения температуры. Это сработает прямо сейчас, в текущей версии.Distibot Dad, 13 Дек. 19, 17:12
Да. Сработает. Но как вычислить новое пороговое значение температуры, зная, что сегодня давление изменилось? Вероятно, по тому самому пороговому значению спиртуозности. Так может быть стОит эту процедуру автоматизировать.
какова погрешность такого датчика?Distibot Dad, 13 Дек. 19, 17:12
У современных датчиков, например, BMP280 точность вполне приличная - на уровне сотни паскалей. См. datasheet.
чем измерять спиртуозность.Distibot Dad, 13 Дек. 19, 17:12
Ее можно вычислять по температуре кипения и давлению в кубе. Есть таблицы, есть интерполяционные формулы, есть алгоритмы для расчета. А если гидродинамическое сопротивление колонны невелико (или вообще колонны нет), то можно ограничиться и просто атмосферным давлением. О чем и была речь.
сообщение удалено
makh Профессор Sаmara 2.1K 1K
Отв.9  15 Дек. 19, 21:58
метр полдюймовой гофры паропровода при 4-х КВт вдуваемой мощи добавит в куб порядка полкилопаскаляmakh, 13 Дек. 19, 19:10
Простите великодушно, соврал с перепугу -- полметра гофры поднимет давление на 1.3КПа:

DSCF4138.jpg
DSCF4138. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
DSCF4141.JPG
DSCF4141. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
Distibot Dad Студент Санкт-Петербург 27 7
Отв.10  16 Дек. 19, 19:42
Простите великодушно, соврал с перепугуmakh, 15 Дек. 19, 21:58
Спасибо за уточнение. Рекомендацию по датчику давления принял, опять же спасибо!
Distibot Dad Студент Санкт-Петербург 27 7
Отв.11  16 Дек. 19, 20:03, через 22 мин
Ее можно вычислять по температуре кипения и давлению в кубе. Есть таблицы, есть интерполяционные формулы, есть алгоритмы для расчета. А если гидродинамическое сопротивление колонны невелико (или вообще колонны нет), то можно ограничиться и просто атмосферным давлением. О чем и была речь.OldBean, 13 Дек. 19, 19:18
Скачал van_Laar_D_mmHg.py, смотрю на вывод программы. Правильно ли я понимаю, что если я хочу при 760 мм рт. ст. прекратить отбор тела на 40% об. в паре, то я должен использовать строчку
Снимок экрана_2019-12-16_19-49-43.png
Снимок экрана_2019-12-16_19-49-43. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
  (помечена во вложении)? Т.е. При температуре 87.8711937927?
Правильно я интерпретирую вывод программы?
Прошу подтвердить или опровергнуть.
Могу ли я использовать исходный код van_Laar_D_mmHg.py в своём проекте?
Distibot Dad Студент Санкт-Петербург 27 7
Отв.12  16 Дек. 19, 20:19, через 16 мин
Т.е. При температуре 87.8711937927?
Правильно я интерпретирую вывод программы?Distibot Dad, 16 Дек. 19, 20:03
Возражу сам себе: температура, при которой следует прекратить отбор тела д.б. около 95°С, никак не 87.
Поясните, пожалуйста.
OldBean Доцент Красноярск 1K 1.4K
Отв.13  17 Дек. 19, 03:00
Могу ли я использовать исходный код van_Laar_D_mmHg.py в своём проекте?Distibot Dad, 16 Дек. 19, 20:03
Используйте. Для этого и было опубликовано.
Поясните, пожалуйста.Distibot Dad, 16 Дек. 19, 20:19
x и y  - это мольные проценты (точнее - мольные доли), а не объемные %.
murzik105 Студент Лиски 30 1
Отв.14  23 Дек. 19, 11:34
Давно жду такую тему, весь инет перекопал, похожего ничего нет. Температура колонны как регулируется (подача воды в колонну)?
Distibot Dad Студент Санкт-Петербург 27 7
Отв.15  23 Дек. 19, 12:03, через 29 мин
murzik105, рад, что тема интересует!
Но я занимаюсь дистилляцией, поэтому колонны нет.
Есть клапан, который при достижении заданного температурного порога включает охлаждение (водопроводную воду в холодильник).
Правда, есть задумка поставить вот такой кран:
2019-12-23 11-57-18.JPG
2019-12-23 11-57-18. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.

2019-12-23 11-57-35.JPG
2019-12-23 11-57-35. Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.

для плавной подачи воды, а то сейчас есть гидроудар, хоть и не сильный.
murzik105 Студент Лиски 30 1
Отв.16  23 Дек. 19, 14:11
Я тоже дистилляцией занимаюсь. У меня дистиллятор с укреплением (пленочная колонна) ХД/4 - 2500ПК. В прошлом году сваял частичную автоматизацию (только отбор) на esp. Там использую игольчатый клапан. Крутит его шаговик по температуре в колонне. С работы приеду фотки скину. Тот кран, что у тебя на фото - шаровой с большим проходом и проворачивается скорее всего каждый раз на 1/4. Так температуру сложно поймать, а игольчатый самое то.

Добавлено через 19мин.:

В телефоне фотки нашел. Сам игольчатый клапан не видно, он внизу коробки стоит.
IMG_20190126_105640.jpg
IMG_20190126_105640.jpg Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
IMG_20190203_201726.jpg
IMG_20190203_201726.jpg Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
IMG_20190204_175850.jpg
IMG_20190204_175850.jpg Полная автоматизация дробной дистилляции на Raspberry Pi. Автоматика.
Jarik_G Студент Мишкино 33 7
Отв.17  24 Дек. 19, 14:26
Приветствую! Заинтересовал проект. Мне тоже ближе именно такой вариант, а не на чистом железе. Хотя там надежнее ИМХО. И у меня сразу вопрос, какую "Малинку" купить? Такая пойдет? Raspberry Pi 3 Model B ARM Cortex-A53 CPU 1.2GHz 64-Bit Quad-Core 1GB RAM 10 Times B+
Distibot Dad Студент Санкт-Петербург 27 7
Отв.18  24 Дек. 19, 14:58, через 32 мин
Jarik_G, у меня до сих пор крутится на Raspberry Pi B, справляется. Веб-сервер нагрузку даёт, но это решается программно, надо переписать.
Я себе купил Zero W, далее буду с ней работать. Model 3, конечно, тоже подойдёт.
Distibot Dad Студент Санкт-Петербург 27 7
Отв.19  24 Дек. 19, 15:02, через 5 мин
Там использую игольчатый клапан. Крутит его шаговик по температуре в колонне.murzik105, 23 Дек. 19, 14:11
А как шаговый с игольчатым сопряжены? Что за железка, муфта какая-то?
Т.к. я колонну не использую, температуру не ловлю, мне и шаровой подойдёт.