RTP DesportoMiguel Oliveira abandona segunda corrida de Superbikes em Cremona após quedaESPN DeportesCruz Azul rescata el empate de último minuto ante TolucaPunchNollywood actor Rykardo Agbor survives car crashDaily MaverickDOWN TO EARTH: Eleven-man Wallabies resist Springboks’ rearguard to secure famous Perth winESPNWhat we know through CFB's Week 4, plus Kamario Taylor's rise and Michigan's karmaInquirer18 dengue deaths reported in Camarines SurThe Jerusalem PostOver one-quarter of Muslim Americans blame Israel, Zionists for 9/11, survey findsSky TG24Milano Fashion Week, la sfilata di Giorgio Armani Primavera/Estate 2027. FOTOLa TerceraTemblor hoy, domingo 27 de septiembre en Chile: consulta epicentro y magnitudWirtualna PolskaZamalowali rosyjskie miasta na znakach. Łotewska policja bada sprawęRai NewsNicolò Bulega campione del mondo Superbike: un italiano in vetta 14 anni dopo Max BiaggiSouth China Morning PostAfghanistan says 28 dead fighters came from Pakistan as Islamabad denies ties
The Daily Newsstand · Free, Always
Sunday, September 27, 2026

Перистальтический насос‑дозатор на 3D‑принтере для лабораторной установки водоподготовки

Translate

Собираю электронику насоса‑дозатора

Я занимаюсь промышленной водоподготовкой. Сейчас у нас исследовательский проект: изучаем методы предочистки высокоминерализованной воды. Пробуем разные коагулянты и флокулянты, меняем дозы и градиенты перемешивания. Каждый режим держим около двух часов, потом отбираем пробы и сравниваем результат.

Для такого исследования нужен точный перистальтический насос‑дозатор на маленький расход. Реагенты должны поступать в воду непрерывно, с заданной дозой в мг/л, от 1 до 13 мл/мин. Если подача плавает, непонятно, что сработало — реагент или случайность. Реагентов два — коагулянт и флокулянт, значит, нужно два канала.

Подходящий готовый насос я не нашёл и спроектировал свой. Ниже — как он устроен, где я ошибся и как он работает сейчас.

Насос‑дозатор ВАКО‑ДП1: печатная головка на моторе NEMA17, корпус с электроникой

Насос‑дозатор на лабораторном столе, вид сбоку

Лицевая панель: тумблер, индикатор «Работа», головка

Насос‑дозатор перед штативом с бюретками

Один насос — один канал, корпуса ставятся друг на друга

Требования

  • два канала, подача 1–13 мл/мин на канал;

  • уставка в мг/л: я знаю дозу реагента и расход воды, а мл/мин пусть считает насос;

  • калибровка на месте, без лаборатории метрологии;

  • с раствором контактирует только трубка — реагенты агрессивные.

Готовые насосы: дорого или не то

Лабораторный перистальтический дозатор стоит около 24 000 ₽ за канал. Два канала — 48 000 ₽. За эти деньги насос качает мл/мин, а пересчёт из мг/л — на отдельном контроллере или на калькуляторе с ручной уставкой после каждого изменения расхода.

Доступные дозаторы — аквариумные и бытовые — работают по таймеру: включаются по расписанию, быстро выдают порцию и стоят до следующего включения. Мне нужна непрерывная подача с постоянной скоростью 0,5–30 мл/мин: реагент поступает в поток воды всё время, а не порциями раз в час. Для этого нужен шаговый мотор — у него подача жёстко привязана к частоте шагов.

Итого: готовые насосы либо дороги, либо не умеют держать около 1 мл/мин, дозировать в мг/л и работать в два канала.

Открытые проекты: попробовал несколько — не завелись

На Thingiverse и GitHub десятки проектов перистальтических насосов для 3D‑печати. Я напечатал и собрал несколько. Ни один не заработал на моей трубке и моих подачах без переделки: где‑то конструкция рассчитана на другую трубку, где‑то пережим задан жёстко.

Из одного проекта я взял порядок укладки: сначала трубка, потом ротор. Остальное спроектировал сам: головку, в которой пережим меняется сменной деталью, а не переделкой всей модели.

Головка: ролики, дуга и шаг

Головка в разнесённом виде: крышка, ротор с тремя роликами, вкладыш‑калибр, корпус головки, мотор NEMA17

Головка без крышки качает воду. Блок питания показывает 12 В и 0,36 А — около 4,3 Вт

Анимация: ролики перегоняют порции раствора от входа к выходу

Анимация головки в изометрии

Головка укладывается в габарит NEMA17: 42,3 × 42,3 мм, высота 26,5 мм вместе с крышкой. Корпус садится на центрирующий выступ мотора Ø22 мм. Модель параметрическая, в OpenSCAD: все размеры вынесены в переменные, в конце файла — самопроверка зазоров и толщин стенок.

Ротор. Три ролика, каждый — два подшипника 623 (3 × 10 × 4) стопкой на винте M3. Получается ролик Ø10 × 8 мм. Ролики катятся по трубке, а не трут её: трубка изнашивается медленнее, момент на валу меньше. Оси роликов на радиусе 8,5 мм.

Дорожка. Трубка — силикон 2 × 4 мм. Ось пережатой трубки идёт по радиусу 14,35 мм. Длина окружности — 90,2 мм. Теоретический объём за оборот:

V = π · r² · L = π · (1 мм)² · 90,2 мм ≈ 283 мм³ = 0,283 мл

Реальная перистальтика даёт меньше теории: трубка не распрямляется мгновенно, часть объёма остаётся в зоне пережима. Поэтому реальный коэффициент даёт только калибровка. Стартовое значение в прошивке — 0,25 мл/об.

Пульсация. Три ролика — три порции за оборот. Каждая порция — объём трубки между соседними роликами, треть окружности: не больше 0,095 мл.

Почему пережатая дуга больше шага роликов

Вкладыш охватывает ротор на 180°. Полностью трубка пережата на 140°: остальное уходит на плавный заход трубки под ролик и выход из‑под него.

Ролики стоят через 120°. Раз пережатая дуга 140° больше шага 120°, в любой момент хотя бы один ролик находится в зоне полного пережима. Путь с входа на выход всегда закрыт. Обратного протока нет, клапаны не нужны.

Это условие проверяйте первым в любой перистальтической головке. Если пережатая дуга меньше шага роликов, в какой‑то фазе оборота трубка открыта насквозь, и насос течёт назад. Оговорку я нашёл только на установке: условие работает, только если ролик действительно закрывает трубку. Об этом ниже.

Видео работы насоса, приложения и установки — на странице проекта: dozator.sergey‑kireev.ru

Сменный вкладыш‑калибр

Вкладыш‑калибр: полукольцо с канавкой под трубку, номер — насечками на кромке

Зазор между роликом и дном канавки задаёт вкладыш — полукольцо, которое вставляется в карман корпуса. Название вкладыша — это зазор в мм: G1.70 — зазор 1,70 мм.

Трубка 2 × 4 при полном смыкании — это две стенки по 1 мм, то есть 2,0 мм. Всё, что меньше, — пережим сверх смыкания:

Вкладыш

Зазор, мм

Пережим

G1.90

1,90

5%

G1.80

1,80

10%

G1.70

1,70

15%

G1.60

1,60

20%

G1.40

1,40

30%

G1.20

1,20

40%

G1.00

1,00

50%

Почему зазор задаёт деталь, а не винт: трубки разных партий отличаются по мягкости и толщине стенки, а печатный корпус имеет разброс около 0,1 мм. Подстроечный винт с пружиной добавляет деталей и люфтов. Вкладыш печатается за 20 минут, весит пару граммов PETG и вынимается двумя винтами M3, вкрученными в отверстия на торце.

Вкладыш сидит в кармане на трёх сминаемых рёбрах: при первой посадке они выбирают люфт. Шпонка на дне кармана не даёт ему провернуться. Номер калибра — насечки на кромке: штангенциркуль, чтобы понять, какой стоит, не нужен.

Замена трубки за минуту

Замена трубки: снять крышку, снять ротор, уложить трубку, вернуть ротор и крышку

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

Порядок замены:

  1. Снять крышку — четыре винта.

  2. Снять ротор с вала рукой.

  3. Уложить трубку в канавку. Без ротора она ложится свободно по всей дуге, видно, что села до дна.

  4. Надеть ротор и провернуть рукой 2–3 оборота — ролики сами дожмут трубку в канавку.

  5. Поставить крышку.

Это и есть идея из открытого проекта: сначала трубка, потом ротор. Если заводить трубку прокруткой ротора, она трётся о торцы подшипников.

Печать

Все детали печатаются из PETG без поддержек на обычном принтере с соплом 0,4 мм. Головка — около 47 г пластика и около двух часов печати. Корпус с электроникой — ещё около 150 г. PLA не подходит: под постоянным прижимом трубки он ползёт.

Печать лицевой панели корпуса из PETG

Рабочее место: насосы в сборке

Первая сборка

Первый насос я собрал на головке v1.2, с первой версией прошивки и приложения.

Прототип на столе: корпус, мотор с головкой, плата ESP32 и драйвер на печатной площадке

Отладка: насос качает воду из стакана, электроника пока снаружи корпуса

Сборка головки — девять шагов, те же картинки лежат в инструкции:

Шаги 1–9: от нижней пластины ротора до собранной головки. Снаружи — четыре винта заподлицо и две трубки

Электроника: ESP32, TMC2209, NEMA17

Плата‑адаптер: разъём мотора, клемма 12 В, DIP‑переключатели микрошага. От ESP32 — три провода: STEP, DIR, EN

Драйвер TMC2209: вставляется в адаптер, ток мотора — подстроечником

Состав:

  • Мотор NEMA17 17HS4401.

  • Драйвер TMC2209 в автономном режиме, без UART. Микрошаг 1/16 задаётся перемычками: 200 × 16 = 3 200 микрошагов на оборот. Режим StealthChop — без гула шагов.

  • Контроллер ESP32-WROOM-32 на плате расширения.

  • Питание — адаптер 12 В 2 А, насос берёт до 10 Вт.

Ток мотора выставлен подстроечником драйвера: 0,7–0,8 А RMS. По расчёту пиковый момент на валу — не больше 0,08 Н·м, мотор при таком токе даёт 0,25–0,28 Н·м: запас больше трёх раз. Поднимать ток выше не нужно: лишнее тепло уходит через фланец мотора в PETG‑корпус головки.

Корпус 118 × 88 × 99 мм в разнесённом виде

Платы стоят на съёмной задней крышке: электроника собирается на столе и вставляется в корпус целиком

Схема проводки: три провода между ESP32 и драйвером, питание через разъёмы с готовыми проводами. Паять почти нечего

Грабли № 1: выводы, которых нет

Распиновка из моей первой, трёхканальной схемы на эту плату не подошла: у платы расширения часть выводов ESP32 на гребёнки не выведена. Проверил миганием: GPIO 16, 18, 19, 27 и 33 не отзываются, отзываются 4, 17, 25, 26 и 32. Итоговая распиновка: STEP — GPIO25, DIR — GPIO17, EN — GPIO26, светодиод — GPIO4.

Мораль: у китайских плат расширения распиновку проверяйте на живой плате, а не по картинке продавца.

Генерация шагов: аппаратный таймер

Подача перистальтического насоса пропорциональна частоте шагов:

f [Гц] = Q [мл/мин] × K [шагов/мл] / 60

K — калибровочный коэффициент, хранится во флеш‑памяти. Стартовое K = 12 800 шагов/мл: это 3 200 микрошагов на оборот при 0,25 мл/об.

Диапазон частот:

Подача, мл/мин

Частота шагов, Гц

0,5

107

1

213

5

1 067

30

6 400

В первой версии прошивки шаги выдавал ШИМ‑модуль LEDC. Он умеет только целые герцы. На 1 мл/мин нужно 213,3 Гц — округление даёт ошибку подачи. На малых подачах она доходила до 1%, а на 0,1 мл/мин — до 2,5%.

Сейчас шаги генерирует аппаратный таймер ESP32 с тактом 40 МГц, то есть 25 нс. Прерывание переключает ножку STEP, период тревоги — 40 000 000 / (2f) тиков. Для 213,3 Гц это 93 750 тиков, и частота задаётся с ошибкой меньше 0,02% во всём диапазоне.

Второй плюс: шаги считаются прямо в прерывании. Счётчик поданного объёма и калибровка работают по реально выданным шагам, а не по «уставка × время». Разовая доза выдаётся на максимальной скорости — объём считается шагами, скорость на него не влияет.

Приложение в телефоне

Экрана и кнопок на насосе нет. Каждый насос раздаёт свою Wi‑Fi‑сеть. Телефон подключается — и приложение открывается само, как страница авторизации в кафе. Насос можно подключить и к сети лаборатории, тогда он доступен по имени через mDNS. Прошивка обновляется по воздуху.

Приложение написано на React с Tailwind и компонентами shadcn/ui. Сборка — один файл index.html: 450 КБ, в gzip — 130 КБ. Он вшит в прошивку массивом байтов, файловая система не нужна.

Приложение можно пощёлкать прямо в браузере — насос там имитируется: dozator.sergey‑kireev.ru/demo

Режим «Доза»

Режим «Доза»: 5 мг/л при расходе линии 30 л/ч и растворе 5 г/л — насос ставит 0,50 мл/мин

Вводите три числа: дозу реагента в мг/л, расход воды в линии в л/ч и концентрацию раствора в г/л. Насос считает подачу:

Q [мл/мин] = D [мг/л] × Qл [л/ч] / (C [г/л] × 60)

Проверка размерности: мг/л × л/ч = мг/ч; делим на г/л — получаем мл/ч; делим на 60 — мл/мин. Пример со скриншота: 5 × 30 / (5 × 60) = 0,50 мл/мин.

Если результат выходит за 0,1–30 мл/мин, насос уставку не применяет и подсказывает, до какой концентрации развести или укрепить раствор.

Подача ниже 0,5 мл/мин: приложение предлагает развести раствор, чтобы дозирование шло ровно

Ниже 0,5 мл/мин перистальтика подаёт порциями: одна порция — до 0,095 мл, а на таких оборотах порции идут редко. Разбавить раствор и качать больше — точнее, чем делать вид, что насос держит 0,2 мл/мин ровно.

Калибровка мерным цилиндром

Калибровка: быстрая за 1 минуту или точная до 10 минут. Опускаете трубку в цилиндр, вводите объём — насос пересчитывает K

Два режима:

  • Быстрая — ровно 1 минута на 20 мл/мин, в цилиндр набирается около 20 мл.

  • Точная — на текущей рабочей уставке. Длительность — время, за которое накапает 20 мл, но от 1 до 10 минут: на 10 мл/мин — 2 минуты, на 5 — 4, на 2 — 10.

Зачем точная на рабочей уставке: объём за оборот у перистальтики зависит от оборотов. Коэффициент, снятый на 20 мл/мин, на 1 мл/мин ошибается на проценты.

Новая трубка — новая калибровка. Приложение напоминает об этом, когда сбрасываете счётчик наработки трубки.

Что ещё

  • счётчик поданного объёма;

  • счётчик наработки трубки — видно, когда её менять;

  • прокачка линии за 30 секунд;

  • разовая доза заданного объёма;

  • реверс.

API

Всё, что умеет приложение, доступно GET‑запросами с ответом в JSON. Насос можно подключить к автоматике или скрипту на ноутбуке:

/api/status
/api/set?flow=2.5                        # уставка, мл/мин
/api/dosing?on=1&d=5&q=30&c=5            # режим «Доза»: мг/л, л/ч, г/л
/api/run?on=1
/api/dir?rev=1                           # реверс
/api/prime?s=30                          # прокачка
/api/dose?ml=10                          # разовая доза
/api/cal_start  /api/cal_finish?g=  /api/cal_cancel
/api/reset?what=total|tube

Если уставка режима «Доза» выходит за пределы, ответ {"ok":0,"flow":…,"min":…,"max":…} и ничего не меняется.

Грабли № 2: вкладыши, которые не закрывали трубку

Первый комплект вкладышей был G1.60–G1.90, пережим 5–20%. Диапазон я выбрал по расчёту: чем больше пережим, тем быстрее изнашивается трубка и тем больше момент на валу.

На испытаниях вылезли две проблемы:

  1. Ниже 4 мл/мин в цилиндре набиралось меньше уставки.

  2. Когда на дуге оставался один ролик, через трубку проходил воздух.

Второй пункт объяснил первый. Силиконовая трубка оказалась мягче, чем я закладывал. Ни один вкладыш из первого комплекта не пережимал её полностью. Условие «пережатая дуга 140° больше шага 120°» формально выполнялось, но ролик в зоне пережима трубку не закрывал. Пока на дуге два ролика, их двух неполных пережимов хватало. Когда оставался один — появлялся канал, и раствор шёл назад.

Почему страдали именно малые подачи: утечка через неплотный пережим почти не зависит от оборотов. На 10 мл/мин она теряется на фоне подачи. На 1–2 мл/мин она становится заметной долей расхода.

Тогда я напечатал три тугих вкладыша: G1.40, G1.20 и G1.00 — пережим 30, 40 и 50%.

С G1.40 насос ровно подаёт около 1 мл/мин. Воздух больше не проходит. Сейчас G1.40 — стартовый вкладыш для силиконовой трубки, а тугие вкладыши вошли в комплект. Всего их десять, от G1.0 до G1.9.

Выводы:

  • Условие «дуга больше шага» необходимое, но не достаточное. Проверяйте, что ролик действительно закрывает трубку.

  • Каталожная толщина стенки трубки — не повод выбирать пережим по расчёту. Выбирайте по факту, на вашей трубке и вашей подаче.

  • Проверка на столе при 10 мл/мин ничего не говорит о работе на 1 мл/мин. Проверяйте на нижней рабочей подаче.

Два насоса на установке

Насос на установке. Трубка в мерном цилиндре — так проверяю расход

Насос‑дозатор на лабораторном столе перед вытяжным шкафом

Насос‑дозатор на лабораторном оборудовании

Два насоса уже неделю работают на установке по 10–12 часов в день.

  • Коагулянт — технический сульфат алюминия, раствор 12,5 г/л, 5–7,5 мл/мин.

  • Флокулянт — раствор 0,015–0,05 г/л, 3,3–13,3 мл/мин.

Расход проверяю мерным цилиндром, он совпадает с заданным.

Видео на 3:25 с настройкой дозы и калибровкой — на странице проекта: dozator.sergey‑kireev.ru

Скоба и заборник

Насос дозирует точно, пока трубка лежит правильно. Чтобы так и было, я напечатал две детали.

Скоба на стенку ёмкости. Надевается на кромку без клея и винтов, трубка защёлкивается в канавку и не заламывается. Конец трубки уходит под воду — нет капель и корки на кончике.

Скоба‑кольцо, на фоне два насоса на установке

Скоба‑кольцо на стенке ёмкости с трубкой

Путь трубки внутри скобы

Модель скобы‑кольца

Заборник для канистры. Бросаете в канистру — ложится на дно и не всплывает: внутри три нержавеющие гайки. Раствор заходит через щели на высоте 33 мм, осадок со дна не подсасывается. Разбирается поворотом, без ключей.

Заборник в разнесённом виде: камера со щелями и утяжелитель

Камера заборника со щелями‑фильтром и штуцером

Шаг 1. Надеть три нержавеющие гайки M10 на шток утяжелителя

Шаг 2. Положить силиконовую прокладку Ø26 на торец: она закрывает карман с гайками

Шаг 3. Надеть камеру, совместив кулачки с пазами, и повернуть на 60° до щелчка

Шаг 4. Надеть трубку 2×4 на штуцер до упора, стяжка не нужна

Где ещё пригодится

Я делал насос под реагенты водоподготовки, но точный объём жидкости нужно подавать и в других местах:

  • лаборатории — дозирование реагентов на пилотных установках, подача раствора с постоянной скоростью;

  • аквариумы — удобрения для растений, кальций, KH и магний для морского аквариума;

  • бассейны — корректор pH, коагулянт, хлорсодержащие средства (для гипохлорита — трубка PharMed BPT);

  • напитки — сиропы, ароматизаторы, добавки при домашнем пивоварении. Раствор касается только трубки, поэтому достаточно поставить пищевую силиконовую.

Характеристики

Параметр

Значение

Статус

Подача

0,5–30 мл/мин

3,3–13,3 проверено на установке

Точность после калибровки

±5%

по мерному цилиндру

Давление на выходе

до 1 бар

расчёт

Самовсасывание

с глубины 0,5 м

расчёт

Температура раствора

до 40 °C

—

Сколько стоит

Комплектующие на один насос, цены Ozon:

Позиция

Кол‑во

≈ ₽

Мотор NEMA17 17HS4401

1

800

Драйвер TMC2209

1

1 400

Плата‑адаптер драйвера

1

400

ESP32 с платой расширения

1

630

Блок питания 12 В 2 А, гнездо, штекер

1

660

Подшипник 623

6

400

Винты, гайки, термовставки, ножки

—

300

Светодиод, провода с разъёмами

—

110

Трубка силиконовая 2 × 4

0,4 м

60

PETG

≈200 г

300

Итого

≈5 100

Два канала обошлись примерно в 10 200 ₽ комплектующих против 48 000 ₽ за готовые. Время на проектирование я не считал.

Сергей Киреев, инженер‑технолог по водоподготовке. Telegram: t.me/sr_kireev

Подробности, видео и демо приложения — на странице проекта: dozator.sergey‑kireev.ru

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.