В этот раздел я буду складывать описания различных "самодельных" исполнительных устройств и датчиков.
17.11.1 Фракционник
Пару раз, из-за неудачно выбранного начала процесса и оценки времен выполнения этапов ректификации, пришлось вставать среди ночи, для того, чтобы менять приемные емкости. После этого было принято решение автоматизировать, наконец-то, последнюю "ручную" операцию в "ненавязчивой автоматике". Т.е. - сделать фракционник.
Фракционник состоит из двух узлов: 1) распределитель потоков, позволяющий переключать входной поток жидкости по нескольким выходным каналам и 2) контроллер, управляющий переключателем по командам управляющего компьютера. В данной конструкции распределитель переключает каналы при помощи сервопривода. Контроллер сервопривода мы рассматривали раньше. Поэтому данный топик посвящен описанию конструкции самого распределителя потока.
Конструкция распределителя представлена на рисунке ниже. Слева - модели для 3D-печати, справа - готовая конструкция, встроенная в ректификационную установку.
![01_frac_ assembled.JPG](https://cdn.homedistil.ru/th/2101/25/49123.339951.jpg)
Основание распределителя представляет собой блок из нескольких стилизованных воронок, заканчивающихся патрубками, находящимися под основанием. Переключение потока жидкости производится путем вращения лейки, насаженной непосредственно на выходную ось редуктора сервопривода. В такой конструкции фракционника нет чего-то принципиально нового - такого рода устройства известны и неоднократно обсуждались на соответствующих форумах. Описываю ниже подробности лишь для полноты картины. Вдруг какие-то нюансы кому-нибудь да пригодятся. Да самому иногда бывает что-то вспомнить нужно. ;))
Первый этап изготовления распределителя - создание его 3D-модели. Т.е. 3D-моделирование. С него и начнем.
Моделирование
С моделированием у меня совершенно неожиданно возникли проблемы - скончался мой старенький ноутбук. Вероятно - от старости. Я им пользовался нечасто. У меня это был единственный компьютер с Windows и бесплатным Компасом 3D Home. Собственно говоря, именно из-за Компаса я его и держал. Иногда включал, когда нужно было разработать какую-нибудь модель и, соответственные чертежи для мастерской. Но в последний раз ноут напрочь отказался работать. Просто так. Взял и тихо ушел в другой мир. Даже в BIOS отказался пускать и загружаться с флэшки. Ну значит Судьба, решил я, и стал подыскивать в Сети какую-нибудь софтину для 3D-моделирования под Linux. Требования к софтине были следующие: 1) это должно быть бесплатное приложение, нативное под Linux, 2) оно должно позволять создавать параметрические 3D-модели произвольной сложности, 3) поддерживать скрипты на python и 4) уметь генерировать файлы для 3D-печати. Все остальные вещи, связанные с конструкторской документацией, спецификациями, чертежами и т.п., меня мало интересовали.
Через некоторое время поиски увенчались успехом. Я нашел подходящую библиотеку. Фраза в описании: "Это - библиотека для программистов, которым понадобилось 3D" очень заинтриговала меня и я решил познакомиться с ней поближе. Несмотря на некоторую "сыроватость", библиотека оказалась такой изящной, вполне функциональной и достаточной для моих задач, что я решил рассказать о ней уважаемому сообществу. Короче: "Прощай Компас 3D! Да здравствует python!"
Библиотека называется zencad. Разработчик российский. Поэтому есть справочник по библиотеке на родном языке здесь. Есть неплохая, в качестве введения, статья автора на хабре здесь.
Если кратко, то основная идея библиотеки заключается в том, что создаваемая модель целиком описывается на языке python. Это, так называемые, "скриптовые САПР". В данном случае, в левом окне пишешь питоновский скрипт, который описывает модель, а справа видишь результат (модель), которой можно манипулировать (сдвиг, поворот, масштабирование и отражение). Работа идет на уровне твердотельного моделирования (аналогично, как в интерактивных САПР типа Компас, SolidWorks и т.п.), только не "жестами" при помощи мышки, а словами на языке python. Ну типа: сделай параллелепипед с размерами такими-то и такими, ориентированный так-то и так-то. Это будет основание. Прилепи (просто знак +) к нему такой-то конус, повернутый так-то и смещенный туда-то. При помощи цилиндра такого-то высверли в основании отверстие (просто знак -). И так далее. Очень просто и изящно! На языке общего назначения (python). В библиотеке есть возможность экспортировать модель, в частности, в формат stl, который понимают слайсеры. Понятно, что в скрипте доступен весь богатейший арсенал библиотек и модулей python!
В общем - вещь! За неполный вечер, параллельно с изучением самого API библиотеки, я легко "накидал" модель основания фракционника. Скриншот экрана показан на рисунке ниже. Соответствующий скрипт - в раскладушке после рисунка.
![02_frac_base_view_01.png](https://cdn.homedistil.ru/th/2101/25/49123.339952.png)
Скрипт модели основания фракционника
from zencad import *
import math
n = 6 # Количество секций
r = 20 # Внутренний радиус секции
R = 40 # Внешний радиус секции
h = 12 # Высота основания
hsec = 10 # Высота (глубина) секции
d = 2 # Толщина стенок
rp = 3 # Радиус пипки
rpd = 1.5 # Радиус отверстия в пипке
hp = 15 # Высота пипки
mx = 13; my = 24 # Габариты мотора (с небольшим запасом)
moffs = 4.75 # Смещение оси двигателя по Y относительно центра
phi = deg(180/(n-1)) - d/r # Угловой размер ячейки
# Блок ячеек
sec = (cylinder(r=R, h=hsec, yaw=phi) - cylinder(r=r, h=hsec, yaw=phi)).rotZ(-phi/2).moveZ(h-hsec)
wrk = cone(r1=r, r2=0, h=hsec, center=True).rotX(deg(180))
#w1 = (box(R, R, hsec, center=True).moveZ(-hsec/2) - w1).moveX(2*R)
wrk = (box(R, R, hsec, center=True) - wrk).moveX((R+r)/2).moveZ(h-hsec/2)
sec -= wrk
asec = rotate_array(n=n, yaw=deg(180), endpoint=True)(sec)
# Основание
c = cylinder(r=R+d, h = h)
ug1 = box(R+d, R+d, 3*h, center=True).moveY(-(R+d)/2-R*math.sin(phi/2)-d).moveX(-(R+d)/2-(r+mx/2)/2)
ug2 = box(R+d, R+d, 3*h, center=True).moveY(-(R+d)/2-R*math.sin(phi/2)-d).moveX((R+d)/2+(r+mx/2)/2)
cg = box(2*R, R, 3*h, center=True).moveY(-3*R/2-25/R)
g = c - ug1 - ug2 - cg
# Штуцеры
pipka = cylinder(r=rp, h=hp, center=True).moveZ(-hp/2).moveX((R+r)/2)
apipka = rotate_array(n=n, yaw=deg(180), endpoint=True)(pipka)
pd = cylinder(r=rpd, h=2*(hp+h), center=True).moveX((R+r)/2)
apd = rotate_array(n=n, yaw=deg(180), endpoint=True)(pd)
# Отверстие под сервомашинку MG90S
motor = box(mx, my, 2*h, center=True).moveY(-moffs)
d1 = cylinder(r=0.8, h=2*h, center=True).moveY(13.85-moffs)
d2 = cylinder(r=0.8, h=2*h, center=True).moveY(-13.85-moffs)
# Отверстия для крепления основания
kr = cylinder(r=3, h = R, center=True).rotX(deg(90)).movZ(h/2).movY(-R/2 - 13.85 - moffs - 1)
gayka = box(10.5, 5.5, 3*h, center=True).moveY(2.75-R-25/R+5)
model = unify(g + apipka)
model -= asec + apd + motor + d1 + d2 + kr + gayka
model = model.moveZ(-h)
# Последние преобразования (для 3D печати)
#model = model.rotY(deg(180))
model = unify(model)
#model = model.moveZ(hp)
disp(model)
#disp(model - halfspace().rotateX(deg(-90)))
show()
Замечательной особенностью библиотеки zencad является то, что она позволяет строить полностью параметризованные модели 3D-объектов. Это очень удобно для различных изменений модели. Пример модификации основания фракционника показан на следующих рисунках.
![03_frac_base_view_02.png](https://cdn.homedistil.ru/th/2101/25/49123.339953.png)
![04_frac_base_view_03.png](https://cdn.homedistil.ru/th/2101/25/49123.339954.png)
Из рисунков видно, как, изменив всего два параметра (выделены красным), мы сделали модель фракционника уже на 9 фракций (вместо исходных 6) и немного изменили геометрию всех ячеек.
Модель лейки с разрезом представлена на следующих рисунках. Соответствующий скрипт - в раскладушке ниже.
![05_frac_spout_view_01.png](https://cdn.homedistil.ru/th/2101/25/49123.339955.png)
![06_frac_spout_view_02.png](https://cdn.homedistil.ru/th/2101/25/49123.339956.png)
Скрипт модели лейки
from zencad import *
import math
r = 20 # Внутренний радиус секции (см. основание)
R = 40 # Внешний радиус секции (см. основание)
d = 2 # Толщина стенок
hc = 40 # Высота воронки
Rc = 6.5 # Внешний радиус воронки
rc = Rc - d # Внутренний радиус воронки
ra = 2.1 # Внутренний радиус шестерни
ha = 4
Na = 20 # Количество зубьев шестеренки на оси мотора
Rp = 2.5 # Внешний радиус гусака
rp = 1.5 # Внутренний радиус гусака
# Делаем шестеренку двигателя сервы
a = 2*math.pi*ra/Na
Ra = ra + (a/2)*math.tan(deg(60))
wrk = ngon(r=Ra, n=3)
wrk -= box(2*Ra, center=True).moveX(-Ra)
kink = wrk.extrude(ha) # Зубчик шестеренки двигателя сервы
gear = unify(rotate_array(n=Na)(kink)).rotZ(deg(180/Na)) # Сама шестеренка
# Делаем гусака без дырки
points = [(0, 0, 0), ((R+r)/2, 0, -(14+d+1.5-1))] # Опорные точки
tangs = [(1, 0, 0), (0, 0, -1)] # Векторы касательных к точкам
spine = interpolate(points, tangs) # Траектория экструзии гусака
pr1 = circle(r=Rp).rotY(deg(90)) #
pipe = pipe_shell(profiles=[pr1], spine=spine) # Гусак без дырки
pipe = pipe.moveZ(ha+d+rp) # Смещаем гусака по Z в нужное место
# Делаем собственно саму лейку
modela = cylinder(r=Rc, h=hc) - gear + pipe # Заготовка лейки
modela -= cylinder(r=rc, h=hc).moveZ(ha+d) # Основное отверстие
# "Сверлим" дырку в гусаке
pr2 = circle(r=rp).rotY(deg(90))
m2 = pipe_shell(profiles=[pr2], spine=spine).moveZ(ha+d+rp)
modela -= m2
modela = unify(modela)
modela = modela.rotX(deg(180)).moveZ(hc)
#disp(modela - halfspace().rotateX(deg(-90)))
disp(modela)
#disp(modela-halfspace().rotateX(deg(-90)))
show()
Примечание. Конечно же в Сети нашлись и другие скриптовые САПР. В частности, pythonOCC. Эта САПР тоже основана на python и использует такое же геометрическое ядро (OpenCascade). Но zencad показался мне более легким в освоении и вполне пригодным для решения всех моих 3D-задач. Поэтому выбор пал именно на него.
После экспорта моделей деталей фракционника в формат stl, начинается следующий этап их изготовления: выбор подходящего пластика, подготовка моделей к 3D-печати и собственно печать.
Печать деталей
Выбор подходящего пластика
При ректификации обе детали фракционника контактируют с водой, этанолом и относительно небольшими примесями других растворителей (в частности, ацетоном). Поэтому к выбору пластика для 3D-печати нужно отнестись внимательно. Информации по химической стойкости популярных пластиков, используемых в 3D печати, в Сети много. Есть неплохой ресурс по свойствам большого количества пластиков, используемых в 3D печати здесь. В том числе и по химической устойчивости пластиков. Неплохая сводная таблица химической устойчивости есть здесь. Недавно вышла статья, где результаты исследования химической стойкости пластиков представлены в виде удобной диаграммы, показанной на рисунке ниже.
![07_plastic_chemical_resistance.png](https://cdn.homedistil.ru/th/2101/25/49123.339957.png)
В целом, авторы статьи разделили пластики на три группы:
1. Материалы, подверженные разрушению в большинстве исследованных органических растворителей. Это PLA, PLA-Cu, ABS, SBS, Ceramo, Primal-loy и HIPS.
2. Материалы устойчивые к большинству органических растворителей, за исключением лишь некоторых, особо злобных :) К таким материалам относятся фотополимерная смола и PETG.
3. Материалы, стабильные во всех исследованных растворителях. Это PP, PE, POM, Nylon и Nylon-C.
Из диаграмм мы видим, что такие популярные пластики, как PLA и ABS еще как-то могут немного посопротивляться этанолу, но они нестабильны в ацетоне (который присутствует в головах). Вполне доступные пластики PP (полипропилен) и Nylon демонстрируют отличную химическую стойкость, но они весьма сложны в 3D-печати. По крайней мере для моей квалификации ;)) Поэтому мой выбор пал на PETG. С одной стороны PETG доступен и не такой сложный в печати, как нейлон, а с другой стороны, это пищевой пластик, очень стойкий к этанолу и относительно стойкий к ацетону. Поработает фракционник с годик - там и посмотрим насколько будет (или не будет) отличаться коррозия воронок для голов, тела и хвостов.
Подготовка моделей к 3D-печати
После выбора пластика необходимо "порезать" модель на слои, которые будет печатать 3D-принтер и определиться с режимами работы принтера. Такая задача решается в специальных программах - слайсерах. Она сильно зависит не только от типа/марки принтера, но и от партии пластика. Поэтому тонкая подгонка параметров слайсера обычно осуществляется экспериментально на тестовых моделях. На эту тему в Сети очень много инструкций по подбору режимов работы принтера. Поэтому не имеет смысла здесь глубоко углубляться в эту тему. Для ориентировки, просто приведу основные параметры, которые я использовал при печати деталей фракционника (после устранения массы "соплей и волос" и других дефектов на тестовых моделях).
Слайсер: Cura
Пластик: PETG китайской фирмы DEXP
Температура сопла: 230°
Температура стола: 80°
Скорость: 25 мм/сек
Откат: 3 мм
Скорость отката: 85 мм/сек
Охлаждение: 100%
Поддержки: от стола
Угол нависания: 60°
Шаблон: Крест
Плотность поддержек: 25%
Печать
Ну про саму печать рассказывать особо нечего. Она долгая и скучная... В результате получились вот такие детали фракционника:
![08_frac_parts.JPG](https://cdn.homedistil.ru/th/2101/25/49123.339958.jpg)
Сборка фракционника тривиальна. Единственный нюанс при креплении лейки: поскольку винт, вкручиваемый в ось сервопривода, в данной конструкции не используется, желательно скрепить лейку с осью сервы маленькой капелькой суперклея.
Вернуться к оглавлению