Собираем бесконтактный датчик уровня воды для умного дома: от железа до Telegram-оповещений

Когда я впервые задумался о мониторинге бассейнов на своей небольшой рыбной ферме, самым слабым местом оказались традиционные поплавковые датчики. Они постоянно залипали, загрязнялись и требовали чистки. Тогда я открыл для себя емкостные сенсоры, и это изменило всё. Сегодня хочу поделиться практическим опытом сборки надежного бесконтактного измерителя, который не касается воды, но при этом четко сообщает о её наличии.

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

Комплектующие для сборки

Сразу скажу, что итоговая стоимость одного узла составила около 1210 рублей, но это с запасом на новый блок питания. Если у вас, как и у меня, скопилась коллекция старых зарядных устройств, можно уложиться в гораздо меньшую сумму. Основой выступает микроконтроллер Wemos D1 Mini — крошечная плата на базе ESP8266, которая обходится в 150-200 рублей. Сердцем же проекта становится емкостной датчик XKC-Y25-NPN, способный детектировать жидкость сквозь стенку емкости, его цена составляет около 500 рублей.

К этим двум ключевым элементам добавляются мелочи: резистор на 10 кОм, который стоит буквально 5 рублей, соединительные провода за ту же сумму и USB-кабель для первоначальной прошивки и питания — еще примерно 100 рублей. Если вы только начинаете погружение в тематику создания подобных устройств, рекомендую ознакомиться с базовыми принципами работы с микроконтроллерами, это сильно упростит понимание дальнейших шагов.

Физика процесса: как датчик видит воду через пластик

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

Однако есть несколько критичных нюансов, которые я выявил в процессе экспериментов. Во-первых, монтаж осуществляется исключительно снаружи, и между корпусом датчика и стенкой не должно быть воздушной прослойки. Я использовал обычный силиконовый гель, но подойдет и качественный двухсторонний скотч. Во-вторых, материал преграды имеет значение: стекло, акрил, ПВХ и полипропилен толщиной до сантиметра практически не влияют на точность. Производитель заявляет о работоспособности через керамику до 5 мм, но лично я такие условия не проверял. С деревом всё сложнее — его способность впитывать влагу способна искажать показания и замедлять реакцию. И запомните важное правило: металлические стенки экранируют поле полностью, поэтому сквозь стальную бочку датчик ничего не увидит.

Собираем схему

Схема подключения элементарна и состоит всего из нескольких проводников. Желтый сигнальный провод от датчика я подсоединил к цифровому пину D5 на плате Wemos. Коричневый, отвечающий за питание, посадил на линию 5V. Синий соединил с землей GND. Черный провод в этой конфигурации остается незадействованным. Для стабильности сигнала между пином D5 и шиной 5V обязательно устанавливается подтягивающий резистор на 10 кОм. На этом физический монтаж завершен.

Программная настройка через ESPHome

Для прошивки я традиционно использую среду ESPHome, которая идеально интегрируется с Home Assistant. Первым делом создается новое устройство на базе ESP8266. Затем я беру готовый YAML-конфиг из репозитория и полностью заменяю им автоматически сгенерированный код, не забывая перенести из шаблона пароль для OTA-обновлений.

В коде есть несколько важных комментариев, которые я всегда проверяю. Строки с пометкой "используем для первого запуска и тестирования" встречаются дважды, и их нужно раскомментировать на начальном этапе. Также обращаю внимание на параметр "Инвертируем", который отвечает за логику работы выхода. Для первой прошивки я подключаю плату напрямую к компьютеру через USB и выбираю режим ESPHome Web. В дальнейшем, когда всё настроено, обновления заливаю по воздуху, что невероятно удобно, ведь устройство может висеть где-нибудь в подвале.

Первое включение и проверка

Самый волнительный момент — подача питания. После включения я открываю логи устройства в веб-интерфейсе и начинаю тест. Самый простой способ — поднести руку к сенсору. Если схема собрана верно, на корпусе датчика загорается светодиод, а в консоли появляется соответствующая запись об обнаружении объекта. Это означает, что емкостное поле реагирует на изменение среды.

Если индикации нет, я прохожу всю цепочку заново: проверяю пайку, надежность контактов и правильность указания пинов в конфиге. Когда тест пройден успешно, возвращаюсь к YAML-файлу и меняю уровень логирования на ERROR, а также комментирую отладочный блок on_state, чтобы не засорять журнал лишними сообщениями.

Интеграция с Home Assistant и Telegram-алерты

Логика работы этого датчика принципиально отличается от температурных сенсоров. Он представляет собой простой ключ, который либо проводит ток, либо нет. Плата ESP не может определить, почему пропал сигнал: из-за поломки самого модуля или из-за реального отсутствия воды. Для меня обе эти ситуации являются аварийными, поэтому я объединил их в один сценарий оповещения.

Я создал две автоматизации. Первая фиксирует устранение проблемы и срабатывает, когда устройство подключается к сети, а бинарный сенсор наличия воды переходит в состояние "Обнаружена". Вторая, наоборот, реагирует на пропажу сигнала. Здесь я выставил задержку в три минуты для триггера отключения устройства, чтобы исключить лавину уведомлений при кратковременных скачках напряжения или перезагрузке роутера. Аналогичную задержку, но поменьше, я добавил и для статуса "Воды нет", чтобы отсечь ложные срабатывания от волн, если датчик расположен у самого края жидкости.

Сообщения в Telegram формируются динамически с использованием шаблонов Jinja. Я вытащил идентификаторы нужных сущностей через "Инструменты разработчика" в разделе "Состояния", и теперь бот присылает понятные уведомления с указанием имени устройства, его статуса и текущего состояния датчика уровня.

Управление через команды в мессенджере

Для оперативного получения статуса я внедрил поддержку команд в Telegram. В меню, которое открывается по /menu, появилась строка "/water", а в стартовое приветствие добавлена соответствующая кнопка. Механизм обработки скопирован с уже работающих у меня температурных запросов: создается автоматизация с триггером на команду или callback, которая отправляет в чат тот же самый блок информации о текущем состоянии датчика, но без заголовка об аварии. Это позволяет в любой момент с телефона проверить, всё ли в порядке с бассейнами.

Визуализация на панели управления

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

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

Комментарии

?
4 - 3 = ?