Я уже как-то высказывался о том, что системы класса «умный дом» по своей сути — бесполезные устройства. Управление, завязанное на единый центр, только понизит надежность всей системы, да прибавит владельцу головной боли, если вдруг что-то начнет «глючить». Более того, с моей точки зрения, система умного дома бессмысленна как минимум по двум причинам. Во-первых, толком такие системы ничего делать не умеют. Закрывать или открывать жалюзи в зависимости от активности солнца? Включать или выключать розетки? Показывать температуру в подвале, если вы в этот момент находитесь на другом краю земли? Все это либо не нужно обывателю, либо отлично реализуется отдельными специализированными устройствами. Во-вторых, концентрация всех функций в рамках единого центра исполнения делает всю автоматизацию дома уязвимой к выходу из строя этого самого центра исполнения. Если у вас завис датчик управления светом в прихожей, то в случае изолированных систем, ничего страшного не произойдет. У вас просто не будет включаться свет в коридоре. А вот в централизованной системе, никто не может поручиться, что выход одного из датчиков не приведет к непредсказуемым последствиям во всей системе. Конечно, есть системы, которые не зависают. Это изделия именитых фирм, которые используют супернадежное оборудование и тратят тысячи человеко-часов на «вылизывание» алгоритмов, отвечающих за управление. И, разумеется, все это сказывается на стоимости «брендовых» систем.
Но есть задачи, которые можно и нужно автоматизировать, не завязывая все управление на центральный узел «умного дома». Отдельные специализированные устройства вполне могут справляться со своими задачами и обмениваться статусом и командами с центральной «консолью», если такое, конечно требуется. Изготовить подобное устройство куда проще, а логика, зашиваемая в него — проще и содержит меньше ошибок априори. К классу таких задач по домашней автоматизации я могу смело отнести проблему, которую удалось успешно решить при помощи несложного устройства на основе микроконтроллера ESP8266. Более того, в рамках проекта было реализовано полноценное устройство безопасности, которое, в случае аварии, способно сберечь многие сотни тысяч рублей. Собственно, об этом читаем далее…
Постановка задачи
В моем дачном домике есть два водяных насоса. Один качает воду из колодца, второй из скважины. Оба насоса погружные, подключены к гидроаккумуляторам и включаются по командам своих датчиков давления. Датчик давления штука сугубо механическая, обладает контактной парой и пружинкой, регулирующей рабочий диапазон давлений. У меня питание на оба насоса подается через отдельный защитный автомат, свое собственное УЗО и УЗМ. С электрической точки зрения они оба защищены как от утечки тока, короткого замыкания, так и от недостаточного или избыточного напряжения. От сухого хода насос в колодце защищен при помощи поплавкового выключателя, а в скважине защита установлена внутри насоса, да и вода там кончится не может, по крайней мере в моих условиях, чай не Калифорния какая.
Все вроде бы все хорошо, за исключением того, что в случае утечки воды, насосы будут работать и работать, пока дом полностью не утонет вместе со всем прилегающим участком. Если колодезный насос, успокоится всего-то через несколько десятков минут, выкачав с десяток кубометров воды, то подземные хранилища воды так просто не опустошить. И будет заливать скважинный насос все вокруг водой. А ведь он может работать не час, и не два. Находясь в отсутствии пару недель можно неприятно удивиться, обнаружив несусветный счет за электричество, озлобленных соседей и небольшой овражек с мощным потоком в нем.
Иными словами, проблема заключается в том, что насосы, оставленные без присмотра на длительное время, могут, по разным причинам, начать неограниченно выкачивать воду из подземных хранилищ. Вариантов на выбор тут два: либо отключать насосы, когда тебя нет на точке, либо контролировать утечки и работу насосов. Вариант с отключением насосов не особо интересен, поскольку давление воды используется для регулярной регенерации очистных фильтров. Да и забыть отключить насосы после зимнего раздолья во время каникул можно запросто. Остается только каким-то образом контролировать работу насосов.
Варианты контроля
Первое, что приходит в голову, когда задаешься вопросом про контроль утечек воды — множество готовых систем, имеющих датчики и электрически управляемые шаровые краны вкупе с блоками контроля. Такие системы перекрывают воду в случае, если на раскиданные в самых уязвимых местах датчики, попадает вода. Системы вполне жизнеспособны, но только в условиях городских квартир, где применяется централизованное водоснабжение. Если вдруг возникает утечка в трубе или в кране, то вода, капая или стекая, попадает на датчик, который отправляет сигнал тревоги на блок управления и контроллер отключает подачу воды в квартиру просто перекрывая кран. Все бы хорошо, но труба от колодезного насоса имеет длину 25 метров, а от скважинного целых 100. Плюс часть трубопровода проходит под землей, в буквальном смысле слова, а часть в сыром подвале. И только метров сорок трубопровода и несколько оконечных потребителей располагаются в пределах обитаемой части дома.
Очевидно, что при таком раскладе, разместив пару десятков датчиков по дому, я смогу контролировать утечку воды непосредственно в жилище. А прорывы трубопровода в подполе или в грунте таким образом я отлавливать не смогу. Что же делать?
Ответ, как оказалось, лежит на поверхности. Можно контролировать не саму утечку воды, а работу насоса. Ведь вода подается исключительно силой электрических машин. Значит при возникновении утечки насосы будут включаться и качать воду. Таким образом определяя факт того, что насос включен, особенно больше положенного времени, можно определить есть ли на линии где утечка или нет. Определить же факт работы насоса можно несколькими способами, например, по подаче напряжения с реле давления, либо же замеряя силу тока, потребляемую насосом.
Варианты определения работы насосов
Итак, у нас есть, как минимум, два способа определить работает насос или нет. Мы можем определить наличие напряжения и величину тока. При измерении напряжения, мы полагаемся на реле давления, которое при падении давления в магистрали, замыкает контакты и подает питание на насос. Соответственно, в этом случае мы должны каким-то образом определить, что напряжение подается на насос или же то, что реле давления замкнуло контакты. Конечно, в этом случае мы предполагаем, что насос исправен и будет качать воду.
К сожалению, для мира Arduino, а именно эту экосистему я планировал использовать для программирования ESP8266 и создания обвязки из датчиков, отсутствуют вменяемые решения по определению наличия переменного тока с напряжением в 220 Вольт. В продаже вы не найдете никакого готового модуля. Все, что есть — вольтметры для постоянного тока, да и то с напряжением до 30-50 Вольт. Поэтому придется изобретать.
Блок питания
Самым простым способом определения наличия питания в 220 Вольт можно назвать использование обычного «зарядника» для мобильного телефона. Он подключается к бытовой электросети, а на выходе дает честные 5V постоянного тока, которые поймать при помощи Arduino или платы на основе ESP8266 — проще простого. Способ хорош, если с паяльником вы совсем уж не в ладах.
Реле на 220V
Вариант уже немного сложнее, чем блок питания от телефона. Придется поискать реле с управлением катушкой от переменного тока в 220 Вольт. Либо присобачить простейший выпрямитель из переменного в постоянный ток, реле с управлением от постоянного тока напряжением в 220 Вольт в продаже точно есть. Данный вариант вполне реализуем, правда, он не лишен и недостатков. Механическое реле будет щелкать при подаче напряжения на насос, не будет обеспечивать гальваническую развязку между сетью электропитания и микроконтроллером, что может привести к порче последнего при возникновении неполадок в сети высокого напряжения.
Специальная схема — индикатор напряжения переменного тока
А вот этот вариант уже то, что нужно. При помощи специально разработанной схемы можно обеспечить простое сигнализирование о наличии переменного тока на входе схемы. Плюс присутствует гальваническая развязка и микроконтроллер будет оставаться в целости и сохранности, даже при серьезном сетевом «шторме».
Если покопаться в сети, то можно найти несколько десятков вариантов реализации подобных устройств. Одно из самых простых приведено на рисунке выше. Схема основана на использовании оптопары PC814. Оптопара обеспечивает надежную развязку от сети и по конструкции состоит из двух светодиодов и фотоприемника. При наличии напряжения переменного тока на входе оптопары светодиоды начнут излучать свет и фотоприемник под действием света обретет проводимость. Соответственно при подаче напряжения постоянного тока на другие входы оптопары и подключив микроконтроллер, можно дискретно определять наличие или отсутствие напряжения переменного тока. Да, резисторы R2 и R3, для наших целей не требуются.
Сенсор переменного тока
Приведенные выше варианты — чисто дискретные. Они работают как выключатель и сигнализируют лишь о наличии или отсутствии напряжения переменного тока. Но в природе существуют устройства, позволяющие получать результат не только в виде бинарного показания, но и в виде непрерывного аналогового сигнала зависящего от величины напряжения на входе. Я имею ввиду простенькие платки на основе трансформатора и сенсора напряжения zmpt101b.
Устройство редкое и в продаже его еще поискать. Состоит оно из микро-трансформатора напряжения и операционного усилителя. На плату с одной стороны подается переменный ток, с другой стороны постоянный рабочий ток микроконтроллера и «земля». Определение напряжения на входе на устройство осуществляется посредством измерения результирующего напряжения на Vout платы. Типовая схема подключения к Arduino доступна на сайте тайского магазина DIY электроники. При использовании микро-трансформатора следует учитывать, что изменение на Vout будет происходить с частотой сети и потребуется применять какое-то усреднение получаемых результатов.
Альтернативой измерению напряжения является измерение силы тока. При работе насоса он будет потреблять энергию, которая и будет выражаться в виде конкретных значений в амперах. Рассмотрим варианты с измерением тока.
Измерение тока при помощи катушки
Самый простой вариант измерения силы тока с гальванической развязкой — воспользоваться готовой платой с катушкой. Фазовый проводник пропускается через катушку, которая, подключается через соответствующую обвязку, если таковая установлена на плате катушки, а затем к аналоговому порту микроконтроллера. При прохождении тока по проводу, вокруг него возникает электромагнитное поле, которое преобразуется в катушке в слабый электрический ток. Его-то и требуется измерить при помощи аналогового порта микроконтроллера.
Измерение тока с использованием ACS712
Измерение тока при помощи катушки отлично подходит для очень большого тока, пропускаемого через очень толстый кабель. Но для бытовых целей есть варианты и поинтереснее. Например, микросхема ACS712 от Allegro.
В основе работы микросхемы ACS712 лежит эффект Холла. Готовые датчики достаточно дешевы и выпускаются под различные номиналы по току, что позволяет подобрать требуемый датчик под расчетную нагрузку и тем самым обеспечить наилучшую точность результатов измерений.
Так что же измеряем? Напряжение, ток или то и другое?
Поскольку у плат на основе ESP8266, в том числе и у Wemos D1 Mini присутствует только один аналоговый вход, то одновременное использование измерения напряжения и тока может быть затруднено, придется заморачиваться с какой-то коммутацией или того хуже. Использовать только измерение тока имеет свои плюсы и минусы. При помощи измерителя тока можно отслеживать «здоровье» насоса. Если он вдруг стал потреблять немного больше, чем обычно, то тут явно что-то не так. Но с другой стороны, если насос вышел из строя, то об этом я не узнаю, пока не открою краник и не пойму, что из него ничего не течет. Настоящая дилемма.
Несмотря на богатство всех альтернатив, я все же использовал схему дискретно определяющую наличие или отсутствие напряжения переменного тока. Она подключена после реле давления и подает логический сигнал в случае если на насос подается переменный ток, и он должен работать. Работает ли он в действительности или нет, на этом этапе меня не очень интересует. Аварийная ситуация, в том числе и с вышедшим из строя насосом определяется микроконтроллером при помощи алгоритма скользящего окна.
Алгоритм скользящего окна
Имея показания с датчика напряжения, я могу с уверенностью определять в конкретный момент времени подается или нет на насос ток с реле давления в трубопроводе. Для моих целей разрешающая способность в измерениях вполне достаточна на уровне 1 секунды. Один раз в секунду микроконтроллер опрашивает датчик напряжения есть ли оно на его входах или нет. А вот дальше начинается магия.
Имея на руках данные о наличии переменного тока, я могу подсчитывать то, сколько проработал мой насос за определенный период времени. Аварийной ситуацией будет считаться та ситуация, когда насос работает дольше некоего порога. Например, я знаю, что насосу требуется 180 секунд на наполнение гидроаккумулятора водой до требуемого давления. В гидроаккумулятор помещается 100 условных литров воды. На расход воды накладывает ограничения система канализации, которая может принять не более 250 литров стоков за один час, да количество кранов, производительность которых тоже конечна. Согласно моим наблюдениям, 100 литров воды расходуется не менее чем за полтора часа, даже если кто-то пошел намываться или задумал помыть посуду после новогоднего банкета.
Итак, алгоритм, определяющий аварийную ситуацию, должен отслеживать время работы насоса в пределах некоего временного окна. И если насос работает дольше установленного порога, то его нужно отключить и оповестить человека о возникшей неполадке. Допустим я выбираю окно размеров в 60 минут и порог срабатывания в 360 секунд. Таким образом, если насос работает в совокупности больше 360 секунд за каждый час. То устройство приостанавливает его работу, снимает напряжение с линии питания конкретного насоса.
Важно понимать, что в алгоритме скользящего окна, само временное окно не привязывается к астрономическим часам, а двигается каждую дискретную величину измерения, в нашем случае — каждую секунду. Каждую секунду окно подвигается на одну секунду вперед, значение работы насоса на самой удаленной границе окна отбрасывается и забывается, а новые значения, полученные за текущую секунду, укладываются в «копилку» текущего значения порога.
На приведенной выше схеме представлен некий период времени, на нем присутствует шесть периодов, в которые работал насос, и три временных окна (отрезка). Соответственно в «Окно 1» насос проработал 4 отрезка, у «Окно 2» насос отработал тоже четыре, но немного других отрезков времени. И в «Окно 3» насос работал тоже 4 отрезка, два из них из первой группы, а два из второй. Порог отключения насоса рассчитывается из количества отрезков в рамках одного окна.
Алгоритм скользящего окна применяется на практике не так часто, но его можно встретить, например, в протоколе TCP, в архиваторе LZW или в системах финансового мониторинга. Во всех случаях алгоритм позволяет определить количество данных за постоянно перемещающийся промежуток времени. Реализация алгоритма, кстати, не такая уж и тривиальная задача, над ней необходимо подумать.
Что еще?
Помимо подсчета времени работы и сигнализировании об авариях, устройство должно отключать аварийного потребителя. Тут на выручку придут реле. Поскольку реле используются механические, то периодически необходимо «перещелкивать» реле из состояния в состояние. Производить эту операцию, разумеется, необходимо только тогда, когда нагрузка не подключена к линии питания.
Собираемые данные о расходе воды желательно куда-то складывать и проводить над собираемыми данными различные анализы, например, с целью выявления аномального потребления или же просто с позиции контроля расхода воды. Для этих целей я использую уже проверенную систему ThingSpeak. В принципе она для этого и предназначена. Отправляем на сервера ThingSpeak данные, потом их там же, на серверах и обрабатываем.
Неплохо было бы завести и некую сигнализацию для пользователя, мол, работает насос такой-то, а этот выключили из-за перерасхода лимита. Сигнализацию сделать лучше не на светодиодах, а подключить какой-нибудь экранчик. Ну и разумеется встроенный Web-сервер для управления параметрами и получения детальной информации через смартфон или с компьютера.
Что же еще, что же еще? Ладно хватит функций. Переходим к их реализации.
Предупреждение
Прежде чем взяться за разработку, как следует подумайте, в силах ли вы совладать с опасным напряжением бытовой сети! 220 Вольт переменного тока это вам не шутка!