В этот раздел я буду складывать описания различных "самодельных" исполнительных устройств и датчиков.
17.11.1 Фракционник
Пару раз, из-за неудачно выбранного начала процесса и оценки времен выполнения этапов ректификации, пришлось вставать среди ночи, для того, чтобы менять приемные емкости. После этого было принято решение автоматизировать, наконец-то, последнюю "ручную" операцию в "ненавязчивой автоматике". Т.е. - сделать фракционник.
Фракционник состоит из двух узлов: 1) распределитель потоков, позволяющий переключать входной поток жидкости по нескольким выходным каналам и 2) контроллер, управляющий переключателем по командам управляющего компьютера. В данной конструкции распределитель переключает каналы при помощи сервопривода. Контроллер сервопривода мы рассматривали раньше. Поэтому данный топик посвящен описанию конструкции самого распределителя потока.
Конструкция распределителя представлена на рисунке ниже. Слева - модели для 3D-печати, справа - готовая конструкция, встроенная в ректификационную установку.
Основание распределителя представляет собой блок из нескольких стилизованных воронок, заканчивающихся патрубками, находящимися под основанием. Переключение потока жидкости производится путем вращения лейки, насаженной непосредственно на выходную ось редуктора сервопривода. В такой конструкции фракционника нет чего-то принципиально нового - такого рода устройства известны и неоднократно обсуждались на соответствующих форумах. Описываю ниже подробности лишь для полноты картины. Вдруг какие-то нюансы кому-нибудь да пригодятся. Да самому иногда бывает что-то вспомнить нужно. ;))
Первый этап изготовления распределителя - создание его 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 библиотеки, я легко "накидал" модель основания фракционника. Скриншот экрана показан на рисунке ниже. Соответствующий скрипт - в раскладушке после рисунка.
Скрипт модели основания фракционника
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-объектов. Это очень удобно для различных изменений модели. Пример модификации основания фракционника показан на следующих рисунках.
Из рисунков видно, как, изменив всего два параметра (выделены красным), мы сделали модель фракционника уже на 9 фракций (вместо исходных 6) и немного изменили геометрию всех ячеек.
Модель лейки с разрезом представлена на следующих рисунках. Соответствующий скрипт - в раскладушке ниже.
Скрипт модели лейки
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 печати здесь. В том числе и по химической устойчивости пластиков. Неплохая сводная таблица химической устойчивости есть здесь. Недавно вышла статья, где результаты исследования химической стойкости пластиков представлены в виде удобной диаграммы, показанной на рисунке ниже.
В целом, авторы статьи разделили пластики на три группы:
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%
Печать
Ну про саму печать рассказывать особо нечего. Она долгая и скучная... В результате получились вот такие детали фракционника:
Сборка фракционника тривиальна. Единственный нюанс при креплении лейки: поскольку винт, вкручиваемый в ось сервопривода, в данной конструкции не используется, желательно скрепить лейку с осью сервы маленькой капелькой суперклея.
Вернуться к оглавлению