Приветствую, харбажители!

Представляю вашему вниманию интересный лонгрид про свою разработку

Предыстория

В моей семье в целом стараемся вести здоровый образ жизни, как минимум в питании.

И вот возникла идея купить маслопресс для изготовления сыродавленного масла из разных культур — подсолнечник, лён, кунжут, тыква, чёрный тмин, конопля, расторопша, кокосовая стружка. 

Такие масла очень полезны, например, в льняном масле содержится 55% Омега-3, а по маслам штирийской тыквы и чёрного тмина есть множество публикаций и исследований, в том числе на PubMed. 

Качественное сыродавленное масло без нагрева и контакта с металлом можно получить только на гидравлическом прессе — массивная станина с гидроцилиндром и маслостанцией, нагнетающей давление в систему.

Гидравлический маслопресс
Гидравлический маслопресс

Немного промониторил рынок и приобрёл вот такой аппарат, развивающий усилие 50 тонн при максимальном давлении 700 бар (да, 700 атмосфер!)

Маслостанция для нагнетания давления
Маслостанция для нагнетания давления

Весит эта конструкция 120 кг, поэтому пришлось докупать металлический стол, как раз удобно разместил на нижней полке маслостанцию. 

Бочонок для семян
Бочонок для семян

Принцип получения масло очень прост – засыпать в фильтровальную ткань семена, поместить в бочонок, установить проставку, опустить шток гидроцилиндра с помощью кнопки или педали и давить, наблюдая за процессом получения масла.

Преимущество технологии – исключение нагревания масла и отсутствие контакта с металлом, что предотвращает преждевременное окисление масла, сохраняя всю пользу этого супер-фуда.

Бочонок сделан из прочнейшего материала капролон, который не впитывает запахи, не окисляет масло. Используется много где, в том числе в медицине. 

Для усиления прочности бочонок заключён в металлическую обойму 10 мм, отсюда и вес.


Недостаток
– долгий процесс отжима. От 40 мин на 0,5 л подсолнечника и до 3 часов на 0,25 л масла чёрного тмина.

Есть ещё масло амаранта, эффективного при лечении и профилактике онкологии, так вот его давят 12+ часов на 100-тонном пресса, и выход масла всего 4-5%, то есть с одной закладки 2 кг семян за 12 часов накапает 100 мл максимум. 

По причине трудоёмкости процесса сыродавленные масла существенно дороже “магазинных”, полученных методом экстракции или на шнеке. И хранить готовые масла нужно в холодильнике (кроме кунжутного).

Масло из семян штирийской тыквы
Масло из семян штирийской тыквы

Закупил я разных семян понемногу и начал экспериментировать.

Вот волшебный цвет тыквенного масла с чудесным ароматом:


Нарисовал наклейки и решил масло понемногу продавать. Ну как продавать, просто рассказывал друзьям-знакомым

Так как у меня есть основная работа, масло отжимал в обеденных перерывах и вечерами-ночами. 

Процесс требует определённых временных и силовых затрат:

  1. Засыпать семена в тканевые мешочек, поместить в бочонок (помещается до 2 кг сырья)

  2. Установить бочонок под гидроцилиндр (около 15 кг с семенами)

  3. Положить сверху семян проставку из капролона, сверху проставку из металла, выровнять относительно штока гироцилиндра

  4. Педалью, подключённой к  маслостанции, опустить шток, наблюдая за давлением

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

Тут важный момент – за давлением нужно следить во время всего цикла отжима. Нельзя вот просто так включить и уйти – давление нужно повышать постепенно от 0 до примерно 600 бар. Причём по мере прессования сырья давление в системе падает, и нужно постоянно подкачивать.

Например, со старта накачивается давление 60 бар, жду пока упадёт до 30-40 бар, снова подкачать до 60.

Через несколько минут можно дать давление 100 бар, и удерживать его в диапазоне 80-100 бар в течение нескольких минут. И так далее до 600 бар, там уже давление не так быстро падает. 

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

А если отжимать нужно несколько раз в день? А если несколько прессов?

Процесс стал забирать довольно много времени, я задумался..

Поиск решения

Тут я вспомнил, что я “айтишник” с опытом электронщика в школьные и студенческие годы, и задумался об автоматизации процесса.

Стал изучать, какие есть готовые решения на рынке. 

Механический манометр
Механический манометр

Есть механическая система поддержания давления, представляет собой манометр, на котором буквально руками нужно выставить диапазон, в котором будет поддерживаться давление. На выходе контакт, замыкает-размыкает линию электропитания маслостанции.
Автоматизация из 19-го века ?

Электронный манометр
Электронный манометр

На Али нашёлся цифровой манометр со встроенным датчиком давления с таким же принципом, единственная разница – возможность кнопочками задавать диапазон давлений.

Как будто бы это то что нужно, но нет ))


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

Мягкие культуры (лён, подсолнечник, кунжут, орехи) “разгоняются” медленно, около 30 мин нужно плавно повышать давление до максимального, для твёрдых культур (тыква, расторопша, чёрный тмин) давление можно повышать быстрее, затем удерживать давление в максимальном диапазоне 1-3 часа.

Если давление повысить быстро, то масло пойдёт через верх поршня, может порваться ткань.

Итак, чтобы что-то автоматизировать, нужно понимать алгоритм.

График отжима семян тыквы
График отжима семян тыквы

В течение 3 месяцев я стал записывать значения диапазонов давлений и время нахождения в каждом диапазоне для каждой культуры. Получилось с десяток таких таблиц.

Вот например, идеальный выверенный временем график отжима семян подсолнечника


Таким образом, задача состоит в автоматическом поддержании давления в определённом диапазоне, причём эти диапазоны нужно переключать по времени каким-то волшебным образом.

Давление в системе можно снимать датчиком давления и далее обрабатывать на микроконтроллере по алгоритму, определённому для каждой культуры.

Я начал изучать, какое решение лучше подойдёт для моей задачи. Выбор пал на Arduino, в основном из-за наличия большого сообщества и низкого порога входа для любого инженера.

Реализация

Купил набор c Arduino Nano и стал штудировать уроки на канале Alex Gyver. Всем, кто хочет прикоснуться к автоматизации чего угодно, горячо рекомендую!

В моём распоряжении на тот момент был небольшой опыт программирования на Python, Swift, ну и конечно HTML+CSS+JS. И тут пришлось осваивать C++, который терпеть не мог в универе.

Макетная плата с Arduino Nano
Макетная плата с Arduino Nano

Начал осваивать фреймворк Arduino по шагам, от кнопочек и светодиодов к более сложным конструкциям.

И меньше чем через 1,5 месяца собрал 1-й прототип контроллера 


Сначала реализовал механизм поддержания давления в определённом диапазоне, тут всё просто:

// главный алгоритм, поддерживающий давление в диапазоне minPress-maxPress

 if (pressure >= maxPress && isFilled) {

   pump_off();
   isFilled = 0;

 } else if (pressure <= minPress && isFilled == 0 && wasStartedFlag) {

   pump_on();
   isFilled = 1;

 }

В целом с учётом недавнего рефакторинга в проекте на Arduino Nano получилось 850 строк кода

Самым сложным оказалось реализовать логику отображения нужной информации на экране OLED. Вот список экранов:

  • Главный экран с перечнем культур с возможностью прокручивать список

  • Экран с временем отжима выбранной культуры

  • Экран с диапазонами давлений

  • Экран с графиком зависимости давления от времени

  • Экран с процессом отжима

  • Аварийный экран

  • Экран окончания процесса

Экраны для разных состояний
Экраны для разных состояний


Вот, к примеру, алгоритм отрисовки главного экрана. С виду несложно, но я потратил около недели, чтобы выкристаллизовать пару тернарных операторов

void mainScreen() {
 currentScreen = MAIN;
 oled.setScale(2);
 oled.clear();
 oled.home();

 for (uint8_t i = 0; i < 4; i++) {

   byte coin;
   chozenSeed <4 ? coin = i: coin = i+(chozenSeed-3);
   if (chozenSeed == coin) oled.invertText(true);

   // Цикл, выводящий 4 пункта на дисплей
   oled.println(seeds.getName(chozenSeed > 3 ? i + (chozenSeed - 3) : i));

   // Выводим пункты + скроллинг при достижении последней строки указателем
   // Если указатель > 3, то сдвигаем список пунктов на chozenSeed - 3
   oled.invertText(false);
 }

 oled.update();

}
Печатная плата
Печатная плата

Потом нарисовал и заказал печатки на Али

Первый корпус контроллера делал из покупной коробочки, получился довольно убогим, так как отверстия вырезал сам

К контроллеру подключается датчик давления, твердотельное реле и питание 12 В


Крутилка-энкодер перелистывает список культур или диапазонов в зависимости от того, на каком экране находится пользователь.

Дисплей TM1637 отображает давление в системе в любой момент времени, кнопки старт-стоп и светодиод для аварийного режима.

Аварийный режим останавливает процесс, если по какой-то причине маслостанция работает больше определённого времени, сделано для крайних случаев, если случается прорыв контура гидросистемы.

Датчик давления вкручивается в гидроцилиндр, реле подключается к маслостанции

Видео работы 1-го прототипа: https://youtu.be/dbVDzJbZ3hc?si=uPXk2gghFIghS3po 

Я состою в Союзе маслоделов (есть такой канал в ТГ, увы, присоединиться можно только по приглашению), там рассказал про своё устройство, и по началу кто-то заинтересовался, были и скептики, не очень верящие в успех автоматизации. Но я упорно шёл к цели, ничто так не мотивирует, как лень! 

После демонстрации прототипа посыпались вопросы, народу стало интересно, и через я месяц получил первый заказ.

Чертёж для фрезеровки
Чертёж для фрезеровки

Корпуса заказывал на ЧипДип, потом отдавал товарищу на фрезеровку

Корпус контроллера
Корпус контроллера

Экспериментировал с расположением и выбором управляющих элементов, получилось как-то так

Контроллер внутри
Контроллер внутри

Обратите внимание на крепление дисплеев ?

Потихоньку начал получать единичные заказы и новые просьбы и вопросы от потенциальных пользователей

На самом деле существует множество конструкций маслопрессов с разными гидроцилиндрами: 50, 75, 100 тонн и больше. Также бывают бочонки с разным диаметром, а значит усилие, приложенное к семенам, будет отличаться.
К примеру, давление 100 бар на 50-тонном прессе с диаметром бочонка 150 мм (как у меня) даёт одно усилие на семена, а на 100-тонном прессе с бочонком 120 мм совсем другое.

У меня нет зоопарка маслопрессов, поэтому на тот момент была только одна программа для каждой культуры.

Пользователи задавали вопросы “А как можно самостоятельно внести изменения в программу?” 

Ведь необходимое усилие на отжим может понадобится разное в зависимости от типа маслопресса, влажности культуры, поставщика и других параметров. Где-то нужно уменьшить время отжима, где-то увеличить.
А ещё у меня не было программ для экзотичных культур, таких как мак, гвоздика, облепиха, семена чиа, горчица.

Вопрос вполне закономерный, и я начал искать способ, как бы для пользователя сделать возможным менять параметры отжима самостоятельно.

Вариант 1. Реализовать изменение параметров прямо на экране OLED с помощью энкодера. Но намучившись с выводом минимально необходимой для маслоделов информации на дисплей я сразу отмёл эту идею

Вариант 2. Поставить экран побольше с тачскрином, менять параметры на нём. Но нет, это удорожает конструкцию и сильно усложнит реализацию в коде

Вариант 3. Вебсервер – подходит! Но знаний как с этим работать тогда было примерно ноль.

Эволюция

ESP32
ESP32

Остановился на варианте с вебсервером

Самое подходящее железо для этого – ESP32

Схема контроллера сложнее, чем на Arduino Nano


Датчику давления нужно 12 В, а ESP32 питается от 3,3 В, поэтому пришлось ставить отдельный DC-DC преобразователь.

График АЦП ESP32
График АЦП ESP32

Есть проблемка со встроенным АЦП внутри ESP32 – нелинейная характеристика в крайних значениях измерений.

А для процесса отжима крайне важно точно измерять давление на максимальных пределах. А тут получается АЦП будет выдавать одинаковое значение в диапазоне 3.1 - 3.3В. Не подходит! 

Пришлось экспериментировать и ставить доп. модуль с ADS1115 – 4-канальный 16-битный АЦП. Время отклика 860 FPS и разрядность меня устроила. В действительности этот АЦП выдаёт примерно 14.5 бит, но для измерений давления достаточно )

На АЦП нельзя подавать напряжение выше опорного, которое 3.3 В, пришлось добавлять резисторный делитель.

Снова изучение с нуля, первые скетчи управления светодиодом через вебморду. В итоге примерно через 1,5 месяца  получился такой интерфейс:

Веб-интерфейс контроллера маслопресса
Веб-интерфейс контроллера маслопресса

Для хранения данных отжима использую Arduino JSON, файловая система LittleFS.

При первом запуске контроллера проверяется существование файла с режимами отжима, если его нет, создаётся и записываются значения по умолчанию – базовый набор программ отжима для нескольких культур. 

Далее создаётся точка доступа WiFi с адресом 192.168.4.1 – стандартный для всех ESP32.

Далее собираются файлы для вебсервера с данными отжима из файла, уже живущего в файловой системе.

Возможности веб-интерфейса:

- отображение списка культур из памяти контроллера
- просмотр и изменение параметров отжима (название культуры, диапазоны давлений, время перехода между диапазонами)
- запуск и остановка процесса, отображение процесса отжима в реальном времени (используется ESPAsyncWebServer + WebSocket)
- изменение параметров аварийного режима, отключение звукового сигнала
- добавление/удаление диапазонов давлений
- добавление/удаление программ отжима

Конечно, всё это получилось не сразу, шёл от простого к сложному, благо уже 10 лет управляю сложными проектами, где разработка всегда ведётся итерациями.

Что дальше

Готовые контроллеры
Готовые контроллеры

 Модель оказалась успешной, поступали новые заказы на версию с WiFi


В какой-то момент я понял, что OLED дисплей 128х64 довольно тесный, а хочется добавить красоты. 

Сказано - сделано! Ещё пару недель возни, переписал пол-проекта под новый экран TFT размером 2 дюйма

Надо сказать, что работа с TFT существенно отличается от OLED, было потрачено много мыслетоплива, чтобы получить то что хотел. Это и трюки с обновлением экрана, с загрузкой сглаженных кириллических шрифтов, работа со спрайтами – всё это на базе библиотеки TFT_eSPI.

Корпус пришлось использовать крупнее для удобства монтажа, получилось примерно так:

Корпус контроллера с дисплеем TFT
Корпус контроллера с дисплеем TFT
Контроллер с WiFi внутри
Контроллер с WiFi внутри

Все модули теперь крепятся на винты, что усложняет монтаж, но выглядит эстетичнее, и надёжнее клеевого пистолета (говорят, может отваливаться после перепада температур)

С увеличением количества модулей стараюсь их разместить на печатной плате для уменьшения соединительных проводов.


На TFT экране с разрешением 320х240 уже можно разгуляться

Экраны контроллера с TFT дисплеем
Экраны контроллера с TFT дисплеем

Как работает автоматика с WiFi

Пора было сделать сайтик с описанием автоматики, вот кому интересно: https://sunsok.ru/automation

Первые проблемы

Управление маслостанцией производится при помощи твердотельного реле, минимальный порог срабатывания 3 В, а высокий уровень на выходе ESP32 - 3.3 В.
В некоторых случаях реле срабатывает как-то криво, маслостанция начинает работать грубо, буквально подскакивает! И с какого-то момента я начал устанавливать оптопару FR120N, чтобы выдавала на реле 12 В.

К тому же стали попадаться релюшки, не подходящие для индуктивной нагрузки, которой является электродвигатель маслостанции.

Твердотельные реле
Твердотельные реле

Опытным путём подобрал хорошие твердотелки - Kippribor и Pltek тоже хорошо работают. Движок на 750 Вт – это 3 А примерно, но для индуктивной нагрузки твердотельное реле должно иметь 10-кратный запас по току, поэтому ставлю на 40 А.


Была ещё проблема – с увеличением количества программ и диапазонов в них в некоторых случаях контроллер внезапно перезагружался. Долго искал причину, помог рефакторинг проекта в части работы с веб-сервером.

Разделил загрузку контента на куски:

void SendHTMLStream(AsyncWebServerRequest *request) {
 // Создаем потоковый ответ с типом "text/html"
 AsyncResponseStream *response = request->beginResponseStream("text/html");
 response->print(htmlStart);
 response->print(CSS_CONTENT);
 response->print(htmlMiddle);
 response->print("const data =" + jsonString + ";const paramsData = " + jsonParams + ";");
 response->print(JS_CONTENT);
 response->print("</body></html>");
 request->send(response);
}

При первом обращении к веб-серверу просто запрос одной строкой:

server.on("/", HTTP_GET, SendHTMLStream);

И ещё несколько обработчиков

// Если кликнули на кнопку "Сохранить", отправляется полученная data с json-ом и записывается в файл
 server.on("/sendfile", HTTP_POST, [](AsyncWebServerRequest * request) {
   handleSendFile(request);
 });

 // Если кликнули на кнопку "Сохранить параметры", отправляется полученная data с json-ом и записывается в файл
 server.on("/sendsettings", HTTP_POST, [](AsyncWebServerRequest * request) {
   handleSendSettings(request);
 });

 server.on("/startform", HTTP_GET, [](AsyncWebServerRequest * request) {
   handleStartForm(request);
 });

 server.on("/web-stop", HTTP_GET, [](AsyncWebServerRequest * request) {
   handleWebStop(request);
 });
Шрифты для экранов
Шрифты для экранов

Ещё оптимизировал загрузку шрифтов в память – два шрифта в тексте весят около 1 Мб, довольно объёмно для ESP32.


Пришлось поработать с partition table: по умолчанию ESP32 использует 1.3 Мб flash из доступных 4 Мб, я расширил до 2 Мб. Размер моего скетча 1.2 Мб.

Чуть позже добавил возможность обновления прошивки по воздуху с библиотекой ElegantOTA. Примечательно, что библиотека не работает, если разметить partition контроллера на 4 Мб.

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

Эксперименты

Акриловый корпус
Акриловый корпус

Собирал устройство в акриловом корпусе.
Красиво, но материал хрупкий, работать с ним неудобно

Большой корпус
Большой корпус

Пробовал собирать в большом корпусе с розеткой – так пользователю удобнее, так как можно воткнуть вилку маслостанции в контроллер, не надо заморачиваться с проводами.

Большой корпус внутри
Большой корпус внутри

Однако сборка такой конструкции оказалась весьма трудоёмкой. Сделал 3 штуки, продал на радость клиентам, но в таком виде больше собирать не буду.

Корпус на DIN-рейку
Корпус на DIN-рейку

По спецзаказу собрал корпус на DIN-рейку.
В сборке оказалось ещё сложнее, уж слишком плотный монтаж внутри.

Патент

Решил я запатентовать своё устройство. Кто-то меня спрашивал “Зачем?”. Ответ был простой: “Потому что могу и хочу” 

Патент на полезную модель
Патент на полезную модель

Пока что это только заявка, процесс регистрации долгий


Чертёж для заявки
Чертёж для заявки

Перед подачей заявки 2 месяца составляли описание и чертежи.

Недавно от патентного поверенного пришло сообщение о необходимости переквалифицировать полезную модель в полезное изобретение, так как описываемая конструкция больше под под это подходит. Так что процесс неспешно продолжается.

Что бы ещё сделать

Контроллер для сушилки

От одного клиента, заказавшего автоматику для маслопресса, поступил заказ сделать такой же контроллер, только для домашней сушилки овощей-фруктов. Принцип действия очень похожий – поддержания температуры в разных диапазонов в течение 1-2 суток.

Немного переделал алгоритм, поставил вместо датчика давления датчик температуры, протестировал в духовке и отправил клиенту 

Тестирование буронабивных свай

Кто бы мог подумать, что автоматику для маслопресса можно применить в строительстве.

По словам заказчика, прежде чем вводить в эксплуатацию такое оборудование, нужно провести испытание под разным давлением в течение суток. Люди засыпают, пропускают смену циклов давления, в общем простой человеческий фактор приводит к срыву испытаний.
И тут такое совпадение – нужная автоматика с небольшой доработкой подходит для испытания оборудования. Конечно же, отправил клиенту версию с WiFi, чтобы тот смог самостоятельно добавлять и изменять режимы. 

Варка янтаря

Пару месяцев назад поступил более интересный заказ – изготовить автоматику для поддержания давления и температуры для оборудования варки янтаря! “Вот это экзотика” – подумал я. 

Пресс-форма для янтаря
Пресс-форма для янтаря

Пресс-формы выглядят как-то так (картинка отсюда https://youtu.be/PQnOZTLyjZ0?si=99i0V2ZeZKjigTAM)

Янтарь нагревается до температуры 200 градусов, затем создаётся давление около 400 бар. Дальше 10 шагов изменения температуры и давления по алгоритму заказчика.

Термопара с модулем
Термопара с модулем

Для измерения температуры была выбрана простая термопара с модулем MAX6675. Модуль подключается к контроллеру по интерфейсу SPI.

Заказчик оказался на редкость технически грамотным и предоставил довольно чёткое ТЗ в виде таблицы – какие значения температуры и давления сколько по времени поддерживать. 

В какие-то моменты нужно сбрасывать давление, а это ещё один исполнительный механизм, а также необходимо измерять и выводить показания температуры. Таким образом, предстояло подключить ещё несколько модулей к контроллеру.

В ESP32 и так уже были задействованы почти все возможные GPIO, значит нужно или выбирать другой контроллер или ставить расширитель портов. 

Я имел раньше опыт работы с PCF8574, однако у этого расширителя есть особенность. При включении все выводы подтянуты к питанию, есть и другие особенности использования портов.

MCP23017
MCP23017

В общем, дело с этим модулем у меня не заладилось и я выбрал другой – MCP23017 – расширитель с полноценными двунаправленными портами

К расширителю портов подключил исполнительные механизмы – твердотельные реле через оптопары с подтяжкой напряжения 12 В для уверенного срабатывания реле. Ну и светодиоды для индикации срабатывания реле.

Схема подключения расширителя портов
Схема подключения расширителя портов

По условию заказчика, датчик давления предполагалось подключать на расстоянии несколько метров от контроллера, поэтому датчик с выходом 0-5 В не подходит, может быть просадка напряжения и соответственно искажение показаний.

Преобразователь
Преобразователь

Было решено использовать датчик с выходом по току 4-20 мА с модулем преобразования тока в напряжение, так как АЦП не умеет преобразовывать ток.

Контроллер варки янтаря под давлением
Контроллер варки янтаря под давлением

Получилось такое устройство

Пришлось серьёзно переработать программу – основной алгоритм поддержания режимов, экраны TFT для отображения новых параметров и серверную часть.

Контроллер внутри
Контроллер внутри

Внутри всего гораздо больше, чем в ранних моделях:

- ESP32
- DC-DC 12В - 3.3В
- ADS1115
- FR120N х3
- MCP23017
- MAX6675
- Преобразователь тока

Немного про бизнес

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

Но не всё так просто. Рынок маслоделия в стагнации, так как самое сложное в любом деле – реализация товара. И для этого нужны ощутимые вложения в маркетинг, ну или долгое время на раскрутку своего бренда. 

У меня есть клиенты, которые купили по 3-4 комплекта автоматики для своих мини-производств, желаю им всяческого процветания.

Это с большой натяжкой можно назвать бизнесом, я занимаюсь автоматизацией как хобби, мне просто дико интересно, ну и мозги тренировать надобно.

За те 9 месяцев, в течение которых собираю контроллеры, я не обнаружил восходящего тренда спроса на автоматику. Изредка попадаются интересные заказы. И если масштабироваться, то нужно искать новые ниши. Например, автоматизация сушильных камер покраски, сушилок древесины. 

Есть более интересные и амбициозные задачи промышленной автоматизации, но там целесообразнее применять ПЛК типа Siemens или Овен. Я пробовал изучать документацию по программированию ПЛК – нужно полностью менять мышление, переход с C++ на релейные схемы это боль

Эпилог

Надеюсь, статья былы интересной и где-то даже познавательной. Цель - дать понять, что автоматизация это не так сложно, и возможно, это чтиво кого-то сподвигнет начать что-то мастерить: превращения своой дом в умный или автоматизировать процессы.

Прогресс не стоит на месте, и будущее точно за автоматизацией и упрощением ручного труда.

Дерзайте!

Комментарии (18)


  1. aborouhin
    16.01.2025 00:10

    Очень любопытно было почитать :)

    Интересно, почему патентный поверенный предложил переквалифицировать полезную модель в изобретение. При всём уважении к Вашему труду, доказать критерий изобретательского уровня (т.е., грубо говоря, что для другого специалиста в сфере автоматизации, которому поставили бы аналогичное ТЗ, не было бы очевидно найденное Вами решение) тут будет проблематично. Полезная модель тем и лучше, что этого критерия нет, только новизна.

    Предположу, что описание "аппаратно-программного комплекса" оказалось слишком широким для полезной модели, которая должна описывать единое устройство, а не систему из нескольких. Ну и наличие программной части - отдельная история. Тут очень тонкий момент, как на это Роспатент смотрит, и его практика меняется, Ваш поверенный может лучше знать заморочки, актуальные на данный конкретный момент.

    По поводу ПЛК и "релейных схем" - ну есть же ПЛК на Linux (да простят меня суровые АСУТПшники, которые считают, что это вообще не ПЛК), Wirenboard тот же. Лучшее из двух миров. Ну и даже в классических ПЛК с языками МЭК есть ST, хотя этот недопаскаль - тоже та ещё боль и страдание :)


    1. YegorP
      16.01.2025 00:10

      хотя этот недопаскаль - тоже та ещё боль и страдание

      Всё не так плохо (и даже хорошо) если делать на нём только технологический процесс, а также минимально необходимый апи конфигурации и контроля. Это нижний уровень. А пользовательский интерфейс - верхний уровень со всеми этими дисплеями, менюшками и вебами - делается отдельно на чём удобнее.

      Языки ПЛК как раз и заточены на предсказуемую работу в глобальном цикле. Если не прибегать к расширениям, то там отсутствует динамическое выделение памяти и рекурсия, и по большому счёту можно выстрелить себе в ногу только неправильными условиями выхода из локальных циклов (for, while).

      Обычные языки программирования слишком много позволяют из коробки. Даже простой Си.


      1. vano3d Автор
        16.01.2025 00:10

        У меня много раз опускались руки после проявления очередных багов. Много экспериментировал, менял библиотеки и их настройки, оптимизировал работу с памятью, уменьшал частоту опроса там где можно. Ну и Chat GPT в некоторые моменты помогал, получилось улучшить некоторые участки кода.

        ПЛК удобны тем, что уже из коробки есть развязки, защиты, много свободных портов и есть удобные решения для подключения панели оператора, а не вот это вот всё с программированием экранов TFT.

        Так что изучение ПЛК - однозначно следующий шаг.


    1. vano3d Автор
      16.01.2025 00:10

      Процесс оформления заявки и формулы был довольно кропотливым. Для меня это первый опыт, было много странных вещей в описании, но такова сложившаяся практика. Описывался конкретный контроллер, а также пример применения в составе всего комплекса.

      И как мне объяснили, ПО патентуется отдельно, быстрее и дешевле.

      В общем, сказали что в таком виде могут завернуть, так как по описанию и функционалу тянет скорее на полезное изобретение. Ну и 19 тыр. придётся доплатить пошлину )


  1. sim2q
    16.01.2025 00:10

    Интересно было почитать, давно не было Ардуино-Лифт :)
    Понятно, что сейчас "все так делают", но всё же ожидаешь увидеть какие то минимальные защиты на входах с датчиков, хотя бы RC цепи там и тд. Какое-то разделение цифровых жгутов от силовых, использование сигнальных пар.
    Про программную часть думаю ещё кто-то распишет :)


    1. vano3d Автор
      16.01.2025 00:10

      Что даст RC-цепь на входе АЦП? Защиту ставят для кого-то или для чего-то. Сам контроллер и датчик давления запитываются от 12 В, от контроллера идут 2 провода с 12В на вход реле, которое в отдельной коробочке. То есть цифровая часть от силовой разделены, значит человек уже защищён (если не будет лезть куда не следует).
      Сам датчик выдаёт до 5В, и через делитель 3.3В подаются на АЦП, которое в свою очередь выполнено в виде модуля. Значит, микроконтроллер тоже защищён )

      Я не претендую на законченность конструкции, всегда есть что улучшать.

      Когда я сделал всю конструкцию в одном корпусе, там да, и силовая и цифровая часть рядом, и мне это не нравится, в аком корпусе больше не буду делать.


  1. Javian
    16.01.2025 00:10

    При такой мощной нагрузке паралельно электронному реле ставят обычное реле. Электронное реле срабатывает первым и через контакты механического реле, включившегося через мгновение позже, не будет большого импульсного тока включения. А дальше ток идёт через механическое реле и электронное реле не греется и не требует радиатора.


    1. diesel80
      16.01.2025 00:10

      Как по мне то туда устройство плавного пуска просится. И движку легче и гидроаппаратуре.


      1. vano3d Автор
        16.01.2025 00:10

        Кажись, придётся серьёзно усложнять конструкцию. Ставить что-то типа частотника для двигателя. Я пробовал ставить обычный регулятор "для лампочки", но не сработало )

        Или есть более изящный способ?


    1. vano3d Автор
      16.01.2025 00:10

      А реле и так не греется. Специфика такова, что оно включается на 1-2 секунды 1 раз в несколько минут. Но это в конце цикла. В начале включается чаще, поэтому сразу ставил твердотельное во избежание подгорания контактов электромагнитного реле.

      Чем меньше компонентов и соединительных проводов, тем выше надёжность устройства.

      Из примерно 50 клиентов 3 раза выходили из строя трвердотелки, но как я писал, в том случае изначально были поставлены некачественные реле с недостаточным номиналом.

      И 2 раза выходил из строя датчик давления, после чего поменял поставщика, и брака больше не было.

      И 2 раза ломался энкодер. Просто тупо переставал крутиться ) Чем его заменить, так и не нашёл. Разве что тремя кнопками.


  1. Keremet_2030
    16.01.2025 00:10

    Для работы с нагревателями по температуре рекомендую использовать ПИД регулятор


    1. vano3d Автор
      16.01.2025 00:10

      Да, конечно, изучал эту тему. Но у меня нет испытательного стенда для тестирования. Решили с заказчиком, что пока принципа "включить-выключить" достаточно. Читал статью Alex Gyver на эту тему -- там всё непросто, с полпинка не заведётся, нужно калибровать.


  1. NutsUnderline
    16.01.2025 00:10

    И тут пришлось осваивать C++, который терпеть не мог в универе.

    для ESP32 в принципе есть microPython и lua, но я лично не видел чтобы на них делали что то серьезное. под arduino - полно. и главное, работает, как говорится, вопреки "научному" подходу, в т.ч. потому что автор лично, морально и физически заинтересован чтобы оно работало хорошо.


    1. vano3d Автор
      16.01.2025 00:10

      Как ни странно да, работает и весьма неплохо. Если что-то выходит из строя, то по мелочи - кнопочки да релюшки. Слышал, целые бетонные заводы автоматизируют на Arduino )

      Ну и на microPython не решился, так как всё сообщество в основном использует родной C++, ну и библиотек полно.


  1. lelik363
    16.01.2025 00:10

    Когда вы основную работу делаете?


    1. vano3d Автор
      16.01.2025 00:10

      В рабочее время )

      Все вечера и выходные заняты самоделками.

      На самом деле всё что описал, было сделано в течение примерно года, поэтому такие вещи как программирование дисплея растягивались на недели. Просто накопился объём полезной информации, которой захотелось поделиться )


  1. alexhott
    16.01.2025 00:10

    Однозначно плюс.
    Тоже как-то на местном форму взялся в качестве хобби - контроллер для сушильного шкафа, сушить вещи у работяг. Со слов заказчика шкафы они делают, в шкафу вешалка для одежды и тепловентилятор. работники со смены вернулись, повешали /поставили вещи (обувь, верхняя одежда) как в обычный шкаф, нажали кнопку и нужно 2 часа держать температуру 40 градусов, а потом полчаса только вентилятор.
    Из готового куча терморегуляторов в корпусе и задешево, но таких чтобы сразу с таймером или нагрев+вентилятор на тот момент не нашли в принципе.
    На атмеге 8 тогда за пару дней плату накидал с двумя семисторами и х строчным дисплеем и кнопками - все на одной плате вместе с питанием. Заказчик испытал сказал что все работает как ему нужно, оплатил.
    Но потом пришел и сказал, что начальник просит на ардуино все делать и даже принес сам UNO-1 с шилдом дисплей+кнопки. Вроде как чтобы не заказывать платы, детали, сборку - все это долго и дорого, а собирать из готовых плат! Я его отправил купить пару твердотельных реле си датчик температуры. Написал прошивку для ардуины - даже красиво получилось с конфигурационным меню, настроками там всякими, недельным таймером и т.п. Запаять нужно было только один резистор для работы датчика температуры. Заказчик испытал - сказал что все круто, оплатил.

    Потом пришел с вопросом - а не знаешь где-бы корпус красивый задешево с кнопками нормальными, чтобы на шкаф поставить? На этом мы с ним и расстались.


    1. vano3d Автор
      16.01.2025 00:10

      Хорошая история! Только красивый корпус задёшево скорее трудновыполнимая задача. Если устройство серийное, можно приловчиться, но честно говоря, я от этого подустал немного, довольно сложно устанавливать дисплей, например. Сначала клею пистолетом, потом отмечаю посадочные отверстия, затем на них клею пластиковые стойки, примеряю, выравниваю, только потом модуль с дисплеем прикручиваю.

      Хороший корпус с контроллером это уже ПЛК, но это не всегда экономически обосновано.

      Есть ПЛК и на ESP32, но там ценник в пару раз дороже того же Siemens 1200.