Изучив рынок систем защиты от протечек воды, можно заметить, что цены на них начинаются от 15 тысяч рублей. За эту цену покупатель получает 2 крана с электроприводом, блок управления, и 1-3 датчика протечки воды. При этом системы такого рода полностью автономны и никоим образом не могут интегрироваться в умный дом.
Статья описывает создание своей системы, которая взаимодействует с умным домом по протоколу MQTT, а также может работать автономно за вдвое меньшую цену.
Статья предназначена для читателей, знакомых с процессом прошивки микроконтроллеров и протоколом MQTT.
Комплектующие
Начать подбор комплектующих стоит с шарового крана. Есть модели на 5, 12, 24, 220 вольт. От выбора крана зависит подбор обвязки микроконтроллера. В данном проекте используются краны модели Tsai Fan electric ball valve DN15 BSP DC12V CR301. Они имеют металлические шестерни привода, которые гораздо надежнее более дешевых аналогов с пластиковыми шестернями. Есть возможность ручного открытия/перекрытия подачи воды. Есть индикатор, который показывает положение привода крана. Модель 12 вольт позволит использовать свинцовые АКБ для бесперебойной и автономной работы системы.
Расшифровка модели:
- DN15 – соответствует диаметру трубы ½. Этот диаметр используется в большинстве российских квартир.
- DC12V - привод работает от постоянного напряжения 12 вольт.
- CR301 - привод имеет 3 провода: красный – сигнал открытия, зелёный – сигнал закрытия, черный – земля.
Аккумулятор можно выбрать любой емкости с токоотдачей более 1А (каждый кран потребляет 500Ма), предпочтительны свинцовые, которые используются в ИПБ. Выбрана модель Delta DTM 1207 12V 7Ah.
Для зарядки аккумулятора от блока питания 12 вольт и поддержания его напряжения на уровне 13.8 вольт необходим повышающий преобразователь.
Для питания микроконтроллера и низковольтной периферии необходим понижающий преобразователь, который снизит напряжение сети до допустимых 4.4 вольта.
Микроконтроллер выбран NodeMcu V3 на чипе CP2102.
В качестве автономного датчика протечки используются ардуиновские датчики обнаружения дождя. В качестве основного – датчики протечки Xiaomi, информацию от которых микроконтроллер получает по протоколу MQTT.
Для оповещения о нештатной ситуации используется зуммер 5 вольт.
Схема подключения компонентов
Принципиальная схема
Описание
Устройство питается от сети постоянного напряжения 12 вольт. Между сетью и аккумулятором стоит повышающий преобразователь напряжения 12 в 13.8 вольт, который позволяет заряжать и поддерживать напряжение батареи в верхней границе допустимого диапазона. Между аккумулятором и микроконтроллером стоит понижающий преобразователь 13.8 в 4.4 вольта. Это минимальное напряжение, на котором МК работает уверенно и не перегревается его встроенный преобразователь напряжения.
От понижающего преобразователя питание уходит в клеммные колодки + и -, к которым подключаются все низковольтные потребители. К клеммным колодкам подключены датчик протечки, блок реле, приводы крана.
К линии 13.8 вольт подключен потенциометр/построечный резистор номиналом не менее 10к. Он служит делителем напряжения для того, чтобы АЦП микроконтроллера могла работать с таким высоким напряжением.
В прошивке есть константа, которая обозначает, сколько позиций АЦП содержится в 1 вольте.
// сколько позиций АЦП в 1 вольте const float oneVolt = 70;
Подстроечным резистором необходимо добиться, чтобы величина, которую замеряет АЦП в вольтах, соответствовала реальной. Информация с датчиков так же выводится в монитор COM-порта.
К порту D4 подключен зуммер. При появлении положительного сигнала на ноге зуммер начинает работать. При подключении соблюдайте полярность.
К порту D5 подключен датчик протечки. Он состоит из площадки-сенсора дождя, который представляет собой резистор, меняющий сопротивление при попадании влаги, и компаратора напряжения, который устанавливает на ноге D5 положительный сигнал при достижении сенсором определенного сопротивления.
Алгоритм работы
Блок-схема
Текстовое описание
При включении устройства происходит автоматическое закрытие кранов. Сделано это для безопасности и выявления нежелательных сборов в работе устройства, если оно по каким-то причинам отключалось. Можно подключить до двух кранов воды на разные пины. В данном случае используются лишь один комплект пинов D0, D1 и 2 крана подключаются параллельно.
for (int i = 0; i < VALVE_COUNT * 2; i++) { pinMode(VALVE_PINS[i], OUTPUT); // отключаем релешки digitalWrite(VALVE_PINS[i], 1); } for (int i = 1; i <= VALVE_COUNT; i++) { valves[i-1] = false; setValveMode(i, false); }
Далее начинается основной цикл программы. В нём происходит подключение к Wi-Fi и серверу MQTT, а так же переподключение в случае разрыва соединения.
// подключаемся к wi-fi if (WiFi.status() != WL_CONNECTED) { if (!connectWifi()) return; } // подключаемся к MQTT серверу if (WiFi.status() == WL_CONNECTED) { if (!client.connected()) { if (!connectMqtt()) return; clientInitTopics(); } client.loop(); collectSensorData(); delay(1000);
При подключении к серверу MQTT подписка на следующие топики MQTT (функция clientInitTopics()):
- Топик режима кранов (включение/выключение подачи воды извне)
- Топик сигнализации (включение/отключение зуммера извне)
После инициализации и подписки на события устройство начинает периодически прослушивать события, опрашивать подключенные датчики и отправлять информацию по MQTT:
- Прослушать события, на которые оформлена подписка
client.loop() -> void callback(char* topic, byte* payload, unsigned int length)
- Получить статус автономного датчика протечки
collectSensorData() -> getLeakState();
- Если появилась протечка:
- Отправляется событие протечки по
- Отправляется событие включения сигнализации по
- Включается сигнализация
- Отключается подача воды
- Если прекратилась протечка:
- Отправляется событие прекращения протечки по
- Отправляется событие отключения сигнализации по
- Отключается сигнализация
- Если появилась протечка:
- Измерить заряда аккумулятора
collectSensorData() -> getCharge();
Накапливается 60 замеров заряда, далее отправляется значение напряжения в вольтах по MQTT. Так же отправляется значение напряжения в единицах АЦП для возможности расчёта статуса заряда на сервере.
Article2
Тестирование
Тестирование проводилось путём погружения в воду автономного и внешних датчиков протечки при отключенном внешнем питании.
При погружении ожидается включение сигнализации и перекрытие подачи воды.
При прекращении воздействия воды ожидается отключение сигнализации.
При отправке команды открытия крана по протоколу MQTT (нажатии на кнопку Выключить кран) ожидается открытие крана подачи воды.
При отправке команды закрытия крана по протоколу MQTT (нажатии на кнопку Включить кран) ожидается закрытие крана подачи воды.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U1 | Up-down DC-DC Converter | 0-36V. 10A | 1 | Мощность должна быть достаточной, чтобы заряжать АКБ | Поиск в магазине Отрон | |
U2 | Step-down DC-DC Converter | 0-36V, 1A | 1 | Поиск в магазине Отрон | ||
V1, V2 | Кран Tsai Fan electric ball valve | DN15 BSP DC12V CR301 | 2 | Время срабатывания - 5 секунд, ток потребления - 500ма | Поиск в магазине Отрон | |
B1 | Аккумулятор Delta DTM 1207 | 12V 7Ah | 1 | Поиск в магазине Отрон | ||
NMCU1 | NodeMcu V3 | 1 | Поиск в магазине Отрон | |||
S1 | Raindrops Detection Sensor Module For Arduino | 5V | 1 | Поиск в магазине Отрон | ||
BZ1 | Buzzer | 5V | 1 | Поиск в магазине Отрон | ||
RL1, RL2 | Relay module with optocoupler | 2 | Поиск в магазине Отрон | |||
RV1 | Подстроечный резистор | 20К | 1 | Маленький номинал будет греться! | Поиск в магазине Отрон | |
Скачать список элементов (PDF)
Прикрепленные файлы:
- mqtt-waterleaking.ino (10 Кб)
Комментарии (6) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
2) Датчики влажности имеют инерцию и непонятно как они помогут, если вода побежит по стене? У них значение от этого сразу станет 95%? А как они себя поведут, если я нагоню пара в ванной?
[Автор]
if (WiFi.status() != WL_CONNECTED) {
if (!connectWifi()) return;
}