Как сделать датчик протечки воды своими руками
Перейти к содержимому

Как сделать датчик протечки воды своими руками

  • автор:

Датчик предотвращения протечки воды своими руками

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

Датчик протечки воды 1

Простые правила борьбы с этой проблемой (особенно это касается старого жилого фонда, с изношенными сетями):

  • Регулярно осматривайте водопроводные трубы и элементы системы отопления на предмет дефектов, появления точечной ржавчины, герметичности соединений, и прочее.
  • Уходя из дому, перекрывайте входную задвижку на стояке.
  • Вне отопительного сезона закрывайте краны на батареях (если они имеются).
  • Используйте систему защиты от протечек.

Последний пункт списка мы рассмотрим подробнее.

Как сигнализировать об утечке воды

Решение вопроса пришло в быт из яхтенного мира. Поскольку судовые помещения нижнего яруса (особенно это касается трюмов) находятся ниже ватерлинии, в них регулярно скапливается вода. Последствия понятны, вопрос в том, как с этим бороться. Ставить для контроля отдельного вахтенного матроса нерационально. Тогда кто даст команду на включение откачной помпы?

Существуют эффективные тандемы: датчик наличия воды, и автоматическая помпа. Как только датчик обнаружит заполнение трюма, включается мотор помпы, и производится откачка.

Датчик протечки воды 2

Датчик воды — не что иное, как обычный поплавок на шарнире, соединенный с выключателем помпы. Когда уровень воды поднимается на 1–2 см, одновременно срабатывает сигнализация и мотор откачной помпы.

Удобно? Да. Безопасно? Разумеется. Однако такая система вряд ли подойдет для жилого дома.

  • Во-первых, если вода достигнет уровня 1–2 см по всей площади помещения, она через порог входной двери побежит на лестничную площадку (не говоря о соседях снизу).
  • Во-вторых, откачная помпа совершенно не нужна, поскольку необходимо немедленно найти и локализовать причину прорыва.
  • В-третьих, поплавковая система для помещений с плоским полом неэффективна (в отличие от плавсредств с килеватой формой днища). Пока наберется «нужный» для срабатывания уровень, от сырости развалится дом.

Стало быть, нужна более чувствительная система сигнализации от протечек. Это вопрос датчиков, а исполнительная часть бывает двух видов:

Датчик протечки воды 3

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

Датчик протечки воды 4

2. Отключение подачи воды (к сожалению, такая конструкция не работает с системой отопления, только водопровод). После главной задвижки, которая подает воду от стояка в квартиру (не важно, до или после прибора учета), установлен электромагнитный клапан. При подаче сигнала от датчика, вода перекрывается, и дальнейший потоп останавливается.

Естественно, система отключения воды еще и сигнализирует о проблеме любым из вышеуказанных способов. Эти устройства в широком ассортименте предлагаются сантехническими магазинами. Казалось бы, материальный ущерб от потопа потенциально выше цены спокойствия. Однако большинство граждан живет по принципу «пока гром не грянет, мужик не перекрестится». А более прогрессивные (и рачительные) владельцы жилья, изготавливают датчик протечки воды своими руками.

Принцип работы датчиков протечек

Говоря о блок схеме — все очень просто. Некий элемент фиксирует жидкость в точке его размещения, и подает сигнал в исполнительный модуль. Который, в зависимости от настроек может подавать световые или звуковые сигналы, и (или) дать команду на перекрытие задвижки.

Как устроены датчики

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

Чаще всего применяется контактный датчик, который использует естественную способность воды проводить электрический ток.

Датчик протечки воды 5

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

Датчик протечки воды 6

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

Самодельный датчик простейшей конструкции

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

Датчик протечки воды 7

Базовый элемент (VT1) — NPN транзистор серии BC515 (517, 618 и им подобные). С его помощью подается питание на звуковой сигнализатор (B1). Это простейший готовый зуммер со встроенным генератором, который можно приобрести за копейки, или выпаять из какого-нибудь старого электроприбора. Питание требуется порядка 9 вольт (конкретно для этой схемы). Есть варианты под 3 или 12 вольтовые батарейки. В нашем случае используется элемент питания типа «Крона».

Как работает схема

Секрет в чувствительности перехода «коллектор-база». Как только через него начинает протекать минимальный ток, открывается эмиттер, и подается питание на звуковой элемент. Раздается писк. Параллельно можно подключить светодиод, добавляя визуальную сигнализацию.

Сигнал к открытию коллекторного перехода дает та самая вода, о наличии которой надо сигнализировать. Из металла, не подверженного коррозии, изготавливаются электроды. Это могут быть два кусочка медной проволоки, которую можно просто облудить. На схеме точки подключения: (Электроды).

Собрать такой датчик можно на макетной плате.

Датчик протечки воды 8

Затем прибор помещается в пластиковую коробочку (можно в мыльницу), в донышке которой проделаны отверстия. Желательно, чтобы при попадании воды, она не касалась монтажной платы. Если хочется эстетики, печатную плату можно вытравить.

Недостаток такого датчика — различная чувствительность к разным типам воды. Например, дистиллят от протекающего кондиционера может остаться незамеченным.

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

Более сложная схема, с регулятором чувствительности

Себестоимость такой схемы тоже минимальная. Выполняется на транзисторе КТ972А.

Датчик протечки воды 9

Принцип работы аналогичен предыдущему варианту, с одним отличием. Сформированный сигнал о наличии протечки (после открытия эмиттерного перехода транзистора), вместо сигнального устройства (светодиод или звуковой элемент), подается на обмотку реле. Подойдет любое слаботочное устройство, типа РЭС 60. Главное, чтобы напряжение питания схемы соответствовало характеристикам реле. А уже с его контактов, информацию можно подавать на исполнительное устройство: система «умный дом», сигнализация, GSM передатчик (на мобильный телефон), аварийный электромагнитный клапан.

Дополнительное преимущество такого исполнения — возможность настройки чувствительности. С помощью переменного резистора регулируется ток перехода «коллектор-база». Вы можете настроить порог срабатывания от появления росы или конденсата, до полноценного погружения датчика (контактной пластины) в воду.

Датчик протечки на микросхеме LM7555

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

Датчик протечки воды 10

Для повышения порога срабатывания, ее лучше выполнить в виде отдельной пластины, соединенной с основной схемой проводами с минимальным сопротивлением.

Оптимальный вариант на фото:

Датчик протечки воды 11

Если вы не хотите тратить деньги на покупку подобного «концевика», его можно вытравить самостоятельно. Только обязательно покройте оловом контактные дорожки, для повышения коррозийной устойчивости.

Как только между дорожками появляется вода, пластина становится замкнутым проводником. Через встроенный в микросхему компаратор начинает протекать электрический ток. Напряжение быстро возрастает до порога срабатывания, при этом открывается транзистор (который выполняет роль ключа). Правая часть схемы — командно исполнительная. В зависимости от исполнения, происходит следующее:

  1. Верхняя схема. Срабатывает сигнал на так называемом «бузере» (пищалке), и светится опционально подключенный светодиод. Есть еще один вариант использования: несколько датчиков объединяются в единую параллельную схему с общим звуковым сигнализатором, а светодиоды остаются на каждом блоке. При срабатывании звукового сигнала, вы безошибочно определите (по аварийному свечению), какой именно блок сработал.
  2. Нижняя схема. Сигнал от датчика поступает на электромагнитный аварийный клапан, расположенный на стояке подачи воды. В этом случае, вода перекрывается автоматически, локализуя проблему. Если вас в момент аварии нет дома, потоп не случится, материальные потери будут минимальными.

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

Датчик протечки воды 12

Схему можно выполнить по макету печатной платы, которая одинаково подойдет как для LM7555, так и для LM555. Устройство питается от напряжения 5 вольт.

Датчик протечки воды 13

Важно! Блок питания должен быть с гальванической развязкой от 220 вольт, чтобы опасное напряжение не попало в лужу воды при протечке.

На самом деле, идеальный вариант — использование зарядного устройства от старой мобилки.

Себестоимость подобной самоделки не превышает 50–100 рублей (на покупку деталей). При наличии в запасниках старой элементной базы, можно свести затраты к нулю.

Корпус — на ваше усмотрение. При таких компактных размерах, найти подходящую коробочку не составит труда. Главное, чтобы от общей платы до контактной пластины датчика, расстояние было не более 1 метра.

Общие принципы размещения датчиков протечки

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

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

Датчик протечки воды 14

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

На самом деле, достаточно 1–2 датчиков на потенциально опасное помещение. Если это ванная комната, или туалет — как правило, имеется порожек входной двери. В этом случае, вода набирается, как в поддон, слой может достигать 1–2 см, пока жидкость не прольется через порог. В этом случае, место установки не критично, главное, чтобы датчик не мешал передвигаться по комнате.

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

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

Не лишним будет установка датчика в нишу, по которой проходят стояки трубопроводов и канализации.

Наиболее критичные точки прорыва воды

При равномерном рабочем давлении, риск протечки минимален. Тоже самое относится к смесителям и кранам, если вы открываете (закрываете) воду плавно. Слабое место системы трубопроводов проявляет себя при гидроударах:

  • клапан подачи воды в стиральную машину при запирании создает давление, в 2–3 раза превышающее номинал водопровода;
  • то же самое, но в меньшей степени, относится к запирающей арматуре бачка унитаза;
  • радиаторы отопления (а также места их подключения к системе) зачастую не выдерживают тестовую опрессовку, которую проводят предприятия теплоснабжения.

Как правильно размещать датчики

Контактная пластина должна располагаться как можно ближе к поверхности пола, не касаясь его. Оптимальная дистанция: 2–3 мм. Если контакты разместить непосредственно на полу, будут возникать постоянные ложные срабатывания из-за конденсата. Большое расстояние снижает эффективность защиты. 20–30 миллиметров воды, это уже проблема. Чем раньше сработает датчик, тем меньше потери.

Справочная информация

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

Классификация устройств

  • По количеству вторичных защитных устройств на объекте (запорных аварийных кранов с электромагнитным приводом). Датчики протечки не должны перекрывать все водоснабжение, если запорные системы разнесены по потребителям. Локализуется только линия, на которой обнаружена протечка.
  • По способу подачи информации об аварии водопровода (системы отопления). Местная сигнализация предполагает нахождение людей на объекте. Дистанционно передаваемая информация организуется с учетом оперативного прибытия владельца или ремонтной группы. В противном случае, она бесполезна.
  • Способ оповещения: локальная звуковая или световая сигнализация (на каждом датчике), или вывод информации на единый пульт.
  • Защита от ложных срабатываний. Как правило, точно настраиваемые датчики работают эффективнее.
  • Механическая или электрическая защита. Пример механики — системы «Аква стоп» на подающих шлангах стиральных машин. Сигнализация на таких устройствах отсутствует, сфера применения ограничена. Самостоятельное изготовление невозможно.

Вывод

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

Как сделать датчик протечки воды, даже если вы не электрик

Ничто так не налаживает отношения с соседями, как сухие потолки. И это − суровая правда жизни, потому что в многоквартирных домах протечки случаются не только по вине коммунальных служб, но и по причине забывчивости или неосторожности жильцов. Между прочим, «забугорные» строители такой вопрос решают довольно просто: например, финны делают по периметру ванной комнаты сток, который выходит даже не в канализацию, а в сточную систему снаружи здания. Да, это хлопотно, но зато вы можете повернуть кран на пол и лить воду сколько угодно, не беспокоясь, что ваши соседи снизу придут со счётом за ремонт. Идея простая, но почему-то нашим застройщикам она пока не приходила в голову, так что приходится постоянно быть настороже. Ребёнок устроил в ванной морской бой или прохудился клапан в стиральной машине, прорвало трубу под раковиной – все эти проблемы легко решить, если вовремя среагировать. Только не всегда это получается, ведь не будешь же каждые пять минут заглядывать под ванну. А именно этого времени хватит воде для того, чтобы просочиться сквозь перекрытия и испортить соседу свежий ремонт. Спасёт ситуацию только чуткая сигнализация, которая оповестит вас о протечке немедленно. Сделать её самостоятельно довольно просто, если воспользоваться советами автора YouTube-канала Руки из плеч.

Что нужно купить для датчика протечки воды, даже если вы − не электрик

Вы никогда не имели дела с электрикой? Не беда, здесь вам вполне достаточно знаний школьного курса физики и немного решимости. Если вы когда-нибудь собирали конструктор, у вас получится. Датчик состоит всего лишь из нескольких деталей, которые просто собрать при помощи небольшого паяльника. Ещё из инструментов неплохо было бы иметь под рукой клеевой пистолет.

А теперь о деталях. Вы найдёте их в любом магазине радиоэлектроники, и стоят они копейки.

Итак, смотрим, что вам нужно приобрести для одного датчика.

Датчик протечки воды своими рукамиТранзистор лучше взять ВС 517 с большим коэффициентом усиления

Кроме перечисленного вам потребуется миниатюрная пищалка с генератором, которая и оповестит вас об угрозе.

Простая схема для сигнализатора протечки

Любой электрический прибор начинается со схемы. Это план ваших действий, который поможет справиться с задачей без ошибок.

Схема сборки сигнализатора протечки, включающая последовательность соединения транзистора, батарейки, резистора и пищалки

Схема понятна даже школьнику, остаётся только соединить все детали и поместить их в подходящий корпус

Сборка сигнализатора протечки на практике

Начать сборку следует с двух деталей: пищалки и крышки для батарейки.

Плюсовой выход крышки для батарейки следует соединить с плюсовым выходом пищалки. Обратите внимание на маркировку на мелких деталяхМинусовой контакт пищалки припаивается к левой ноге транзистора, коллектору. А к правой ноге, эмиттеру, нужно припаять минусовой контакт батарейкиДальше нужно поместить и припаять резистор между эмиттером и средней ногой резистораСледующий этап – припаивание проводов. К средней ноге резистора припаивается один из проводковА второй соединяется с минусовым контактом батарейки лёгкой пайкойВ итоге готовая рабочая схема выглядит вот так. Это миниатюрное соединение, которое легко помещается в крышку от сока. При контакте с водой проводки, которые соприкасаются с влагой, замыкает, и срабатывает пищалка, которая получает энергию от встроенной батарейки

Как и из чего сделать корпус для сигнализатора

Корпус для сигнализатора должен быть таким же миниатюрным. Самый подходящий по размерам вариант – крышка от литровой банки из-под молока или от упаковки с мыльными пузырями.

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

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

Беспроводной датчик протечки воды на nRF52832, DIY проект

Приветствую всех читателей раздела «DIY или Сделай сам» на Habr! Сегодня хочу рассказать об очередном своем проекте, эта статья будет о датчике протечки воды на батарейном питании. Как и в предыдущих проектах, это устройство работает на микроконтроллере nRF52832. Есть три версии этого датчика, во всех трех версиях используются готовые модули с nRF52832, в этой статье речь пойдет о средней версии в котором используется модуль YJ-17103 от HOLYIOT.

Детектор жидкости реализован на микросхеме SN74LVC1G00 | Даташит. Кратко опишу схемное решение и принцип работы. Электрод №1 датчика подключен к земле, электрод №2 датчика подключен к ножкам A и В микросхемы SN74LVC1G00 через резистор 100Oм, так же к этой линии подведено 3.3в через резистор 1М, так же в схему добавлена емкость. Когда контакта с жидкостью нет на ножках микросхемы A и В логическая единица, соответственно на ножке Y подключенной к ножке МК (програмно настроенной на детектирование прерывания через встроенный компоратор) логический ноль. Как только произойдет контакт с жидкостью и на ножках A и B будет низкий уровень, то сигнал на ножке Y микросхемы SN74LVC1G00 так же инвертируется, что вызовет прерывание, которое в свою очередь выведет МК из сна. В дальнейшем микросхема SN74LVC1G00 возможно будет заменена на микросхему SN74LVC1G14 | Даташит, а возможно и не будет :). Детектирование жидкости с ножки МК через встроенный компоратор не планируется.

Как и все другием мои проекты, этот тоже является Arduino проектом и как и все проекты за последний год(примерно) этот так же сделан под проект Mysensors. Как и в других своих статьях, немного затрону тему Mysensors и в этой статье.

Mysensors это сообщество разработчиков програмного обеспечения с открытым исходным кодом. Данный протокол разработан сообществом для создания радио и проводных сетей. Первоначально проект разрабатывался для платформы Arduino. Стандартная Mysensors сеть состоит из гейта(шлюза), ретранстяторов и конечных устройств(ноды). В одной сети может быть до 254 устройств, каждое из устройств может быть оснащено до 254-мя сенсорами, датчиками, исполнительными узлами. Работа сети, обработка данных, выполнение сценариев и взаимодействие в другими устройствами осуществляется с помощью контроллера УД. Некоторые из контроллеров(Мажордомо) поддерживают работу с несколькими сетямии Mysensors(мультигейтовость), соответственно сетей может быть намного больше одной управляемых одним контроллером.

Поддерживаемые аппаратные платформы: Linux / Raspberry Pi / Orange Pi | ATMega 328P | ESP8266 | ESP32 | nRF5x(Cortex M0, M4) | Atmel SAMD, используемое в Arduino Zero (Cortex M0) | Teensy3(MK66FX1M0VMD18) | STM32F1.

Поддерживаемые радиопередатчики: NRF24L01 | RFM69 | RFM95 (LoRa) | nRF5x

Поддерживаемый проводной тип связи: RS485

Поддерживаемые типы связи между гейтом и контроллером: MQTT | Serial USB | WiFi | Ethernet | GSM

Вернемся к датчику протечки. Устройство работает от батареек CR2430, CR2450 или CR2477. Потребление во сне составляет менее 3мкА. Скорость передачи — 250Kbps, 10-15ms. Энергопотребление в момент передачи составляет не более 8мА. Теоретически срок работы на одной батарейке примерно равен сроку саморазряда батарейки. На практике все конечно менее радужно, так как есть процедура регистрации, презентации, периодическая отправка уровня заряда, так что срок работы от одной батарейки скорее ближе к значению — срок саморазряда/2 :). Питание осуществляется напрямую от батарейки, контроль уровня заряда батарейки производится непосредственно с пина VDD. В датчике установлен RGB LED для индикации регистрации датчика в сети, для индикации сервисных режимов и для индикации детектирования протечки. Естественно светодиод может не использоваться вообще или использоваться частично.

Плату устройства была сделана для дальнейшего ее изготовления по методу ЛУТ. Поэтому из нюансов такого варианта это увеличенная ширина трасс, увеличенные расстояния между трассами, увеличенные площадки под межслойные переходы(для более удобного сверления отверстий), отсутствие заливки пустых областей из-за небольшой площади платы. Позже был сделан вариант для заказа на производстве.

Корпус устройства был спроектирован из двух частей. Верхняя крышка с местами для крепления платы и нижняя часть(ванночка) с 2 отверстиями под стальные контактные винты(герметизация возможна силиконовым герметиком под шляпку винтов или не требуется) и двумя трубками под кнопки (сброс и режимы) на плате. Печать выполнялась на SLA 3D принтере ANICUBIC PHOTON. После печати была выполнена обработка наждачной бумагой 320 и 1000 для подгонки стыков крышки и дна корпуса.

Фотографии датчика

Код тестовой программы

bool button_flag; bool send_flag; bool detection; bool nosleep; byte timer; bool AckG; bool AckB; bool AckL; bool PRESENT_ACK; bool flag_lq; unsigned long SLEEP_TIME = 172800000; //48 hours //unsigned long SLEEP_TIME = 3600000; //1 hour unsigned long oldmillis; unsigned long newmillis; unsigned long interrupt_time; unsigned long SLEEP_TIME_W; uint16_t currentBatteryPercent; uint16_t batteryVoltage = 0; uint16_t battery_vcc_min = 2300; uint16_t battery_vcc_max = 3000; int16_t linkQuality; #define MY_DISABLED_SERIAL #define MY_RADIO_NRF5_ESB #define MY_RF24_PA_LEVEL (NRF5_PA_MAX) //#define MY_PASSIVE_NODE #define MY_NODE_ID 86 #define MY_PARENT_NODE_ID 0 #define MY_PARENT_NODE_IS_STATIC #define MY_TRANSPORT_UPLINK_CHECK_DISABLED #define INTR_PIN 3 //(PORT0, gpio 5) #include // see https://www.mysensors.org/download/serial_api_20 #define W_L_SENS_CHILD_ID 0 #define LINK_QUALITY_CHILD_ID 253 MyMessage sensMsg(W_L_SENS_CHILD_ID, V_VAR1); //MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE); void preHwInit() < pinMode(POWER_PIN, OUTPUT); digitalWrite(POWER_PIN, HIGH); wait(3000); pinMode(RED_LED, OUTPUT); digitalWrite(RED_LED, HIGH); pinMode(GREEN_LED, OUTPUT); digitalWrite(GREEN_LED, HIGH); pinMode(BLUE_LED, OUTPUT); digitalWrite(BLUE_LED, HIGH); pinMode(PIN_BUTTON, INPUT); pinMode(W_L_SENS, INPUT); //pinMode(24, OUTPUT); //pinMode(20, OUTPUT); >void before() < NRF_POWER->DCDCEN = 1; NRF_UART0->ENABLE = 0; digitalWrite(BLUE_LED, LOW); sleep(50); digitalWrite(BLUE_LED, HIGH); > void presentation() < sendSketchInfo("EFEKTA ST WL Sensor", "1.1"); present(W_L_SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS"); present(LINK_QUALITY_CHILD_ID, S_CUSTOM, "LINK_QUALITY"); >void setup() < digitalWrite(BLUE_LED, LOW); wait(100); digitalWrite(BLUE_LED, HIGH); wait(200); digitalWrite(BLUE_LED, LOW); wait(100); digitalWrite(BLUE_LED, HIGH); lpComp(); detection = false; SLEEP_TIME_W = SLEEP_TIME; wait(100); sendBatteryStatus(); wait(100); send(sensMsg.set(detection), 1); wait(2000, 1, V_VAR1); >void loop() < if (nosleep == 0) < oldmillis = millis(); sleep(SLEEP_TIME_W); >if (detection) < if (digitalRead(PIN_BUTTON) == 1 && button_flag == 0 && digitalRead(W_L_SENS) == 0) < //back side button detection button_flag = 1; nosleep = 1; >if (digitalRead(PIN_BUTTON) == 1 && button_flag == 1 && digitalRead(W_L_SENS) == 0) < digitalWrite(GREEN_LED, LOW); wait(10); digitalWrite(GREEN_LED, HIGH); wait(50); >if (digitalRead(PIN_BUTTON) == 0 && button_flag == 1 && digitalRead(W_L_SENS) == 0) < nosleep = 0; button_flag = 0; digitalWrite(GREEN_LED, HIGH); lpComp_reset(); >if (digitalRead(W_L_SENS) == 1 && digitalRead(PIN_BUTTON) == 0) < //sens detection newmillis = millis(); interrupt_time = newmillis - oldmillis; SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time; send(sensMsg.set(detection), 1); wait(3000, 1, V_VAR1); if (AckG == 1) < while (timer < 10) < timer++; digitalWrite(BLUE_LED, LOW); wait(20); digitalWrite(BLUE_LED, HIGH); wait(30); >timer = 0; AckG = 0; wait(200); > else < while (timer < 10) < timer++; digitalWrite(RED_LED, LOW); wait(20); digitalWrite(RED_LED, HIGH); wait(30); >timer = 0; send(sensMsg.set(detection), 1); wait(3000, 1, V_VAR1); if (AckG == 1) < while (timer < 10) < timer++; digitalWrite(BLUE_LED, LOW); wait(20); digitalWrite(BLUE_LED, HIGH); wait(30); >timer = 0; AckG = 0; > else < while (timer < 10) < timer++; digitalWrite(RED_LED, LOW); wait(20); digitalWrite(RED_LED, HIGH); wait(30); >timer = 0; > lpComp_reset(); > > if (SLEEP_TIME_W < 60000) < SLEEP_TIME_W = SLEEP_TIME; sendBatteryStatus(); >> else < //if (detection == -1) < SLEEP_TIME_W = SLEEP_TIME; sendBatteryStatus(); >> void receive(const MyMessage & message) < if (message.type == V_VAR1) < if (message.sensor == W_L_SENS_CHILD_ID) < if (mGetCommand(message) == 1) < if (message.isAck()) < AckG = 1; >else < >> > > if (message.type == I_BATTERY_LEVEL) < if (message.sensor == 255) < if (mGetCommand(message) == 3) < if (message.isAck()) < AckB = 1; >else < >> > > if (message.type == V_VAR1) < if (message.sensor == 255) < if (mGetCommand(message) == 1) < if (message.isAck()) < AckL = 1; >else < >> > > > void sendBatteryStatus() < wait(100); batteryVoltage = hwCPUVoltage(); wait(20); if (batteryVoltage >battery_vcc_max) < currentBatteryPercent = 100; >else if (batteryVoltage < battery_vcc_min) < currentBatteryPercent = 0; >else < currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min); >sendBatteryLevel(currentBatteryPercent, 1); wait(3000, C_INTERNAL, I_BATTERY_LEVEL); if (AckB == 1) < AckB = 0; flag_lq = 1; >else < sendBatteryLevel(currentBatteryPercent, 1); wait(3000, C_INTERNAL, I_BATTERY_LEVEL); if (AckB == 1) < AckB = 0; flag_lq = 1; >> //send(powerMsg.set(batteryVoltage), 1); //wait(2000, 1, V_VAR1); //sleep(10000); // if (flag_lq == 1) < linkQuality = calculationRxQuality(); wait(50); sendSignalStrength(linkQuality, 1); wait(2000, 1, V_VAR1); if (AckL == 1) < AckL = 0; >else < sendSignalStrength(linkQuality, 1); wait(2000, 1, V_VAR1); if (AckL == 1) < AckG = 0; >> flag_lq = 0; > > void lpComp() < NRF_LPCOMP->PSEL = INTR_PIN; NRF_LPCOMP->ANADETECT = 1; NRF_LPCOMP->INTENSET = B0100; NRF_LPCOMP->ENABLE = 1; NRF_LPCOMP->TASKS_START = 1; NVIC_SetPriority(LPCOMP_IRQn, 15); NVIC_ClearPendingIRQ(LPCOMP_IRQn); NVIC_EnableIRQ(LPCOMP_IRQn); > void s_lpComp() < if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) < NRF_LPCOMP->INTENCLR = B0100; > > void r_lpComp() < NRF_LPCOMP->INTENSET = B0100; > #if __CORTEX_M == 0x04 #define NRF5_RESET_EVENT(event) \ event = 0; \ (void)event #else #define NRF5_RESET_EVENT(event) event = 0 #endif void lpComp_reset () < s_lpComp(); detection = false; NRF_LPCOMP->EVENTS_UP = 0; r_lpComp(); > //****************************** very experimental ******************************* bool sendSignalStrength(const int16_t level, const bool ack) < return _sendRoute(build(_msgTmp, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_SET, V_VAR1, ack).set(level)); >int16_t calculationRxQuality() < int16_t nRFRSSI_temp = transportGetReceivingRSSI(); int16_t nRFRSSI = map(nRFRSSI_temp, -85, -40, 0, 100); if (nRFRSSI < 0) < nRFRSSI = 0; >if (nRFRSSI > 100) < nRFRSSI = 100; >return nRFRSSI; > //****************************** very experimental ******************************* extern "C" < void LPCOMP_IRQHandler(void) < detection = true; NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP); NRF_LPCOMP->EVENTS_UP = 0; MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2); > > 
#ifndef _MYBOARDNRF5_H_ #define _MYBOARDNRF5_H_ #ifdef __cplusplus extern "C" < #endif // __cplusplus #define PINS_COUNT (32u) #define NUM_DIGITAL_PINS (32u) #define NUM_ANALOG_INPUTS (8u) #define NUM_ANALOG_OUTPUTS (8u) #define PIN_LED1 (27) #define PIN_LED2 (25) #define PIN_LED3 (26) #define RED_LED (PIN_LED1) #define GREEN_LED (PIN_LED2) #define BLUE_LED (PIN_LED3) #define PIN_BUTTON (14) #define W_L_SENS (8) #define POWER_PIN (7) #define PIN_SERIAL_RX (12) #define PIN_SERIAL_TX (11) #ifdef __cplusplus >#endif #endif 

nRF52832 программно настроен на работу в режиме пониженного энергопотребления (DC-DC Mode), Вывод МК из сна по сигналу от микросхемы SN74LVC1G00 настроен через внутренний компаратор LPCOMP. Устройство так же имеет тактовую кнопку для реализации сервисных режимов, таких как привязка устройства, обнуление устройства и т.п. Кнопка заведена на ту же ножку МК что и детектор протечки. Обе линии разделены диодами Шоттки. Микросхема SN74LVC1G00 в режиме мониторинга ничего не потребляет. Управление питанием микросхемы осуществляется с ножки МК.

На данный момент почти закончена разработка контроллера протечки воды, с которым данные датчики должны работать.

Видео с демонстрацией работы датчика протечки

GitHub проекта
(гербер файлы, софт, модели корпуса, список компонентов)

Место где всегда с радостью помогут всем кто хочется познакомиться с MYSENSORS (установка плат, работа с микроконтроллерами nRF5 в среде Arduino IDE, советы по работе с протоколом mysensors, обсуждение новых авторских проектов — телеграмм чат @mysensors_rus.

  • Разработка под Arduino
  • DIY или Сделай сам

Система защиты от протечек

Хочу поделиться опытом создания устройства, которое было не только интересно реализовать, но и может причинить пользу. Возможно кто-то скажет, что можно было поступить как-то попроще, но это не наш путь…

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

Так выглядит устройство.

  • Самостоятельно перекрыть подачу воды в случае обнаружения ей протечки
  • Перекрыть подачу воды «в ручном» режиме — на передней панели для этого имеются «красная кнопка» и двухпозиционный тумблер
  • Отображать на собственный дисплей показания приборов учет
  • Отображать на дисплей другую полезную информацию
  • Работать от резервного источника питания. Сейчас в случае отключения электроэнергии — устройство бесполезно
  • Работать с беспроводными датчиками протечек
  • Самостоятельно очищать краны. Чтобы не «закисли», один раз в месяц их желательно открывать/закрывать
  • Оповещать о произошедших событиях на смартфон и управляться по «воздуху»
  • Иметь несколько каналов для чтения разных проводных датчиков протечки, сейчас все датчики (5 шт.) подключены параллельно
  • По отдельности управлять кранами. Их два (один на горячей, второй на холодной воде), и подключены они параллельно
  • Контроль обрыва проводов до датчиков
  • Шаровой кран с электроприводом 1/2 » DN15 DC5V (модификация CR02, обратите внимание, продавец предлагает несколько вариантов управления) — 3080 руб за пару
  • Maple Mini (на борту stm32f103c8t6) микроконтроллер с обвязкой — 233 руб
  • SPI TFT LCD дисплей ILI9341 — 302 руб
  • модуль Ds3231 + AT24C32 часы реального времени, держатель батарейки, второй чип — 4 Кбайта EEPROM — 38 руб
  • ULN2003 DIP-16 — сборка силовых ключей — 123 руб/10 шт (нужна одна)
  • Модуль измерения уровня влажности взят из комплекта — 239 руб/10 шт (нужен был один)
  • Энкодер для навигации по меню — 164 руб/5 шт (понадобился один)
  • Ну и так, по мелочи: провода, корпус (как обычно из распределительной коробки), кнопка, двухпозиционный тумблер, светодиоды

Подробнее о железе

Микроконтроллер

Мозг всей системы — 32-х битный микроконтроллер от ST аккуратно распаянный китайскими рабочими на китайских же фабриках на плату, «совместимую» с Leaf Maple Mini.

О Leaf Maple Mini
Как заметил eta4ever

проект скорее мертв, чем жив

Но ничто не мешает использовать эту плату как «болванку» с любыми другими средствами разработки, было бы чем шить…

Имеет 48 выводов. Ядро работает на 72MHz, имеет интегрированные SRAM — 20Кбайт и Flash — 128Кбайт. Подробнее здесь. Такие параметры определенно подталкивают использовать высокоуровневые средства и инструменты, т.е. это FreeRTOS, графический цветной дисплей, С++ и т.д. (а не два светодиода и ассемблер). В общем ни в чем себе не отказывать… кроме C++, но это не проблема чипа.

Почему?

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

Использование выводов микроконтроллера. Отсюда можно догадаться, что к чему подключено.

Дисплей

За отображение информации отвечает модуль с TFT дисплеем 320х240 точек построенным на совместимом с ILI9341 контроллере, работает по SPI на максимально возможной для данной связки частоте (18MHz). SPI подключен к микроконтроллеру только в одну сторону, вывод для чтения данных из модуля дисплея остался висеть в воздухе, т.к. применение данному функционалу не придумал, зато сэкономил на свободных ножках микроконтроллера. Передача данных работает по DMA .

На модуле с тыльной стороны распаян разъем для подключения SD-карты, работу с SD картой я не тестировал и в данном проекте разъем не участвует.

Модуль RTC и EEPROM

Часы на модуле реализованы чипом DS3231. Особых проблем не вызвал, единственное неудобство, заключалось в том, что все значения (дата, время) хранятся в регистрах в BCD формате, когда два десятичных разряда отражены в одном байте (в старших четырех битах — старший разряд, в младших — младший разряд). Например значение «38 минут» хранится как десятичное значение 56 (это «38» в шестнадцатеричной системе счисления). Можно ли переключиться на бинарный формат, выяснить не удалось.

Модуль имеет свою собственную батарейку, поэтому каждый раз, при потере питания настраивать время и дату не придется. Также на плате модуля распаяна микросхема AT24C32, имеющая аж 32768 бита EEPROM! Проще говоря это 4 Кбайта энергонезависимой памяти. И часы, и память сидят на одной шине I2C. На данный момент память используется только для хранения настроек устройства, текущего значения показаний счетчиков и кое чего ещё. в итоге занято… 25 байт. Позже будет использоваться для ведения логов разных событий, и возможно для ведения статистики расхода (не знаю зачем, зато будет повод запрограммировать отображение графиков).

Кроме контактов шины I2C и питания, на плате присутствуют ещё два. «SQW» — сигнал от будильника, который можно запрограммировать через регистры и «32K» — частота, генерируемая DS3231 для других устройств. В данном проекте не применяются.

Модуль с датчиком уровня влажности

Применяется как буфер между внешним миром и микроконтроллером. Провода, идущие до зондов в сумме, имеют длину около 10 метров, без экрана. Обычные двухжильные телефонные провода. В случае удара статикой, надеюсь умрет только этот модуль, но не микроконтроллер. Умеет измерять сопротивление между двумя электродами и отдавать эту информацию в аналоговом виде (напряжение от 0 до напряжения питания) и в цифровом (0/1, на модуле есть переменный резистор, который можно настроить на границу срабатывания).

С этим модулем были небольшие проблемы. При подаче и снятии питающего напряжения модуль на цифровом выходе сигнализировал о срабатывании, это можно было увидеть и по вспыхивающему на доли секунды светодиоду (на плате модуля, параллельно с цифровым выходом установлен светодиод). Микроконтроллер успевал считывать аномальный сигнал при подаче/сбросе питания системы (проблема №1). Решение было реализовано за счет пропуска коротких импульсов срабатывания, в ожидании зафиксированного на некоторое время состояния.

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

Был замечен факт, что после нескольких минут работы (прогрев?) модуль вдруг начинал сигнализировать о срабатывании самопроизвольно (проблема №3, да сколько же их?!).

На границе аномальных срабатываний, интенсивность свечения светодиода (на модуле) плавно повышалась или понижалась, как будто управляется от генератора ШИМ, ясно, что это шум и он высокочастотный, то же самое можно было ожидать и на «цифровом» выходе модуля (проблема №4).

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

Зонды (части датчиков, которые располагаются непосредственно в местах скопления воды в случае аварии) изготовлены из подручных средств. Это жесть (сталь) и небольшая круглая распределительная коробка, доработанная механическим способом до нужного вида и с припаянными внутри проводами. При попадании воды между парами электродов уменьшается сопротивление и расценивается контроллером как «протечка».

Тестирование в лабораторных условиях показало, что изделие хорошо выполняет свою функцию и не является слабым звеном в системе.

Питание

Вся система работает от зарядки для телефона — 5 вольт, 2А (здесь с запасом). На плате Maple Mini установлен стабилизатор напряжения на 3.3 вольта, напряжение на входе может быть вплоть до 12 вольт, характеристики стабилизатора позволяют, но такое большое напряжение использовать не удобно, об этом ниже.

Со стабилизатор 3.3 вольта также идут на питание модулей RTC, TFT и на модуль измерения уровня влажности. Краны подключены через сборку силовых ключей ULN2003AN, напрямую от блока питания, т.е. работают от 5 вольт, минус падение на ключах. У ULN2003AN используются только два канала из семи.

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

У продавца на сайте есть информация, что краны должны работают от 5 вольт, в данном случае напряжение подается меньше. Программно сделано так, что для открытия и закрытия кранов напряжение подается только определенное время (6 секунд), за это время краны должны успеть открыться или закрыться. Стоит заметить, что подобный эффект не влияет на неполное закрытие крана, т.к. этот момент наступает уже после того как кран полностью перекрыл ток воды. Так же можно упомянуть о том, что слишком большое напряжение на сервоприводы (подавал 9 вольт для эксперимента) заставляет их по инерции двигаться дальше (уже после срабатывания концевика) и упираться в крайнее положение с характерным звуком удара.

Шаровые краны с сервоприводом

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

Если посмотреть на схему управления кранами, то можно заметить, что они управляются положительным напряжением. Общий «минус» и два сигнально-силовых «плюсовых» провода, один для закрытия, другой для открытия. Но ULN2003AN работать в таком режиме не может, в ней при открытии ключа происходит подключение управляемого вывода к «минусу». Решение — сменить полярность управления самого крана. Для этого пришлось поменять местами и сигналы «концевиков», т.к. из-за смены полярности электромотор вращался в другую сторону (по сравнению со стоковой схемой), при этом крайние положения теперь находятся в противоположных сторонах. В итоге имеем кран с общим «плюсом» и двумя управляющими «минусами». То, что нужно!

Краны с сервоприводами в «боевых» условиях.

Показания приборов учета

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

От микроконтроллера требуется считать эти импульсы. Пользовательский интерфейс устройства конечно же предусматривает указать начальные значение.

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

  1. Снизить уровень потребления во всех режимах работы. Сейчас, например, когда с устройством «не общаются», у дисплея просто отключается подсветка, хотя наверняка есть способ (команды) усыпить/отключить его полностью для снижения потребления. Возможность усыплять микроконтроллер изначально не планировалась, поэтому могут быть проблемы с занятыми в данный момент ногами (чем будем будить), пока плохо себе представляю как правильно «усыплять», в какой режим, чем именно будить (периодически, таймер или событиями с датчиков протечки и счетчиков), причем не забываем, что всё это работает на FreeRTOS.
  2. Нужно будет реализовать возможность считывать уровень напряжения резервного источника, в случае снижения до определенного уровня напомнить о необходимость заменить их, а в случае критически низкого уровня устройство должно предпринять «последнее действие».

Перекрыть краны?

Представьте, забыл поменять батарейки, которые, предположим, приходится менять всего лишь раз в год, 11 часов ночи, тут неожиданно отключили электричество, а «умное» устройство, дабы не допустить потенциальной возможности аварии перекрыло еще и воду, к тому же включить её «вручную» не получится, супер!

Элементы управления

Энкодер

Расположен рядом с дисплеем и предназначен для навигации по меню. Вращение — переход на следующий/предыдущий пункт меню, нажатие — выбор/активация пункта меню.

«Красная кнопка»

Самый простой способ перекрыть краны — нажать красную кнопку. Хотя она не должна пригодиться, т.к. за некоторое время до этого устройство должно было само всё сделать. Но на всякий случай кнопка существует. Повторное нажатие, долгое удержание, двойной клик и т.д. не учитываются, только первое нажатие и всё. Активируется режим «авария», отключить его можно только через специальный пункт меню.

Двухпозиционный тумблер

Им также можно перекрыть краны, но можно и открыть, конечно же если при этом система не находится в режиме «аварии». Может пригодиться для временного отключения водоснабжения.

Трехцветный светодиод

Здесь тоже всё просто. Для индикации текущего режима: зеленый — всё в порядке, красный — не всё в порядке, синий — краны перекрыты при помощи тумблера (см.пункт выше). Смешение цветов не используется, трёх хватило. Но и здесь образовалась проблема. Свечение настолько сильное, что ослепляет, если смотреть на дисплей. 470 Ом на каждый цвет оказалось мало. Исправил программно. Когда дисплей в активном состоянии (а он активен пока пользуешься элементами управление и ещё некоторое время), данный светодиод отключен.

Заключение

Устройство работает, периодическое тестирование показывает, что работает исправно. Не зависает, не глючит. Хотя я знаю, где есть потенциальные, но некритичные ошибки в коде, но об этом не в этой статье.

  • stm32
  • защита от протечек воды
  • приборы учета водоснабжения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *