Найти в Дзене

Статья 9. Бесконтактный датчик уровня жидкости XKC-Y25-(NPN)

Для сборки покупаем: Итого один датчик - 1210 рублей. Можно сильно сэкономить, если взять "старый" блок питания и провод из имеющихся. Датчик XKC-Y25-NPN использует ёмкостной метод измерения. Он создаёт электрическое поле и определяет изменение ёмкости, когда диэлектрик попадает в зону чувствительности. Подобные датчики прекрасное решение для рыбной фермы, когда нужно контролировать уровень воды без контакта с жидкостью. Никаких поплавков, никакого риска загрязнения, никаких движущихся частей. Просто приклеил датчик к стенке — и он честно сообщает, есть вода или нет. Важно учитывать, что: Схема простая: Готово. Подробно процесс загрузки конфигурации описан в Статье 4 - https://dzen.ru/a/aXkabwruuSxUJ3lH, а далее краткая инструкция: 1) создаем новое устройство ESP8266 2) заходим в git и копируем код - https://github.com/RuVinSS/iFarm/blob/main/%D1%81apacitive-water-level-sensor.yaml 3) заменяем код в новом устройстве целиком (не забывая скопировать ota: password из автосгенерированного
Оглавление

Часть 1. Что потребуется

Для сборки покупаем:

  • Wemos D1 Mini (более подробно в Статье 4 https://dzen.ru/a/aXkabwruuSxUJ3lH) - 150-200 руб
  • XKC-Y25-NPN - 500 руб. Ищем в любом удобном маркетплейсе. Выглядит так:
-2
  • Резистор 10 кОм - 5 рублей
  • Соединительные провода - 5 рублей
  • USB-кабель Micro-USB/USB typeC - 100 руб. Для прошивки и питания.
  • Блок питания 5V[1-2]A - 400 руб.

Итого один датчик - 1210 рублей. Можно сильно сэкономить, если взять "старый" блок питания и провод из имеющихся.

Часть 2. Принцип работы

Датчик XKC-Y25-NPN использует ёмкостной метод измерения. Он создаёт электрическое поле и определяет изменение ёмкости, когда диэлектрик попадает в зону чувствительности. Подобные датчики прекрасное решение для рыбной фермы, когда нужно контролировать уровень воды без контакта с жидкостью. Никаких поплавков, никакого риска загрязнения, никаких движущихся частей. Просто приклеил датчик к стенке — и он честно сообщает, есть вода или нет.

Важно учитывать, что:

  • датчик крепится снаружи ёмкости;
  • между датчиком и стенкой не должно быть воздушного зазора (используйте силиконовый гель или двухсторонний скотч);
  • толщина и материал стенки влияет на чувствительность. Есть подстроичный резистор, которым можно отрегулировать чувствительность, но точно можно рассчитывать, что толщина в районе сантиметра для стекла, пластика (акрил и ПВХ) и полипропилена не повлияет на работу датчика, также может работать через керамику, но я не тестировал, судя по ответам ИИ будет работать при толщине 5мм, в теории будет работать и сквозь дерево, но тут у меня есть сомнения в адекватности и скорости реакции показаний датчика, так как само дерево впитывает воду;
  • через металл не работает, так как металл экранирует поле.

Часть 3. Схема подключения

Схема простая:

  • Желтый от датчика - D5 на плате
  • Коричневый от датчика - 5V на плате
  • Синий от датчика - GND на плате
  • Черный от датчика - не используется
  • Резистором соединяем D5 и 5V на плате

Готово.

Часть 4: Конфигурация ESPHome

Подробно процесс загрузки конфигурации описан в Статье 4 - https://dzen.ru/a/aXkabwruuSxUJ3lH, а далее краткая инструкция:

1) создаем новое устройство ESP8266

2) заходим в git и копируем код - https://github.com/RuVinSS/iFarm/blob/main/%D1%81apacitive-water-level-sensor.yaml

3) заменяем код в новом устройстве целиком (не забывая скопировать ota: password из автосгенерированного шаблона во вставляемый код из git)

4) обращаем на важные комментарии по коду, сейчас их 3, но могут быть со временем дополны. Ищем "используем для первого запуска и тестирования" два раза и "Инвертируем"

5) для первой установки используем "Plug into this computer" и ESPHome Web. Подключен датчик должен быть к ПК

6) для последующих обновлений "Wiressly", датчик обновляется по "воздуху", должен быть просто включен и подключен к wi-fi

Часть 5: Проверка в Home Assistant

Собрали, прошили, подключили к розетке, начинаем проверять.

Открываем логи устройства:

-3

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

-4

Если всё в порядке и работает, обновляем конфиг согласно рекомендациям в коде (уровень логирования меняем на ERROR и комментируем блок on_state), если нет - возвращаемся в начала и проверяем по пунктам.

Часть 7: Автоматизации в Telegram

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

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

Создаем две автоматизации:

1) триггер - устранение проблем(ы). В блок когда добавляем Устройство - Устройство - Выбираем датчик уровня - Выбираем, что он подключается

-5

Второй триггер в блоке Когда - Объект - Состояние - выбираем объект с "наличие воды" - переход из проблемных статусов в "Обнаружена"

-6

В блоке тогда - Telegram bot - Отправить сообщение - Выбираем в качестве цели чат с алертами, а в сообщение:

✅ *ПРОБЛЕМА С ДАТЧИКОМ УРОВНЯ УСТРАНЕНА*
*Устройство:*
• Имя: {{ state_attr('binary_sensor.zal_1_nalichie_vody_status_datchik_urovnia', 'friendly_name') }}
• Статус: {{ '✅ Онлайн' if is_state('binary_sensor.zal_1_nalichie_vody_status_datchik_urovnia', 'on') else '❌ Офлайн' }}
*Датчик туровня:*
• Имя: {{ state_attr('binary_sensor.zal_1_nalichie_vody_uroven_vody_bassein_1', 'friendly_name') }}
• Статус: {{ '✅ Вода обнаружена' if states('binary_sensor.zal_1_nalichie_vody_uroven_vody_bassein_1') == "on"else '❌ Воды нет' if states('binary_sensor.zal_1_nalichie_vody_uroven_vody_bassein_1') == 'off' else '⚠️ Статус не известен' }}

У вас устройства могут называться по другому, искать так - заходим в Настройки - Инструменты разработчика - вкладка Состояния - ищем бинарные сенсоры, по описанию находим устройство с уровнем воды и датчик. Устройство имеет device_class: connectivity, копируем то что написано синим, именно эти идентификаторы и необходимо указывать в алертах.

-7

В итоге вся автоматизация должна выглядеть так:

-8

2) триггер - обнаружение проблем(ы). В автоматизациях через три точки дублируем предыдущую автоматизацию. В устройстве меняем на "отключается" и я рекомендую поставить "Продолжительность" в 3 минуты на случай, если сеть/свет моргнули, перезагрузился роутер и так далее, об этом необходимо знать, но не через десяток оповещений от всех датчиков.

-9

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

-10

В сообщении в телегу меняем первую строку, остальной текст универсален и сам подстраивается под статусы:

🚨 *ВОЗНИКЛА ПРОБЛЕМА С ДАТЧИКОМ УРОВНЯ*

Часть 8: Команды в Telegram для получения текущего статуса

Если у вас только один тип меню, то выбирайте или п.1 и п.2 или п.3 и п.4

1) В команду /menu добавляем, в какую строку и на какое место выбираем как удобно:

- - - 💧 Наличие воды
- /water

2) Копируем с /temp и типом события telegram_callback и редактируем:

  • в "Когда" в данных события на "data: /water"
  • в "Тогда" в "Отправить сообщение" в "Сообщение" прописываем из алертов (в этой статье Часть 7) текст без первой строки с текстом про появлении или устрании проблемы с устройством (не буду его сюда вставлять - вы наверняка заменили имена устройства и датчика, поэтому сразу копируйте исправленный текст)

3) В команду /start добавляем на одну из строк /water

-11

4) Копируем с /temp и типом события telegram_command и редактируем:

  • в "Когда" в данных события на "command: /water"
  • вставляем тот же текст из Часть 7 без первой строки.

Часть 9: Добавляем датчик на панель

На ранее созданную панель, например, под температуру добавляем "Объекты":

-12

Заполняем как на скриншоте ниже

-13

В итоге панель выглядит так:

-14

Аптайм - это время в секундах прошедшее с момента запуска устройства.

Часть 10: Итоги

В этой статье:

  • Собрали устройство на Wemos D1 Mini с датчиком XKC-Y25-NPN
  • Написали код и прошили наше новое устройство
  • Настроили алерты в telegram
  • Настроили команды в telegram
  • Настроили меню в telegram
  • Добавили на панель данные с датчика

Кажется покрыты все необходимые сценарии, если вы не согласны пишите в комментариях.

Часть 11: Анонс

Идеи на следующие статьи остались прежними:

1) Красивые дашборды для визуализации;

2) Новые датчики для контроля уровня воды в бассейнах (частично тема закрыта данной статьей, но вариантов для тестов еще масса);

3) Диагностика оборудования (вибрация, ток);

4) Управление мощностями.