Как стать автором
Обновить

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

Время на прочтение10 мин
Количество просмотров13K
Прилетело НЛО и опубликовало эту фразу

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

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

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

Первая версия моего электронного реле [статья: 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.

Теги:
Хабы:
+21
Комментарии21

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн