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

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

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

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

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

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


  1. Alecseyyy
    12.10.2021 08:01

    А можно название датчика? В прошлой статье я тоже не нашел.


    1. Alex_Bogdanovich Автор
      12.10.2021 08:18
      +1

      Доброе утро - название датчика

      1PC New Arrival Pressure Transducer Sensor Oil Fuel for Gas Water Air Easy removal Carbon Steel Connection Sensors

      Пробуйте зайти на aliexpress и вбить в поиск "pressure transducer" - вы с легкостью найдете огромный выбор по давлению. Если буду сложности - напишите в директ.


      1. Alecseyyy
        12.10.2021 08:31
        +1

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


        1. usego
          12.10.2021 08:55
          +1

          У меня такой года 4 проработал, а потом начал умирать хитрым способом - показания давал с инерцией в минуту - две. Заменил на такой же датчик, пока полёт нормальный. И SSRы эти тоже под токами бывают залипают. Спалил один раз так кишки насоса. Термозащиту на насос надо обязательно! Ну и вообще безопасней такой релюхой контактором рулить. Правда щёлкает он громко...


          1. Kitsok
            12.10.2021 09:10
            +1

            У него заросло отверстие, совершенно аналогичная неисправность у меня случилась на обычном реле давления, симптом - задержка срабатывания


            1. diesel80
              12.10.2021 10:05
              +2

              Возможно вас спасет разделитель, например, такой:

              https://www.aplisens.ru/catalog/seals/S-CG1_1_2/


  1. Kitsok
    12.10.2021 08:45
    +2

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

    Среди моих автоматизаций единственное место, где умная электроника управляет насосом - перекачка воды из скважины с малым дебитом в колодец. МПА - сухой ход насоса, последним рубежом выступает тепловая защита обмоток, а первые защиты - встроенный в ESP32 вочдог и внешний ресетатель на 555 таймере. Была идея захардкодить (буквально, на ещё одном 555 таймере) ограничение времени непрерывной работы насоса, но было лень. Уверен, после выхода насоса из строя, лень пройдет.


  1. shadrap
    12.10.2021 14:04
    +1

    то ж не очень понял зачем SSR реле, у меня на подобных насосах стоят обычные контактные.

    Солид греется само по себе и жрет электричество впустую. У скважинного насоса есть пусковой блок , он ограничивает все пиковые стартовые токи, так что на выходе там не больше 1.5 кВт нагрузки. У меня на всякий задублированы функции отсечки насоса обычной штатной схемой, которая заведомо на больший предел установлена, а отсекается так же как у вас по маслянному датчику . Релюхи обычные 10А , 5 лет полет нормальный.


  1. ByTE1974
    12.10.2021 14:21
    +3

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

    Спасибо, приятно!
    Пытаюсь найти время, чтобы закончить начатый некоторое время назад новый проект-последователь. В этот раз под iOS и Android.


    1. Alex_Bogdanovich Автор
      12.10.2021 14:22

      Здорово, может сможете описать, что за последователь?


      1. ByTE1974
        12.10.2021 14:33
        +1

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


  1. sysprg
    12.10.2021 19:42
    +3

    К Вашему вопросу о делителях — когда не нужна высокая точность измерений и когда нет проблем с импедансом у ADC, тогда сдвиг уровня для ADC через делитель будет работать. Но вообще по-хорошему эту проблему (преобразования уровня на входе ADC) решают через схему с Op-Amp(s) и источником эталонного напряжения (reference voltage), так как без этого не обеспечить точных измерений. Также встроенные ADC в дешевых контроллерах часто не пригодны для точных измерений, так как зависят от напряжения питания, которое они используют в качестве эталонного, а оно не всегда бывает стабильным. Так что за пределами задачи измерений в "бытовой технике" решением было бы использовать внешний (более качественный) ADC + преобразователь уровня на операционных усилителях с источником reference voltage.


    1. Alex_Bogdanovich Автор
      12.10.2021 23:19

      Спасибо, очень ценный совет!


  1. Tsentr
    13.10.2021 00:24

    похоже что налет на датчике - это водоросли


    1. Alex_Bogdanovich Автор
      13.10.2021 14:06

      больше похоже на собрание микроорганизмов - так как вещество было чернозеленым ;)

      в воде хватает органики - поэтому за такое долгое время под давлением она собирается в таких узких местах


  1. Sjh
    13.10.2021 14:02

    Доброго времени суток. Я только начал знакомиться с ардуиной и прошу не пинать. Очень интересная тема и хотел повторить данный проэкт электронного реле давления. В первой версии у Вас имеются 2 кнопки установки мин и макс давления на какие пины их подключать в ардуино уно?


    1. Alex_Bogdanovich Автор
      13.10.2021 14:03

      Приветствую, Вам будет проще установить значения для макросов

      #define PMIN 2.0    //min for LOW level
      #define PMAX 4.0    //max for HIGH level 

      Это отбросит необходимость подключать кнопки, так как для кнопок ещё надо код писать по их обработке.


      1. Sjh
        13.10.2021 20:30

        Т.е в значении PMIN,я прописываю минимальное значение при котором запускается гидрофор, а PMAX отключается. И это будет равно значению соответственно 2 и 4 бар.


        1. Alex_Bogdanovich Автор
          14.10.2021 09:16

          Да, все верно.