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

в 14:05, , рубрики: android development, arduino, c++, diy-проекты, esp32, homeassistant, timeweb_статьи
Зачем покупать, когда можно… или как я собирал систему мониторинга фильтра воды и что из этого вышло - 1

Привет, Хабр!

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

❯ Начало

Все началось с покупки данного фильтра, радости было вагон и маленькая тележка: теперь не нужно покупать бутилированную воду, чайник и почки говорят спасибо. Радость радостью, но техническое обслуживание никто не отменял. Для оценки оставшегося ресурса фильтрующих элементов системы очистки, нам необходимо знать количество пропущенной воды через них. Конечно, можно действовать по простому: менять компоненты фильтра через определенный временной интервал, но это не наш метод — мне нужны данные и статистика, поэтому было решено усовершенствовать фильтр DIY системой мониторинга.

❯ Концепт системы мониторинга

Данная идея не нова, в интернете полно примеров реализации подобных систем, но в большинстве случаев, это связка расходомера + esp8266 с отправкой данных в систему «Умный дом», а мне хотелось чего-то большего, например, возможность работы системы как в автономном режиме с накоплением статистики, так и в составе системы «Умный дом».

В итоге я решил разработать систему мониторинга со следующими возможностями:

  • Подсчет расхода входящей воды;

  • Подсчет расхода сброса рассола (грязная вода со всякой гадостью после мембраны);

  • Контроль содержания солей в воде после фильтрации (TDS);

  • Контроль давления воды на входе фильтра;

  • Клиентское мобильное приложение (для возможности автономного использования системы).

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

Модернизированная схема системы фильтрации

Модернизированная схема системы фильтрации

❯ Компоненты системы

В системе применяются довольно распространенные элементы, которые часто применяются в DIY проектах:

  • Датчик потока жидкости SEA YF-S402B G1/4 5-15В - 2 шт;

Ниже представлен внешний вид данных расходомеров.

Датчики потока жидкости SEA YF-S402B G1/4

Датчики потока жидкости SEA YF-S402B G1/4
  • TDS meter v1.0, модуль измерения качества воды - 1 шт;

TDS meter v1.0

TDS meter v1.0

Как можно видеть на изображении, измерительный зонд датчика удачно вставляется в фитинг тройника G1/4. Ниже представлены технические характеристики данного датчика:

Питание (Vcc)

DC 3.3 - 5.5 B

Напряжение выхода

в диапазоне от 0 до 2.3 В

Рабочий ток потребления

3 - 6 мА

Измеряемый диапазон

0 - 1000 ppm

Интерфейс зонда

XH2.54-2P

Интерфейс питания

XH2.54-3P

Погрешность

± 10% (25 ℃)

  • Датчик давления USP-G41-0.5 - 1 шт;

Датчик давления USP-G41-0.5

Датчик давления USP-G41-0.5

Это датчик давления с аналоговым выходом, вот его некоторые характеристики:

Питание (Vcc)

5 В

Напряжение выхода

в диапазоне от 0,5 до 4,5 В

Рабочий ток потребления

10 мА

Измеряемое давление

в диапазоне от 0 до 0.5 МПа

Рабочая температура

в диапазоне от 0 до 85 градусов Цельсия

Время измерения показаний

2 мс

Погрешность от температуры

3,5 %

  • Микроконтроллер esp32 (в нашем случае kit набор) - 1 шт;

Kit набор esp32 и плата

Kit набор esp32 и плата

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

  • Различные фитинги (в моем случае, два тройника G1/4 и фитинг для датчика давления).

❯ Электроника системы мониторинга

Как уже было описано ранее, «мозгом» системы будет микроконтроллер esp32. Он удобен тем, что имеет на борту коммуникационный модуль, который позволяет работать как с Wi-Fi подключением, так и с Bluetooth. С учетом всех вышеуказанных компонентов, у нас «вырисовывается» следующая принципиальная схема.

Принципиальная схема системы мониторинга

Принципиальная схема системы мониторинга

❯ Корпус блока электроники

Как обычно, разработку модели корпуса я выполнял во САПР FreeCAD, кстати, у них вышла первая стабильная версия, впервые за последние десять лет. Ниже представлено изображение получившейся модели корпуса.

Модель корпуса блока электроники

Модель корпуса блока электроники

Корпус разрабатывался с учетом применения клеммника 2EDGK-5.08-06P от компании DEGSON.

❯ Сборка блока электроники

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

Компоненты блока электроники

Компоненты блока электроники

Как можно видеть на изображении, я припаял микроконтроллер esp32 к плате и припаял отрезки проводов к клеммник. И, да, в данном проекте нам не нужно изготавливать печатные плату. Подготовки все элементы, мы выполняем поэтапный монтаж. Сначала крепим разъем USB-C, который будет выполнять функцию порта питания системы.

Установка USB-C модуля

Установка USB-C модуля

Кстати, забыл сказать, что я демонтировал все разъемы с модуля TDS датчика, чтобы разместить их снаружи корпуса. Один разъем будет выполнять функцию подключения TDS зонда, а второй послужит нам для целей программирования, все как указано на принципиальной схеме. Далее устанавливаем плату модуля TDS.

Установка модуля TDS

Установка модуля TDS

Не забываем добавить линейный регулятор на 3,3 В и продолжаем монтаж согласно принципиальной схемы. Устанавливаем плату с esp32.

Установка платы с микроконтроллером

Установка платы с микроконтроллером

После сборки всей схемы, последним штрихом будет установка синего светодиода на крышку корпуса с помощью «супер клея». После всех манипуляций, мы видим следующую красоту.

Блок электроники в сборе

Блок электроники в сборе

❯ Установка компонентов системы на фильтр

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

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

Установка тройника для подключения датчика давления и расходомеров
Установка тройника для подключения TDS метра

Установка тройника для подключения TDS метра
Финальная установка под мойку с подключением блока электроники

Финальная установка под мойку с подключением блока электроники

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

Модель переходника

Модель переходника

Переходник печатался HIPS пластиком. И далее, с применением ленты Фум, была выполнена «стыковка» датчика с фитингом.

Датчик давления и фитинг

Датчик давления и фитинг

❯ Микро ПО модуля электроники

Разработка прошивки выполнялась в среде Arduino IDE. В качестве коммуникации для мобильного приложения используется BLE канал. Инициализация BLE выполняется с помощью следующего кода:

void ble_ini() {
    BLEDevice::init("SMART OSMOS");                                        // Инициализация BLE с именем устройства
    pServer = BLEDevice::createServer();
    pServer->setCallbacks(new MyServerCallbacks());
  
    BLEService *pService = pServer->createService(BLEUUID(SERVICE_UUID));
    pCharacteristic = pService->createCharacteristic(
                      BLEUUID(CHARACTERISTIC_UUID),
                      BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_READ |
                                         BLECharacteristic::PROPERTY_WRITE
                    );

    pCharacteristic->addDescriptor(new BLE2902());
    pCharacteristic->setCallbacks(new MyCharacteristicCallbacks());
  
    pService->start();
  
    BLEAdvertising *pAdvertising = pServer->getAdvertising();
    pAdvertising->start();
}

Код функции для обновления данных в характеристику:

void change_charact(String data) {  // Записываем данные в характеристику

    if (stat_connect) {
      pCharacteristic->setValue(data.c_str());
      pCharacteristic->notify();
    }
}

Ссылка на исходный код прошивки будет доступна конце статьи.

❯ Мобильное приложение

Как уже говорилось ранее, для функционирования системы в автономном виде (без использования «Умного дома»), я решил разработать мобильное приложение, которое отвечало бы за конфигурацию устройства и удобное представление параметров фильтра пользователю. Ниже представлены скриншоты экранов мобильного приложения.

Скриншоты экранов мобильного приложения

Скриншоты экранов мобильного приложения
Скриншоты экранов мобильного приложения

Скриншоты экранов мобильного приложения
Скриншоты экранов мобильного приложения

Скриншоты экранов мобильного приложения
Скриншоты экранов мобильного приложения

Скриншоты экранов мобильного приложения

Функционал мобильного приложения. Приложение разрабатывалось с интуитивно понятным интерфейсом. Давайте пройдемся по основному меню приложения:

  • Удалить устройство: данный раздел меню отвечает за вызов функции удаления MAC адреса устройства (речь идет о нашем модуле на esp32) из памяти приложения. При первом запуске приложения, оно скандирует BLE устройства поблизости и, при совпадении имени, сохраняет его MAC адрес в памяти для дальнейшего подключения. Функция «Удалить устройство» используется тогда, когда необходимо заменить устройство для подключения, например при смене контроллера esp32.

  • Ресурс фильтров: данный пункт меню открывает экран отображения ресурса компонентов фильтра и конфигурации лимитов использования. При нажатии кнопки «Изменить настройки», открывается окно ввода параметров, где необходимо указать или изменить настройки лимитов и коэффициентов счетчиков. Если параметры уже были сохранены ранее, то в диалоговое окно они вставляются автоматически, вам нужно лишь скорректировать необходимые значения, без необходимости ввода всех значений заново. Для удобного восприятия, на экране данного меню размещена схема фильтра и прогресс бары с отображением оставшегося ресурса компонентов фильтра.

  • Настройки подключения: данный пункт меню отвечает за подключение системы мониторинга к локальной сети Wi-Fi, для передачи данных в систему «Умного дома» по протоколу MQTT и функции OTA обновления. На экране данного раздела меню отображены основные параметры текущего соединения: имя сети, уровень сигнала, ip адрес подключения, настройки и статус MQTT соединения. Для подключения к Wi-Fi сети, необходимо выполнить поиск доступных сетей, нажав кнопку «Поиск сети». Поиск сети выполняется непосредственно на устройстве системы мониторинга, после завершения поиска, будет отображен список доступных сетей для подключения. Чтобы выполнить подключение к сети, необходимо нажать на элемент списка с желаемой сетью, далее откроется диалоговое окно, где необходимо будет указать пароль доступа к сети и параметры MQTT соединения. Чтобы активировать передачу данных, необходимо воспользоваться переключателем «Активировать передачу данных» на главном экране приложения.

  • Сброс счетчиков: данный элемент меню вызывает диалоговое окно, где необходимо указать какие счетчики вы хотите сбросить, активировав необходимые «чек боксы». Данная функция используется для сброса счетчика определенного фильтрующего элемента при его замене.

  • Обновление прошивки: чтобы каждый раз не лазить в Нарнию под мойку с ноутбуком для прошивки контроллера, я реализовал функцию обновления по «воздуху» (OTA обновление) в приложении. Данная функция активируется с помощью переключателя «Активировать ОТА обновление» на главном экране приложения. Эта функция защищена паролем, поэтому откроется диалоговое окно с предложением ввода пароля для активации. Данный пароль указывается в прошивке модуля системы мониторинга, вы его можете изменить по своему усмотрению.

String ota_en_password = "OeN12345"; // Пароль для активации функции OTA

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

Процесс обновления по «воздуху»

Процесс обновления по «воздуху»

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

  1. Иконка «облако» — индикатор наличия связи с MQTT сервером, где синий цвет означает - соединение активно, а красный цвет - отсутствие подключения.

  2. Иконка «антенна» — индикатор подключения к сети Wi-Fi, где синий цвет сигнализирует о активном соединении, а градации элемента указывают на уровень сигнала. Красная перечеркнутая иконка сигнализирует о потере подключения.

  3. Иконка «желтый треугольник с восклицательным знаком» — уведомляет об исчерпании ресурса элемента фильтра. Чтобы определить какой элемент нуждается в замене, необходимо перейти в меню «Ресурс фильтров».

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

Главный экран приложения

Главный экран приложения

❯ Интеграция в Home Assistant

В микро ПО модуля системы мониторинга, реализована интеграция в систему умного дома Home Assistant. Интеграция реализована с помощью функции «MQTT auto-discovery», необходимо лишь указать данные для подключения к MQTT серверу в конфигурации устройства, а все необходимые объекты появятся автоматически в Home Assistant. Ниже показан пример карточки объектов.

Карточка объектов Home Assistant

Карточка объектов Home Assistant

И для примера, графики некоторых параметров.

График давления воды на входе

График давления воды на входе
График потока (вход), среднее за пять минут

График потока (вход), среднее за пять минут

Ниже представлен код карточки объектов для Home Assistant.

type: entities
entities:
  - entity: sensor.flowin
    name: Входящий поток
  - entity: sensor.flowout
    name: Поток сброса рассола
  - entity: sensor.total5min
    name: Расход воды вход (5 мин)
  - entity: sensor.total5mout
    name: Расход сброса (5 мин)
  - entity: sensor.wqual
    name: Качество воды на выходе (TDS датчик)
    icon: mdi:approximately-equal
  - entity: sensor.totalin
    name: Накопленный расход вход
  - entity: sensor.totalout
    name: Накопленный расход сброса
  - entity: sensor.wpress
    name: Давление воды на входе
title: 'Фильтр воды (обратный осмос) '

❯ Итоги

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

Ссылки к статье:

Автор: CyberexTech

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js