Предыстория
Привет, Хабр!
Какое-то время назад я рассказывал, как прикрутил мозги к своему гидравлическому прессу и что из этого получилось. С тех пор много воды (и масла!) утекло, сделал много нового и хочу этим поделиться.
На тот момент было несколько моделей контроллеров, вот флагманская модель
На борту 2’’ TFT-экран, розетка, внутри ESP32, ADS1115 и мелочёвка. Можно выбирать культуру для отжима, запускать процесс и наблюдать его на экране. Точка доступа WiFi от ESP32, асинхронный web-сервер, web-socket, все дела.
Для изменения настроек нужно подключиться к точке доступа, которую генерирует контроллер, и менять эти параметры через web-интерфейс. Работает с любого устройства (телефон, десктоп).
Вроде бы всё хорошо, покупают базовую модель и «флагманскую», но прогресс и моя неугомонная тяга к развитию заставляли бежать дальше и думать над улучшением.
Первый шаг к улучшению — экранчик побольше, упаковать автоматику в красивый удобный корпус, что и было сделано: отдал на аутсорс доброму человеку проектирование корпуса, и вот что получилось:
Оптимизировал монтаж печатной платы — разработал новую, чтобы паять дисплей и энкодер навигации прямо на плату с обратной стороны, в итоге минус 12 проводов:
Поработал над интерфейсами — модифицировал некоторые экраны:
Ну улучшил и улучшил, всё-таки были некоторые минусы конструкции:
-
Всё ещё сложно в сборке (пара часов, но и тех жалко)
-
Маленький экран (есть пенсионеры среди заказчиков)
-
Механические элементы уменьшают надёжность (особенно копеешный энкодер)
-
Относительно сложный процесс изменения параметров — подключить WiFi, открыть браузер, вбить адрес, что-то там поделать
Я осознанно на тот момент выбрал способ управления параметрами через web-сервер, так как думал, что так дешевле, чем городить сложные интерфейсы на TFT, и отчасти был прав.
Как я переходил на тачскрин и чуть не поседел
«А что если попробовать тачскрин?» — подумал я. Начал копать, смотреть какие HMI существуют в природе. Рискнул и купил аж 7-дюймовый дисплей с ESP32-S3 на борту

Получил, начал разбираться. Ожидание: работает как телефон, легко программировать. Реальность: нет, нет.
Существует множество разновидностей дисплеев на ES32-S3, и все тормозят примерно одинаково. Второй важный момент — далеко не для всех дисплеев есть конфигурация под PlatformIO, а в другой IDE я принципиально не пользуюсь.
Все примеры для этого дисплея были только для Arduino IDE, для других дисплеев ещё для ESP-IDF, но к подвигу изучения «родной» платформы Espressif я был не готов (да и сейчас тоже). Только VS Code, только родной ардуиновский C++
Каким-то образом я наткнулся на дисплеи Crowpanel 5» от Elecrow. Заказал, получил, один добрый человек помог настроить профиль дисплея с драйверами, чтобы завелось на Platformio — каким-то чудом заработали настройки от похожего дисплея.

На борту помимо UART даже какие-то GPIO доступны, хоть и немного. По сути один ) Есть разъём GPIO, но это дубль I2C, который мне тоже нужен для подключения АЦП.
Понеслась череда экспериментов: за основу взял свой базовый алгоритм запуска программ, подсчёта времени и прочего. Однако предстояло хорошо поработать над интерфейсами. Для этого выбрал EEZ Studio — довольно мощное бесплатное ПО для разработки UI под LVGL — классная библиотека со всеми необходимыми компонентами для построения гибких интерфейсов
Вот тут-то и раскрылось предполагаемое удобство работы с системой. Никаких тебе WiFi, всё доступно для редактирования на месте, «как на смартфоне»
Вся система должна была состоять из:
-
сам дисплей
-
ADS1115 для чтения давления и передачи по I2C на микроконтроллер дисплея
-
Плата питания
-
твердотельное реле для управления маслостанцией (подключается к единственному GPIO дисплея)
-
Пищалка, сигнализирующая о старте и окончания программы. Использую модуль пассивного зуммера, ему для управления нужен GPIO, а его в запасе нет!
Что ж, собрал интерфейсы, некоторое время потратил на их интеграцию с кодом.
И вроде всё завелось и как-то работало, но тут я упёрся в ограничение микроконтроллера — ESP32-S3 часто крашился и перезагружался из-за переполнения памяти из-за LVGL.
Путём неимоверных усилий и Copilot (Claude Sonnet тоже) я таки отладил программу — всё хорошо работало и не валилось. Добавил очистку памяти перед каждой перерисовкой дисплея и другие хаки.
Но такая реализация меня не устраивала, всегда оставался риск краша в самый неподходящий момент, и не хватало пина для пищалки. К тому же в основном цикле крутилось чтение давления в реальном времени, ресурсов в какой-то момент могло не хватить.
Мастер и раб: развязываем дисплей и мозги ради стабильности
Решил кардинально переделать структуру проекта — вынес основную логику и управление LVGL на отдельный контроллер ESP32-C3 Zero. Мне понравился формат этой платы — небольшая, достаточно пинов, есть WiFi если нужно.
Собрал макет, переписал почти полностью проект под мастер-слейв: ESP32 общается с HMI по UART. Добавил ещё больше оптимизации, система работает стабильно! Сделал новый корпус, нарисовал новую печатную плату и вот что получилось:
Уже меньше проводов, сборка гораздо быстрее. Плату паяю уже на автомате, чуть более кропотливая работа по монтажу силовой части. Розетки беру Легранд, выбрасываю железяки, перекрашиваю в чёрный цвет (белые существенно дешевле) и встраиваю в корпус.
Получилось красиво и функционально, полгода продаю такую модель, пользуется спросом больше других, хоть и дороже.
Преимущества новой конструкции:
-
ESP32-C3 занимается только логикой управления, а HMI-дисплей — только отрисовкой. Они общаются по UART, не мешая друг другу
-
Удобное управление на тачскрине (больше не нужен WiFi), контроллер полностью автономный, интерфейс понятен пенсионерам
-
Проще в сборке, нечему ломаться
Новый формат
Существуют производства масел, где задействовано несколько прессов, и в зависимости от конфигурации либо одна маслостанция, управляющая несколькими прессами, либо отдельная маслостанция на каждый пресс. Есть такие комплексы от 6 до 12 прессов. Бывает больше, но это довольно редкая история.
Так вот со мной связывались владельцы таких комплексов, вот как примерно проходил разговор:
— У меня 6 прессов, 6 маслостанций. Сколько стоит хорошая автоматика на 1 станцию?
— 40 тысяч рублей
— До свидания!
Или вот так:
— У меня 1 большая маслостанция и 6 прессов, можно придумать автоматику для такой конфигурации?
— Извините, не умею
— До свидания.
Иллюстрация ко 2-му разговору — схематичное изображение комплекса с одной маслостанцией
Как это работает:
-
Оператор закладывает в бочонки прессов разные культуры
-
Включает маслостанцию
-
Рукояткой распределителя 1-го пресса подаёт давление до определённого уровня, переводит рукоятку в нейтраль
-
Тоже самое с остальными рукоятками
Мощности маслостанции не хватает для одновременной подачи давления в несколько гидроцилиндров. Можно, но давление будет нагнетаться медленнее, и сложнее контролировать необходимое усилие, так как для каждой культуры на старте оно своё. Например, подсолнечное масло начинает капать при 20 бар, а чёрный тмин при 200 бар.
В общем, управление таким комплексом требует опыта, сноровки, аккуратности и довольно много времени.
Почему я не умел автоматизировать такие комплексы? Потому что не пробовал.
Условно можно поставить любую мою автоматику и она будет работать, но запускать/отключать она будет только эту одну маслостанцию, а распределять давление всё равно нужно вручную распределителем. Ну или загружать во все бочонки одинаковую культуру и давить везде одинаково. Но такой способ тоже не всегда подходит.
Таких комплексов в своё время было продано довольно много, и почти все управляют процессом вручную. Есть, конечно, полуавтоматы на релюшках, есть отдельные умельцы, которые смогли сделать что-то близкое к полной автоматизации.
Есть запрос — будет предложение!
Итак, для автоматизации такого гидравлического комплекса прежде всего нужен электромагнитный распределитель, ведь автоматика умеет только замыкать контакты, и не умеет двигать рукоятки )
Такие распределители существуют:
Теоретически и практически такой распределитель купить можно, а значит и можно автоматизировать.
Связался с человеком, у которого есть такой комплекс с 6 прессами, есть электромагнитный распределитель, есть какая-то автоматика на ПЛК, и есть желание сделать красоту, собрал требования по алгоритму.
Алгоритм непростой и сильно отличается от одиночной маслостанции с прессом:ё
-
в один момент может подаваться давление только в один пресс (работает только один электромагнит)
-
Маслостанция работает не постоянно: перед подачей давления запускается, работает несколько секунд, электромагнит подаёт давление в какой-то гидроцилиндр, датчик давления фиксирует предел в диапазоне и контроллер выключает подачу давления
-
Если в этот момент другие пресса «требуют» давление, то становятся в очередь, и получают давление только по окончанию подачи в предыдущий
-
Требуется ручное управление: поднять/опустить шток для выпрессовки, для «дожатия» давления на максимальных значениях
-
Ручное управление не должно конфликтовать с автоматическим режимом, тоже есть пожелания к алгоритму (как ручной режим работает в зависимости от статуса процесса)
-
Аварийный режим должен отслеживаться на каждом гидроцилиндре, и в случае срабатыванию отключать всю систему
-
После остановки подачи давления малостанция должна ещё работать какое-то время — вдруг какой-то пресс потребует давления, чтобы не дёргать её часто.
-
Все эти параметры должны настраиваться )
Собрал я по-быстрому новый прототип, переписал ПО под управление несколькими станциями.
Использовал привычный дисплей Crowpanel 5» с LVGL и уже ESP32-Devkit, потому что нужно больше пинов. Крутилки — имитация датчиков давления, светодиоды — электромагнитов.
Всё вроде работало, но меня не устраивал риск тормозов или падения микроконтроллера с этим LVGL, ведь тут по UART идёт большой поток данных. 115 кбит — оптимальная скорость передачи по этому интерфейсу, повышение скорости может повлечь потерю данных и «шумы» на линии.
Тонкий клиент
Начал копать, какое решение можно придумать, близкое к промышленному исполнению. На ПЛК с релейным языком переходить не готов — совсем другая вселенная и контроллеры с HMI дороже, а тут бюджет важен, одини гидрораспределитель на 6 потоков стоит 70 тыс + автоматика.
В итоге остановился на дисплеях Nextion — считаются промышленным стандартом

Купил сразу хорошую версию Intelligent — неплохое железо, управление по UART, максимально возможная оптимизация взаимодействия с мастером, реально тонкий клиент — просто отрисовывает компоненты, местоположение и размер которых задан заранее.
Nextion Editor: квест по прохождению промышленного стандарта
К минусам особенностям Nextion можно отнести устаревший редактор интерфейсов Nextion Editor, он только для Windows (пришлось сдувать пыль со старого ноутбука) и давно не обновляется. Этот редактор — единственный способ загрузить файл с UI на дисплей через flash-карту.
Вот кусочек интерфейса Nextion Editor:

Почти все интерактивные компоненты имеют события, которые при клике отправляются в мастер-систему, которая что-то с ними делает. Вот, например, у кнопки скролла прописано:
prints "EDIT_SCROLL_DOWN",0printh 0A
Или вот код обработки кнопки «ОК» на странице редактирования текста
prints "KBD_SAVE",0printh 0Aprinth 43 45printh 0A
Строго без пробела перед нулём, строго printh 0A в конце, иначе дебаггер не пропустит )
В Nextion есть свой встроенный язык программирования с довольно странным синтаксисом и убогим дебагом. В LVGL быстрая прокрутка значений по кнопке организуется готовой функцией, а тут надо разместить на странице компонент с таймером и прописать код:
// Обработка удержания кнопокif(edtHoldBtn==1){ // row1MaxInc if(row1MaxV.val<=9989) { row1MaxV.val+=10 prints "EDIT_VALUE:0,0,",0 covx row1MaxV.val,tmpTxt.txt,0,0 prints tmpTxt.txt,0 printh 0A }}else if(edtHoldBtn==2){ // row1MaxDec if(row1MaxV.val>=11) { row1MaxV.val-=10 prints "EDIT_VALUE:0,0,",0 covx row1MaxV.val,tmpTxt.txt,0,0 prints tmpTxt.txt,0 printh 0A }
И так для каждой кнопки, а их на странице 18 )
Мастер-систему я оставил на ESP32, так как базовый алгоритм уже был готов, нужно было обеспечить отправку команд на отрисовку элементов UI. Думал, это будет несложно ))
Добавил 2-й АЦП и расширитель портов, так как пинов ESP уже не хватало, а нужно их много:
-
6 реле для опускания штока вниз
-
6 реле для поднятия штока
-
Ручное опускание штока 6 шт
-
Ручное поднятие штока 6 шт
Для ручного управления решил использовать трёхпозиционные джойстики без фиксации.
Я опущу здесь две недели непрерывной работы над рабочим прототипом, было интересно и довольно сложно.
Весь дизайн сначала создавал в Nextion Editor, но потом решил идти правильным путём — нарисовал все компоненты в Figma:
Я не дизайнер, но люблю чтобы всё было по красоте:
Сначала прототип на промокашке, потом отдельные компоненты
Потом собрал экраны, получилось аж 16 штук. Не пугайтесь, 16 экранов — это не 16 кнопочных меню, а скорее 16 состояний, которые делают управление комплексом из 6 прессов интуитивно понятным:
К сожалению, нельзя вот так просто взять и импортировать дизайн из Figma в редактор Nextion, нужно создавать экраны, расставлять компоненты, указывать вручную размеры и координаты, загружать подготовленные изображения и выбирать их в качестве фона.
Столкнулся с неожиданностями — в редакторе нельзя нарисовать прямоугольник или круг, нет удобной прокрутки текста (типа стандартного барабана в LVGL). Для всего этого использовал доступные хаки — обходился имеющимися компонентами. Например, в качестве фонового прямоугольника использовал прогрессбар нужного размера с прогрессом 100%, для цветного круглого индикатора — Radio button в одном состоянии.
Тут сильно меньше возможностей, чем в LVGL «из коробки», так что пришлось изрядно попотеть, чтобы получилось красиво и с привычными паттернами современных интерфейсов.
Что в итоге получилось:
-
Главный экран всегда отображает актуальный статус каждого пресса — запущен или нет, прогресс отжима масла, давление в системе, оставшееся время, индикатор подачи давления.
-
Экран выбора культуры
-
Экран запуска, экран процесса с красивым манометром
-
Экраны редактирования и создания культур
-
Экран кастомной клавиатуры, где каждая кнопка создавалась и позиционировалась с любовью (особенно буква «Ё»)
-
Системные настройки 3 экрана
-
Восстановление заводских настроек
-
Другие служебные экраны
Как обновлять ПО если что
Отдельно хочется рассказать про обновление прошивки. Так как система состоит из мастера и HMI, то обновить прошивку можно только по отдельности, и должна быть возможность делать это удалённо, так как моя автоматику покупают по всей стране, и в моменте может понадобится что-то доработать или поправить баг.
Мне удалось реализовать обновление по воздуху и мастера, и дисплея. Пользователь на специальной странице запускает процесс обновления — по кнопке контроллер создаёт точку доступа WiFi, и загрузив web-страницу, можно выбрать что обновлять.
Мастер обновляется считанные секунды, дисплей — 2 минуты примерно.
Что ж, пора двигаться к опытному экземпляру! По-быстрому развёл печатную плату (дальше сравните с новой) в Sprint Layout, и пока ждал, занялся корпусом.
Как я делал корпус
«Такой корпус уже не напечатать», подумал я — тут 6 джойстиков, большой экран (в рабочем исполнении будет уже 7’’), блок питания 12В для слаботочки, блок питания 24В для электромагнитов, автомат ампер на 6, аварийный грибок-выключатель, твердотельное реле или магнитный пускатель (для маслостанций на 380В), сама плата с обвязкой в своей коробочке, силовые шины.
Корпус 40х30х17 должен подойти, прикинул я.
Быстро (ну как смог) сделал модель стандартного продающегося на Озоне корпуса во Fusion 360, расположил все компоненты внутри — ну вроде всё помещается. Странно, но в реальности корпус получился точно таким же )

Пока всё это проектировал, собрал в своём ТГ-канале группу владельцев комплексов с несколькими прессами, и нашёлся один реальный заказчик. Ура! Можно заказывать запчасти.
Первые проблемы
Прототип я собирал и тестировал на 1-2 прессах, а максимально планировал управление 6 прессами. С увеличением потока данных, передаваемых по UART, начал ловить тормоза интерфейса. Это даже не тормоза, просто кнопки срабатывали не с 1-го и иногда даже не со 2-го раза.
Долго разбирался в чём дело, оказалось по UART довольно часто ходит «мусор», и сначала ставил костыли по очистке этого мусора, потом мне это дело надоело, я хочу чтобы всё работало стабильно и чётко, как автомат Калашникова!
Что ж, пора делать по-взрослому, DeepSeek посоветовал переходить на RS-485 (Modbus), якобы тогда точно не будет мусора в UART и всё будет работать чётко.
До этого с Modbus не работал, самое время ставить эксперименты.
Начал выбирать готовые модули — для мастера взял красненький, так как питание у него 3.3В и такой же уровень согласования с RX/TX (UART), для дисплея синенький.
Чуть допилил проект под Modbus, запустил — не получилось то, чего ожидал. Не буду грузить подробностями, оказалось, красненький модуль автоматически переключает приём/передачу, а для моего проекта это не годится, пришлось ставить на мастер такой же синенький модуль с внешним управлением — на этом модуле есть выводы DE/RE, которые объединяются в один и кидаются на GPIO ESP32, тогда полный контроль и всё работает как надо.
В общем с переходом на Modbus экран реально теперь работает круто, все кнопки срабатывают с 1-го нажатия, никакого мусора в данных. Ну и теперь можно экран отнести от щита с контроллером хоть на сотню метров, всё будет чётко работать, этот интерфейс для этого и создавался.
Приехали запчасти и электрический щит, начал проектировать технологические вырезы — сначала врезал дисплей, потом остальное.
За пару дней и ночей собрал конструкцию
Новый дисплей 7’’ оказался с динамиком, поковырял доку — может воспроизводить звуки! Записал несколько, теперь при включении здоровается, комментирует запуск процесса, остановку и аварию.
Схемотехника
Собранной платы недостаточно для обеспечения полного функционала — в ней нет расширителя портов и Mosfet-ключей для управления электромагнитами (а их 12 штук).
Расширитель MCP23017 я прикрутил рядышком, также присобачил MAX485 (для Modbus).
Крупным планом печатную плату не выкладываю, не хочу позориться )
Отдельно разместились модули Mosfet для управления электромагнитами. Покупал я их на Алиэкспресс, и два из трёх были бракованные, ну и пришлось допиливать, чтобы оптопара срабатывала от 3.3В. Вот мой отзыв на Али:
Пока ехали запчасти, освоил EasyEda, и по ходу отрисовки схемы и новой печатной платы начал изучать, какая должна быль фильтрация по питанию, от ВЧ/НЧ помех, какой модуль «шумит», а на какой достаточно поставить у ног 0.1 мкФ. У
жаснулся, сколько всего ещё нужно добавить для стабильной работы, у меня так было всё по-минимуму. Работает сейчас как и задумано, но для пущей стабильности много чего переработал.
Долго делал и переделывал, и пришёл вот к такому результату:
Я старался по максимуму избавиться от готовых модулей, так как они либо не идеальны, либо имеют избыточный функционал и обвязку.
Впервые буду использовать smd-монтаж
Что есть на платах:
— ESP32, 2xADS1115
— Микросхема MAX485 с обвязкой вместо готового модуля, поставил ещё гнездо RJ-45 для соединения дисплея
— Оптопара для повышения 3.3В до 12 для надёжного срабатывания твердотельного реле
— AMS1117 с обвязкой для питания АЦП и расширителя портов
— LM2596 для питания всей схемы и дисплея в том числе
Заморочился с фильтрацией для стабильности и уменьшения шумов, вот, например, резисторный делитель и RC-фильтр перед каждым из 6 входов АЦП:
Продолжаю избавляться от модулей — задизайнил силовой модуль с расширителем портов MCP23017 и Mosfet с обвязкой. Получилось довольно эротично — цифровая и и силовая платы соединяются 4-мя проводами, а не 12-ю от платы к готовым модулям с Али
К силовой плате подключается отдельный БП на 24В, который даёт 4.5А для электромагнитов распределителя (им достаточно 2.5А), а также сами электромагниты.
Управление Mosfet-ом довольно простое, по классической схеме. Использую IRLZ44N — подходит для моих целей по всем параметрам, даже с избытком. Обязательно мощный диод для защиты от всплесков индуктивной нагрузки, ну и параллельно нагрузке цепочка для индикации подачи напряжения на нагрузку.
Не счесть, сколько раз я переделывал схему и печатную плату после этого, но кажется, остановился на этой версии. Кстати, EasyEda отвратительно трассирует платы, просто какой-то ленивый кот — подсовывает переходные via там, где они не нужны, ну и многое другое, приходится потом много доделывать руками. Силовой модуль так вообще полностью ручная трассировка.
Вот это всё ручная разводка/доводка — я люблю чтобы красиво было и снаружи и внутри, даже если это никто никогда и не увидит.
Что в итоге
-
Перешёл на тачскрин с интуитивным управлением без WiFi
-
Разработал архитектуру «Мультипресс» для управления целым цехом
-
Освоил EasyEDA для создания собственных печатных плат (почти) промышленного уровня
Вообще я получил большое удовольствие в самом процессе создания новой конструкции, наверное нравится даже больше, чем результат. Потому что железку продал — деньги потратил, а полученные знания и опыт со мной навсегда.
За кадром осталось очень много рутины, испытаний и экспериментов.
Наверняка кто-то может сделать лучше, но ведь я только учусь )
Буду рад услышать советы и рекомендации!
Группа по автоматике для гидравлики: t.me/oilpress_auto, сайт с автоматикой: maslobot.ru
P.S. Пока готовил статью, завершил работу над новой моделью — контроллер управления несколькими маслостанциями с одного экрана, но это уже другая история )

ссылка на оригинал статьи https://habr.com/ru/articles/1035360/