Реле Давления v2.0 — revival

от автора

Прилетело НЛО и опубликовало эту фразу

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

Обзор реле давления первого поколения с дополнениями

Большая коробка с магией внутри :)
Большая коробка с магией внутри 🙂

Первая версия моего электронного реле [статья: https://habr.com/en/post/408933/] была большой, толстой и с кнопками по бокам, торчащими как рога у быка. Вот так всегда, когда нет ограничений по размерам, что уж нам мелочиться то…

Версия 1.0 вышла на всеобщую критику 4 года назад на базе Arduino (не оригинальной) с большим синим экраном на 4 строчки. Тогда это казалось волшебством, а сейчас обыденностью. Как быстро мы привыкаем к хорошим вещам и забываем радоваться мелочам. Итак: «погнали наших городских!«

Флешбэк

Кстати, помните фотку бани с прошлого поста? Загляните ради интереса https://habr.com/en/post/408933/, посмотрите. Спустя годы, сейчас у нас вот так:

2021 - вид на баню с харчевней (казан + тандыр)
2021 — вид на баню с харчевней (казан + тандыр)

Как пела в детстве наша дочь:  — И пусть летят гага… мы не забудем Вас никогда…»

Исправления, улучшения, обновления в процессе эксплуатации v1.5

Под шумок прилетело много обновлений со стороны пользователей, которые помогли улучшить код и натолкнули на мысль: «а нафиг столько всего… надо упрощать».

По факту перешел на mini Arduino, упростил экран, взяв меньший по габаритам и убрал боковые кнопки, которые выставляли верхнее и нижнее давление (нижнее давление говорит когда насос надо включать, верхнее — когда его надо выключать). А накой они, когда давление выставляешь один раз. Настройки начали «залетать» с прошивкой в виде статических переменных. В целом я решил пойти по пути разработки через тестирование прототипа. Внутри каждого из нас живет свой маленький дорогой наш, Маск Илонович:) — который периодически просыпается и подкидывает пищи для размышлений, надо лишь поверить в него и не оборачиваться на лица с «вопросами». 

Реле на 220 В, 40 А с радиатором охлаждения
Реле на 220 В, 40 А с радиатором охлаждения

В процессе понял, что реле на 25А греется от 1kW насоса, который колошматит на три дома. Заменил на 40А и посадил на радиатор. Боковые кнопки почти не использовал, поигрался и вырезал из прототипа. А придуманный мной алгоритм предварительного включения реле даже не запускал в продакшен. Придумал же себе такое дело, если скорость падения давления в баке превышает «некий» порог, не дожидаясь падения до нижнего давления, включать насос на опережение.

Arduino прошивка доступна здесь: https://github.com/abogdanovich/pressure_sensor_arduino

Фобии, ужастики и отказы за 4 года v1.5

За 4 года эксплуатации произошел только один отказ. Ошибки свои надо признавать и не давать другим их повторять. Данный отказ вылез через 2 года эксплуатации и чуть не стоил мне гидроаккумулятора и мокрых штанов. Глаза округлились, когда я увидел в гараже, как из-под гидроаккумулятора капает водичка…

Кто видел, как производят гидравлическое тестирование ракет на разрыв, тот поймет всю картину происходящего. Ну так вот… хорошо, что мой насос максимально 8Bar накачивает, а гидроаккумулятор способен выдерживать до 10Bar. Это и стало ключевым моментом спасения на максималках.

Ошибка закралась в коде, где идет проверка показания давления с дополнительной проверкой, для проверки выхода за пределы установленного значения. Так сказать, двойная проверка самого себя. И вот… случилось так, что я прошляпил в коде такой редкий случай, когда показания давления вызвали сбой, установилась ошибка датчика, и при этом, заблокировалась вторая проверка на выключение насоса, когда он выходит за пределы максимально допустимого давления.

Гидроаккумулятора накачанный на 8 Bar с максимальным давлением на 10 Bar
Гидроаккумулятора накачанный на 8 Bar с максимальным давлением на 10 Bar

Недоглядел Михалыч ? и словил «гидротест» бака. А сам бак у горловины поднялся на 1см от давления. Металл горловины, где сужение, выдавило немного наружу. Бак по-прежнему работает и не жалуется, только краска на нем облезла после испытаний 🙂

А теперь самое ценное за 4 года — 2 фотографии сенсора, который под давлением 4-5Bar проработал 4 года в водной среде. Изготовитель Китай. Датчик до сих пор работает!

Датчик давления 4 года работы в водной среде - 4-5Bar давления.
Датчик давления 4 года работы в водной среде — 4-5Bar давления.

Вода у нас чистая (60 метров скважина) и я прям не ожидал, что под давлением могут сформироваться такие экскременты :). Твердые кальцинированные образования с черно зеленоватым оттенком. Подозреваю в этом медь и латунь в контакте с другими металлами дают некую «контактную коррозию». Если у Вас есть мысли — напишите их в комментарии. Миф о том, что это чудо проработает месяц — разрушен официально 🙂 — хаха! Mythbusters прям получился. Заменил на новенький, прокачал бак и получил значения такие же, как на механическом манометре.

Других нареканий не было. Показания по давления совпадают с манометром с небольшим отклонением, которое заложено в самом датчике. Включение и выключение происходят тихо, насос работает исправно, ничего не греется, Ардуина не зависает, не поржавела, не замерзла (+2..+5 градусов зимой без отопления в гараже). Из функционала включения и выключения, оставил ещё хранение данных на самой Ардуина и загрузкой из памяти eeprom. Знаю, знаю… с eeprom баловаться можно до поры до времени, поэтому запись организовал с редким интервалом записи. И тут мне пришла мысля…

Cейчас народ подкатит с фразами «чем проще устройство тем надежнее…» — ну так они до сих пор и летают на аппаратах производства СССР.

Надо пробовать двигаться вперед!

Переход на новое реле давления v2.0 – MicroPython на базе ESP8266

И чего мне не спалось то….

Все бы хорошо… Шел бы тандыр коптить, да плов жарить, но нет, душа рвется в бой, да ещё с ESP8266, да MicroPython «намазывая». И в доме все на них, управляется, да через телефон. Приятно ж то, как ?.

Второе поколение реле давления на базе ESP8266 Полевые испытания
Второе поколение реле давления на базе ESP8266 Полевые испытания

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

Решил я податься во все тяжкие, да запилить на базе ESP8266 + MicroPython. Ещё данные хорошо бы в mongodb складывать и красивые графики рисовать. А потом много возможностей для анализа данных и генерации статистики. Полезно и лишним не будет. С такими набором данных можно будет и прогнозы подкачки давления в гидроаккумуляторе планировать. … опять спать не буду спокойно. Ай ну и ладно – интересно же!

Плюсы перехода на модуль esp8266

А что из плюсов и зачем на ESP8266, да ещё с каким-то MicroPython? А тут все просто: попробовал ESP8266 через телефон хоть раз, уже на Ардуино и смотреть не хочется. Не то что делать что-то там…

ИМХО, ESP8266 – это как электрокар против ДВС. Возможности обратной связи c выходом на просторы интернета, оперативность выполнения задач. Я молчу уже про монстра ESP32. Arduino хорош для пробы, этакий старый добрый корвет, с возможностью нарисовать «квадратики» и поморгать светодиодами, для старта автоматизаторов.  

Схема нового реле давления на базе MicroPython

Перейдем к исполнению нового устройства и рассмотрим поближе, какие компоненты у нас будут, что требуется установить и как мы будем код писать. Я вот сидел и думал, а как обозвать это устройство, а то устал писать «замена механического реле на электронное» — вот Вы подскажите вариант названия этого устройства в комментарии, будет интересно почитать Ваши предложения!

Схема обновленного устройства реле давления
Схема обновленного устройства реле давления

Пока я дописывал статью и тестировал датчик, спалил одну ESP8266 (причины не известны… такое бывает). Так же у меня развалился mini oled дисплей, а старый (4*20) дисплей отказался работать.

И что Вы думаете? Да я плюнул, выкинул обвес дисплея и решил идти дальше, по хардкорному, а точнее — NodeMCU + реле + датчик давления. Все, хватит эти красивые синие экранчики, теперь все будем смотреть через MQTT протокол на экране нашего телефона!

Итак у нас есть:

  • датчик давления, который мы купили на aliexpress

  • реле на 40А,

  • мини дисплей OLED I2C 128*32,

  • насос (автоматика)

  • ESP8266. Покупайте 12e\f модификацию на базе NodeMCU, сразу распаянный чип со всем обвесом. Раньше я покупал чистый чип и занимался ерундой, пытался припаивать нужные резисторы, но это все от лукавого 🙂 — ну его!

ESP8266 состоит из 2 плат. Основа «бутерброда» NodeMCU (например, модификаций много всяких), это которая с ножками и подписанными пинами, micro-USB входом и кнопочками RST (reset) и FLASH (ранее использовалась при прошивке), а так же самим чипом ESP8266, который питается от 3.3V с wifi антенной и металлизированным панцирем, закрывающим собственно сам чип от вредителей внешнего мира.

Analog-to-digital converter и делитель напряжения

Резко так погружаемся в те места, которые будем использовать при работе, но не те, которые Вы подумали :). Мы рассмотрим лишь то, что касается данной статьи.

Стоит рассказать несколько нюансов чтения данных ESP8266 через аналоговый пин A0 — ADC — он же Analog-to-digital converter.

Что бы замерять напряжение на ESP8266, ADC позволяет измерять интервал от 0 до 1V. Такой глупости нет на Arduino и это автоматически делает Arduino превосходным «безгеморным» бордом для начинающих. А вот кто вкусил ESP8266, тот уже наверняка познакомиться с понижением сигнала (напряжения) от датчика от стандартных 5V до max 1v. Вход A0 на борту NodeMCU, позволяет понижать напряжение с 3.3V до 1V. Там уже встроен делитель напряжения. Но у нас сенсор выдает 0.5 — 5v и нам надо что то с этим делать! Значит надо понизить с 5 до 3.3, а NodeMCU уже подхватит и понизит до 1V. Все просто, нам надо от сенсора припаять резистор 1K и 2K и между ними снимать показания и передавать на A0 pin.

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

C железом все понятно, крутим все провода, паяем, где-то «благим словцом» покрываем. Как соединить реле, сенсор и дисплей, показано на картинке выше. Не ленитесь «гуглить» в случае непонятного подключения. Реле заводим на 14 pin, дисплей на 4 и 5, а сенсор на adc 0. Питаться надо правильно, поэтому мощность блока для ваших устройств рассчитывайте, что бы хватало и для ESP8266 и для датчика давления. Выходное напряжение блока питания 5 вольт с силой тока > 0.5A. Берите с запасом, иначе можно «ловить» глюки и непонятные явления в виде летающих НЛО на вашей базе под названием «ESP8266».

Настройки программного обеспечения

Код писать будем в PyCharm, в котором можно установить библиотеку MicroPython и наслаждаться возможностью «заливать» \ «прожигать» код прямо из PyCharm IDE. Легко, просто и быстро!

Тошним с прошивкой MicroPython в Pycharm
  1. Ставим PyCharm Community IDE https://www.jetbrains.com/pycharm/download/#section=windows

  2. Устанавливаем plugin MicroPython https://plugins.jetbrains.com/plugin/9777-micropython

  3. Необходимо скачать и установить esptool https://github.com/espressif/esptool

  4. Зайти на сайт MicroPython и скачать последнюю стабильную прошивку для ESP8266 https://micropython.org/download/esp8266/

  5. Подключить ESP8266 к USB порту и выполнить в терминале 2 команды, предварительно узнав, какой COM порт был назначен ESP8266, когда Вы её воткнули в USB, выполняем команду:

    1. esptool.py —port COM_PORT erase_flash (сотрет начисто все, что там затаилось)

    2. esptool.py —port COM_PORT —baud 115200 write_flash —flash_size=detect -fm dio 0 esp8266-downloaded-formware-from-web-site.bin (esp8266-downloaded-formware-from-web-site.bin — имя файла, который Вы скачали с сайта MicroPython)

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

Код

Сливаем код https://github.com/abogdanovich/micropython_esp8266_pressure-sensor и открываем проект в PyCharm студии.

Нажимаем магическую комбинацию: Ctrl + Altr + S. Идем в Languages & Frameworks -> MicroPython -> и отмечаем чекбоксы: Enable MicroPython support | Auto-detect device path

Выделяя каждый файл проекта в окошке файлов проекта (слева), выбирайте Run <filename>, что бы залить каждый файл на ESP8266.

Незабываем! Проверить все настройки кода в главном файле main.py: —

  • выбрать выходные каналы информации: mqtt, display, db (mongodb).

  • Для mqtt_channels надо вбивать 2 названия, первое будет использоваться для отсылки данных по давлению, второе для экстренного отключения реле (в случае чего).

  • Указать начальные параметры для сенсора, нижнее и верхнее давление

sensor = SmartWaterSync(             wifi_ssid="",             wifi_pass="",             mqtt_username="",             mqtt_password="",             mqtt_channels=("smarty/water_pressure", "smarty/water_relay",),     # write topic, read topic (on\off relay)             output_channels=('mqtt', 'db'),     # possible: mqtt, display, db             low_pressure=4,                     # bottom ON pressure             high_pressure=5,                    # up OFF pressure             max_sensor_pressure=12,             # the max sensor pressure according to specification             sensor_raw_offset=43,               # define the default value from sensor             sensor_min_raw_for_error=30         # define this to call ERROR state and disable RELAY \ STOP working         )

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

  • чтение данных с сенсора и принятие решения о включении \ выключен

  • попытка подключиться к Wifi сети

  • попытка подключиться к MQTT серверу

  • отсылка данных в каналы, которые Вы определили при старте: mqtt, db, display.

При старте, все задачи стартуют и пытаются выполнять все что им велено. Я максимально постарался обвернуть все выполнения задач в свой try блок, что бы при возникновении ошибки, не прерывался общий процесс работы модуля и все шло своим путем. Есть идеи? — Пишите!

Сбор данных

На моем локальном сервере, который успешно пылиться прохлаждается в гараже уже 7-ой год, есть все что мне надо: mqtt сервер, видео сервер (motion), mongoDB и Flask.

Для записи данных я использую mongoDB + Flask связку. Можно отправлять данные напрямую из ESP8266 (честно, ещё сам не пробовал использовать эту библиотеку), а можно через http request «прокидывать» данные во Flask, производить нужные манипуляции и укладывать данные «штабелями» в базу. Это не совсем производительно, но дает возможность в предварительной обработке данных. Да фиг с ним, пусть что-то останется для Вашей оптимизации. Каждому по софтварному пирогу.

Описывать обработку и хранение данных на Flask \ mongoDB нет смысла, так как это выходит за рамки данной статьи, да и Вы уже знатно подустали. Отдельно отмечу мобильное приложение для чтения данных через mqtt протокол.

MQTT Dash — самое достойное приложение с поддержкой MQTT протокола

Сколько себя помню — столько пользуюсь самым крутым приложением поддерживающим напрямую протокол MQTT (только для Android пользователей). Автор — если ты читаешь хабру — от души, огромное спасибо тебе и продолжай развивать проект, фиксить баги. Ты — красавчик. Остальные приложения нервно курят в сторонке. Если кто-то готов возразить, милости прошу в комментарии. Спасибо автору, за возможность без рекламы пользоваться полноценным функционалом. Ссылка на приложение https://play.google.com/store/apps/details?id=net.routix.mqttdash

Если вы используете закрытый MQTT сервер какого либо онлайн сервиса (открытый даже не пытайтесь), или используете свой сервер, как в моем случае. Тогда Вы cможете настроить приложение MQTT Dash и подписаться на свой канал чтения\управления.

Заключение

Спасибо, что дочитали до конца. Произошло «возрождение» электронного реле, которое радует новым функционалом и возможностями. Накапливаю данные, которые я хочу попробовать обработать, проанализировать в дальнейшем. Если у Вас есть идеи и примеры обработки данных такого типа буду рад послушать Вас!

/ Alex B.


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


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *