Датчик воды на полу arduino своими руками. Как не переплачивать за Умный Дом
Arduino Датчик уровня воды предназначен для определения уровня воды в различных емкостях, где недоступен визуальный контроль, с целью предупреждения перенаполнения емкости водой через критическую отметку.
Конструкции датчиков уровня воды могут быть различными – поплавковые, погруженные, врезные. Данный датчик воды – погруженный. Чем больше погружение датчика в воду, тем меньше сопротивление между двумя соседними проводами. Датчик имеет три контакта для подключения к контроллеру.
- + – питание датчика;
- - – земля;
- S - аналоговое значение.
Технические характеристики модуля
- Напряжение питания: 3.3-5 В;
- Ток потребления 20 мА;
- Выход: аналоговый;
- Зона обнаружения: 16×30 мм;
- Размеры: 62×20×8 мм;
- Рабочая температура: 10 – 30 °С.
Пример использования
Рассмотрим подключение датчика уровня воды к Arduino. Создадим проект звуковой сигнализации затопления помещения. При погружении датчика в воду, сигнализация издает три вида звуковых сигналов (небольшое затопление, средний уровень, критический уровень), соответствуюший трем уровням воды. Для воспроизведения звуковых можно к цифровому выводу подключить пьезоизлучатель - электроакустическое устройства воспроизведения звука. Но при этом звук получается очень тихий. Чтобы получить громкость более приличного уровня, к цифровому выводу Arduino динамик, но не напрямую, а через транзистор. Для проекта нам понадобятся следующие детали:- Плата Arduino Uno
- Датчик уровня воды
- Динамик 8 Ом
- Резистор 500 Ом
- Транзистор КТ503е
- Соединительные провода
Запустим Arduino IDE. Создадим новый скетч и внесем в него следующие строчки // Датчик уровня воды // http://сайт // контакт подключения аналогового выхода датчика int aPin=A0; // контакт подключения вывода реле int soundPin=11; // частота звукового сигнала int freq={587,466,293}; // переменная для сохранения значения датчика int avalue=0; // значение уровней int levels={600,500,400}; // текущий уровень int level=0; void setup() { // инициализация последовательного порта Serial.begin(9600); // настройка выводов индикации светодиодов // в режим OUTPUT pinMode(soundPin,OUTPUT); } void loop() { // получение значения с аналогового вывода датчика avalue=analogRead(aPin); // вывод значения в монитор последовательного порта Arduino Serial.print("avalue=");Serial.println(avalue); // вывод звука различной частоты для разных уровней погружения if(avalue>levels) tone(soundPin,freq,2000); else if(avalue>levels) tone(soundPin,freq,2000); else if(avalue>levels) tone(soundPin,freq,2000); else noTone(soundPin); // пауза перед следующим получением значения 1000 мс delay(1000); } Аналоговый вывод датчика подключен к аналоговому входу Arduino, который представляет собой аналого-цифровой преобразователь (АЦП) с разрешением 10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение аналоговых сигналов на аналоговом входе Arduino для трех уровней погружения были определены экспериментальным путем: > 400 – минимальное погружение; > 500 – средний уровень погружения; > 600 – большое погружение. Соответственно для каждого уровня погружения на динамике воспроизводится звуковой сигнал разной частоты: минимальное погружение – 293 Гц (нота ре 1 октавы); средний уровень погружения – 466 Гц (нота си-бимоль 1 октавы); большое погружение – 587 Гц (нота ре 2 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.
Часто задаваемые вопросы FAQ
1. Не горит светодиод питания 2. При погружении в воду не изменяется значение выходного аналогового сигнала- Проверьте соединение датчика с входом Arduino.
- Проверьте наличие и полярность подаваемого на датчик питания (3,3 – 5 В).
В статье представлен прагматичный подход по созданию одного из элементов Умного Дома - экономной защиты от потопа (антипротечки) на базе универсального контроллера домашней автоматизации.
Главные отличия от ранее представленных на хабре решений данной задачи – простота реализации, относительно дешево + для повторения не надо быть программистом. Правда паять все равно придется, но всего 2 раза.
Введение
На хабре, как на ресурсе технически активных людей, на который страждущие идут за советом и решением проблем, размещено множество статей по теме Умный Дом.И часто в комментариях встречаются сожаления о том, что мол никто пока не родил одновременно мощный, простой в освоении и экономный способ реализации Умного Дома для обывателей. То надо паять, то кодить, причем часто на разных языках: и для микроконтроллера, и для веб и так далее.
А так чтоб взял, купил запчасти-кубики за недорого и сам лично запустил – такое редко встречается.
Вот я и решил вставить свои 5 копеек, так как похоже, мне как раз попался один из вариантов реализации Умного Дома, который может подойти для многих прагматически настроенных потребителей.
Я расскажу на примере реализации защиты от потопа, хотя уже, на этом же контроллере у меня функционирует система охранной сигнализации, регистрации температуры и автоматического отключения нужных розеток при уходе из дома.
Итак, по моей «пирамиде потребностей Маслоу для Умного Дома» (с) – важность сигнализации и предотвращения потопа находится на том же уровне, что и важность сигнализации о вторжении или появлении дыма.
Пирамида потребностей Маслоу для Умного Дома
Ибо масштаб трагедии может быть ужасающим:
Ввиду того, что я недавно обзавелся универсальным контроллером умного дома и уже реализовал более важный функционал - я решил, что пора «постелить соломки».
Проблема
Итак, захотелось в случае обнаружения протечки воды – получать оповещение (смс и/или email) и, чтобы автоматически перекрывалась подача воды в квартиру. А также иметь возможность открывать и перекрывать воду «вручную», в том числе удаленно через интернет.Решение
Существует ряд готовых наборов для полного или частичного решения данной задачи, но, во-первых, они мягко говоря дороговаты, во-вторых, имея в руках универсальный контроллер управления умным домом все это можно сделать самому и будет не хуже, а даже лучше ввиду того, что все будет интегрировано в единую систему и будет взаимодействовать именно так как мне хочется, а не так, как решил производитель системы. А учитывая, что самая дорогостоящая часть систему уже есть (контроллер), то избавляемся от дублирования и избыточности.Текущая структура моей системы Умный Дом. Красным выделены компоненты непосредственно участвующие в системе Антипротечки.
Настольный макет прикладной части системы антипротечки выглядел так:
У меня сейчас горячая вода получается путем нагрева в бойлере холодной воды. Поэтому перекрывать нужно только одну трубу.
При необходимости, систему можно будет элементарно нарастить и сделать перекрытие второй трубы просто добавив еще один клапан и подключив его параллельно к радиореле.
Датчик протечки
Самый сложный момент во всей системе.Беда в том, что если вопросы по контролю вторжения и появления дыма или газа элементарно решаются стандартными датчиками, то с контролем утечки воды все несколько иначе. В перечне совместимых датчиков моего универсального контроллера пока нет датчика протечки воды. По крайней мере не было…
Поиск на хабре быстро показал путь наименьшего сопротивления : взять стандартный беспроводной герконовый датчик и вместо геркона, а точнее параллельно ему, вывести провода с контактами и замыкать их водой.
Данный подход имеет ряд недостатков: одним из главных является окисление не позолоченных контактов со временем.
Ранее читал в интернете, что существуют другие способы определения протечки воды, например, бесконтактные, но дешевизна, оперативность и элементарность реализации описанного выше варианта прервала полет инженерной мысли в сторону инновационных подходов.
За основу был взят китайский беспроводной магнитоконтактный (герконовый) датчик MD-209R. В моем случае был выбран относительно дешевый датчик-клон, совместимый с протоколом передачи PowerCode (фирмы Visonic), так как это один из беспроводных протоколов, поддерживаемых моим контроллером.
Параллельно встроенному геркону я подпаял 2 провода, замыкание которых фактически приводят к срабатыванию датчика.
Итак, после нехитрых манипуляций с паяльником получилось это:
Клапан с электроприводом
В качестве клапана, перекрывающего воду, можно использовать любой клапан, имеющий электропривод и соответствующий размер соединения с трубой.
Свой макет я испытывал на китайском клапане с электроприводом под трубу на 1/2 дюйма .
Конструкция электропривода клапана автоматически отключает питание на катушку после открытия или закрытия. Таким образом, нет необходимости командами с контроллера снимать напряжение через радиореле после выполнения операции.
Радиореле
Для подачи питания на привод я закупил на ebay вот такое двухканальное радиореле из списка совместимых с контроллером. Тип YKT-02XX-433Внутри установлена так любимая китайскими производителями микросхема-кодер 1527.
В нем стоят 10-амперные реле, поэтому, в принципе, ими можно коммутировать почти любую бытовую нагрузку до 250В. Ограничение 2 кВт.
Для управления электроприводом этого более чем достаточно, так как привод клапана питается от 12 В и по паспорту потребляет всего 4 Вт, причем только во время изменения состояния клапана.
Данное радиореле может работать в нескольких режимах, один из которых нам как раз и надо: взаимная блокировка каналов. В этом режиме - при включении реле одного канала, автоматически выключается реле другого канала. Таким образом, мы «почти аппаратно» защищаемся от одновременной подачи напряжения на «открытие» и «закрытие» на соленоид электропривода клапана вследствие каких-либо глюков.
Схема подключения клапана, приемника:
Управление
В качестве «мозгов» системы я применил Наносервер NS1000 - универсальный контроллер отечественного производителя 1-М Умным Домом .
Возможности контроллера, которые так или иначе используются в данном проекте:
Поддержка сверхбюджетных беспроводных датчиков и радиореле.
Выполнение сценариев оффлайн (даже без интернет).
Оповещение о событиях через смс и по электронной почте.
Элементарное составление «сценариев» работы системы без написания кода.
Возможность управление устройствами со смартфона (Android).
Управление через WEB.
Ведение «логов».
Сценарии
В процессе настройки контроллера нужно учесть следующий нюанс:Герконовый датчик посылает сообщение о срабатывании когда размыкается, а нам надо чтобы при замыкании. Соответственно, в условии запуска сценария нужно указать не включение датчика, а выключение. И не по состоянию, а по изменению. Чтобы оповещения не повторялись циклически.
Условие запуска сценария 1: Если Канал «Датчик протечки» выключился.
Шаги сценария:
. Оповещение «Хозяин, у нас потоп!»
. Включить канал «Клапан воды закрыть»
И сценарий на открытие клапана по команде с брелка или со смартфона:
Условие запуска сценария 2: Если Канал «Можно открыть клапан воды» включился.
Шаги сценария:
. Включить канал «Клапан воды открыть»
В WEB-интерфейсе облачного сервиса это выглядит так:
Для ручного управления устройствами ничего «программировать» не надо – после добавления в систему, управление каждым устройством автоматически становится доступно из Личного кабинета через WEB-интерфейс и с Android-приложения.
Вид панели WEB-управления Умным Домом через интернет:
Внешний вид Android-приложения
Что в результате?
Цель достигнута. При срабатывании датчика протечки, я получаю смс-оповещение вида «Хозяин, у нас потоп!» и клапан автоматически перекрывается в течение менее 30 секунд.Так же, я имею возможность не автоматически открывать и закрывать клапан, путем нажатия на кнопки брелка, со смартфона или с браузера через интернет.
Срабатывание каждого датчика и устройства регистрируется в журнале логов.
При этом, не пришлось писать код и самостоятельное повторение данного решения вполне доступно для большинства (конечно, не считая установки клапанов на трубы).
Настройка системы, зная, что ты хочешь, занимает от силы 10 минут. Включая активацию датчика и радиореле, создание всех сценариев.
Понятно, что в том виде, как оно представлено на фотографиях, в реальности оно долго и надежно работать не сможет.
Блок питания привода клапана, радиореле, да и сам датчик нужно еще поместить в пластиковые коробочки с хоть какой-то степенью защиты.
Плюс уже возникают разные мысли по развитию системы, например, дублированию оповещения на световую сигнализацию, периодическую «тренировку» клапана чтобы «не застаивался» и тп. Кстати, лично у меня есть серьезные сомнения в необходимости функции резервного питания электроклапана, которой так хвастаются некоторые «покупные» комплекты антипротечки.
Другими словами - аппетит приходит во время еды.
Благо дело, что для наращивания функционала не надо звать «сертифицированных» специалистов, чтобы они что-то подкрутили в системе. Все это можно элементарно сделать самому, благодаря простоте принципов настройки универсального контроллера.
Немного о ценах:
Наносервер NS-1000 - 44$Датчик магнитоконтактный MD-209R - 13$
Радиореле - 10$
Клапан- 15$
Итого (без учета доставки) = 82$
Не так уж и дешево. Но это если не учитывать, что наносервер используется не только для фукнции антипротечки. Ведь на нем реализована система охранной и пожарной сигнализации и другие возможности…
P.S.
В процессе реализации, уже купив клапан, я обнаружил, что существуютВ этой статье мы узнаем, как можно использовать датчик протечки Arduino. Такие датчики часто называют по-разному: датчик дождя, влаги, капель, протечки. При этом почти всегда имеется в виду один и тот же датчик, как правило, выполненный в виде готового модуля.
Датчик легко подключается к Arduino, скетч для работы с такими датчиками прост, цена не высока. Идеальный вариант для несложных проектов на Arduino Uno, Mega, Nano.
Описание датчика
Датчик протечки и дождя в проектах Arduino позволяет определить появление капель влаги и вовремя отреагировать на это, например, включив оповещение. Такие системы активно используются в аграрной отрасли, в автомобилестроении, и в других повседневных сферах нашей жизни. В этой статье мы рассмотрим работу с готовым модулем, который можно легко приобрести в любых специализированных интернет-магазинах.
Модуль датчика состоит из двух частей:
- «Сенсорная» плата обнаружения капель. Она отслеживает количество попавшей на неё влаги. По сути, сенсор представляет собой простой переменный резистор, замыкаемый водой в разных местах, что вызывает изменение сопротивления.
- Вторая часть датчика – сдвоенный компаратор (как правило, LM393, но возможны варианты LM293 и LM193). Его главная задача - преобразование значения с сенсора в аналоговый сигнал от 0 до 5 вольт.
На рынке встречаются варианты датчиков как с разнесенными сенсором и компаратором, так и с объединенными на одной панели.
Датчик запитывается от напряжения 5 В, который можно легко завести с любой платы Arduino. Как правило, у модуля датчика доступно два выхода:
- Аналоговый. Значение, получаемое контроллером, будет варьироваться от 0 до 1023. Где 0 – все затопило или идет ливень, сенсор очень влажный, 1023 – сухая погода, сенсор сухой (в некоторых датчиках встречаются противоположные значения, 1023 – максимальная влажность, 0 – максимальная сухость).
- Цифровой. Выдает высокое (5В) или низкое напряжение в случае превышения некоторого порога. Уровень порога срабатывания регулируется с помощью подстроечного резистора.
Для подключения датчика к Arduino понадобится сама плата (UNO, Mega, Nano или любая другая) и сам датчик. Если вы хотите проверять интенсивность осадков, то рекомендуется расположить датчик не горизонтально, а под некоторым углом, чтобы накапливаемые капли стекали вниз.
Схема подключения модуля датчика протечки к ардуино:
- VCC (вход питания) – должен совпадать для соединенной схемы Arduino по напряжению и току. То есть в данном случае 5В;
- GND – заземление;
- АO – аналоговый выход;
- DO - цифровой выход.
Аналоговый выход присоединяем к аналоговому пину микроконтроллера, например, A1. Цифровой выход, соответственно подключается к одному из цифровых пинов. Напряжение можно подать с вывода 5В платы ардуино, земля соединяется с землей.
При подключении датчиков протечки в реальных проектах надо обязательно предусматривать защиту электронной части модуля от попадания влаги!
Пример скетча
#define PIN_ANALOG_RAIN_SENSOR A1 // Аналоговый вход для сигнала датчика протечки и дождя #define PIN_DIGITAL_RAIN_SENSOR 5 // Цифровой вход для сигнала датчика протечки и дождя void setup(){ Serial.begin(9600); } void loop(){ int sensorValue = analogRead(PIN_ANALOG_RAIN_SENSOR); // Считываем данные с аналогового порта Serial.print("Analog value: "); Serial.println(sensorValue); // Выводим аналоговое значение в монитр порта sensorValue = digitalRead(PIN_DIGITAL_RAIN_SENSOR); // Считываем данные с цифрового порта Serial.print("Digital value: "); Serial.println(sensorValue); // Выводим цифровое значение в монитр порта delay(1000); // Задержка между измерениями }
#define PIN_ANALOG_RAIN_SENSOR A1 // Аналоговый вход для сигнала датчика протечки и дождя #define PIN_DIGITAL_RAIN_SENSOR 5 // Цифровой вход для сигнала датчика протечки и дождя void setup () { Serial . begin (9600 ) ; void loop () { int sensorValue = analogRead (PIN_ANALOG_RAIN_SENSOR ) ; // Считываем данные с аналогового порта Serial . print ("Analog value: " ) ; // Выводим аналоговое значение в монитр порта sensorValue = digitalRead (PIN_DIGITAL_RAIN_SENSOR ) ; // Считываем данные с цифрового порта Serial . print ("Digital value: " ) ; Serial . println (sensorValue ) ; // Выводим цифровое значение в монитр порта delay (1000 ) ; // Задержка между измерениями |
В данном скетче мы просто считываем значения с датчика и выводим их в монитор порта. Проведите эксперимент и проверьте, как изменяется получаемое значение, когда вы дотрагиваетесь до датчика мокрой или сухой рукой. Намочили датчик – пошел дождь или появилась протечка, вытерли сухой тряпкой – дождь закончился.
Пример проекта дождевой сигнализации
Рассмотрим пример с использованием звуковой сигнализации в виде подключенного зумера на цифровом выходе D6. При желании можно вместо сигнализации подключить реле и выполнять различные операции с размыканием сети. В скетче полученные данные мы будем передавать в монитор порта по UART-интерфейсу.
Скетч для проекта с сигнализацией
Ниже представлен тестовый код, который активирует звуковой сигнал на уже упомянутом выше цифровом выходе 6, с задержкой времени, для того, чтобы исключить ложные срабатывания при случайном попадании воды на сенсор. Работа реализована через переменную, которая обновляется каждую секунду и выступает порогом – curCounter. Сигнализация приводится в действие тогда, когда значение, передаваемое с сенсора, станет меньше 300. Задержка между обнаружением влаги и срабатыванием звукового сигнала составляет чуть больше 30 секунд.
#define PIN_RAIN_SENSOR A1 // Аналоговый вход для сигнала датчика протечки и дождя #define PIN_ALERT 6 // Цифровой выход для сигнализации #define MAX_COUNTER 30 // Пороговое значение для счетчика #define ALERT_LEVEL 300 // Пороговое значение для счетчика int curCounter= 0; // Счётчик для сбора "статистики", который увеличивается на 1 каждую секунду после срабатывания датчика void setup(){ Serial.begin(9600); pinMode(PIN_ALERT, OUTPUT); pinMode(PIN_RAIN_SENSOR, INPUT); // Можно не указывать, т.к. это значение по умолчанию } void loop(){ int sensorValue = analogRead(PIN_RAIN_SENSOR); Serial.println(sensorValue); // Выводим значение в монитр порта delay(300); // короткая задержка // Если накопили достаточно оснований для включения сигнализации if (curCounter >= MAX_COUNTER){ digitalWrite(PIN_ALERT, HIGH); // Срабатывание сигнализации curCounter = MAX_COUNTER; // Защита от переполнения переменной } // Определяем уровень влажности if (sensorValue < ALERT_LEVEL){ // В очередной раз убедились, что все влажно, увеличиваем счетчик curCounter++; }else { // Интенсивность дождя не превышает порога digitalWrite(PIN_ALERT, LOW); // Выключаем сигнализацию curCounter = 0; // Обнуляем счетчик } delay(1000); // Задержка между измерениями }
#define PIN_RAIN_SENSOR A1 // Аналоговый вход для сигнала датчика протечки и дождя #define PIN_ALERT 6 // Цифровой выход для сигнализации #define MAX_COUNTER 30 // Пороговое значение для счетчика #define ALERT_LEVEL 300 // Пороговое значение для счетчика int curCounter = 0 ; // Счётчик для сбора "статистики", который увеличивается на 1 каждую секунду после срабатывания датчика void setup () { Serial . begin (9600 ) ; pinMode (PIN_ALERT , OUTPUT ) ; pinMode (PIN_RAIN_SENSOR , INPUT ) ; // Можно не указывать, т.к. это значение по умолчанию void loop () { int sensorValue = analogRead (PIN_RAIN_SENSOR ) ; Serial . println (sensorValue ) ; // Выводим значение в монитр порта delay (300 ) ; // короткая задержка |
Arduino Датчик уровня воды предназначен для определения уровня воды в различных емкостях, где недоступен визуальный контроль, с целью предупреждения перенаполнения емкости водой через критическую отметку.
Конструкции датчиков уровня воды могут быть различными – поплавковые, погруженные, врезные. Данный датчик воды – погруженный. Чем больше погружение датчика в воду, тем меньше сопротивление между двумя соседними проводами. Датчик имеет три контакта для подключения к контроллеру.
- + – питание датчика;
- - – земля;
- S - аналоговое значение.
Технические характеристики модуля
- Напряжение питания: 3.3-5 В;
- Ток потребления 20 мА;
- Выход: аналоговый;
- Зона обнаружения: 16×30 мм;
- Размеры: 62×20×8 мм;
- Рабочая температура: 10 – 30 °С.
Пример использования
Рассмотрим подключение датчика уровня воды к Arduino. Создадим проект звуковой сигнализации затопления помещения. При погружении датчика в воду, сигнализация издает три вида звуковых сигналов (небольшое затопление, средний уровень, критический уровень), соответствуюший трем уровням воды. Для воспроизведения звуковых можно к цифровому выводу подключить пьезоизлучатель - электроакустическое устройства воспроизведения звука. Но при этом звук получается очень тихий. Чтобы получить громкость более приличного уровня, к цифровому выводу Arduino динамик, но не напрямую, а через транзистор. Для проекта нам понадобятся следующие детали:- Плата Arduino Uno
- Датчик уровня воды
- Динамик 8 Ом
- Резистор 500 Ом
- Транзистор КТ503е
- Соединительные провода
Запустим Arduino IDE. Создадим новый скетч и внесем в него следующие строчки // Датчик уровня воды // http://3d-diy.ru // контакт подключения аналогового выхода датчика int aPin=A0; // контакт подключения вывода реле int soundPin=11; // частота звукового сигнала int freq={587,466,293}; // переменная для сохранения значения датчика int avalue=0; // значение уровней int levels={600,500,400}; // текущий уровень int level=0; void setup() { // инициализация последовательного порта Serial.begin(9600); // настройка выводов индикации светодиодов // в режим OUTPUT pinMode(soundPin,OUTPUT); } void loop() { // получение значения с аналогового вывода датчика avalue=analogRead(aPin); // вывод значения в монитор последовательного порта Arduino Serial.print("avalue=");Serial.println(avalue); // вывод звука различной частоты для разных уровней погружения if(avalue>levels) tone(soundPin,freq,2000); else if(avalue>levels) tone(soundPin,freq,2000); else if(avalue>levels) tone(soundPin,freq,2000); else noTone(soundPin); // пауза перед следующим получением значения 1000 мс delay(1000); } Аналоговый вывод датчика подключен к аналоговому входу Arduino, который представляет собой аналого-цифровой преобразователь (АЦП) с разрешением 10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение аналоговых сигналов на аналоговом входе Arduino для трех уровней погружения были определены экспериментальным путем: > 400 – минимальное погружение; > 500 – средний уровень погружения; > 600 – большое погружение. Соответственно для каждого уровня погружения на динамике воспроизводится звуковой сигнал разной частоты: минимальное погружение – 293 Гц (нота ре 1 октавы); средний уровень погружения – 466 Гц (нота си-бимоль 1 октавы); большое погружение – 587 Гц (нота ре 2 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.
Часто задаваемые вопросы FAQ
1. Не горит светодиод питания 2. При погружении в воду не изменяется значение выходного аналогового сигнала- Проверьте соединение датчика с входом Arduino.
- Проверьте наличие и полярность подаваемого на датчик питания (3,3 – 5 В).
Продолжаю серию статей о компонентах умного дома. Сегодня поговорим о датчике протечки, какие электро краны купить и как этим управлять.
Для реализации проекта по защите от потопа в квартире я заказа у китайцев два электрических крана под резьбу 1/2 "" (DN15) схемой подключения DC3 и питанием 5 вольт.
Можно было заказать и на 12 вольт (они почему-то дешевле), но у меня не было подходящего блока питания. Для 5-и вольт подойдет любая зарядка от старого телефона.
Электрический кран
Кран имеет 3 провода:
- Красный - плюс 5 вольт
- Зеленый - минус
- Желтый - управляющий (плюс - закрыт, разрыв - открыт)
Электрическая схема
Управлять этими кранами будет ESP8266-01. Это очень удобное и дешевое решение, но требующее подключения стабилизатора на 3.3 вольта. Управление мы будем осуществлять по протоколу MQTT с мобильного телефона на android.
Подробно о том как подготовить ESP к прошивке скетчем из Arduino IDE и настройке брокер-сервера cloudmqtt.com для обмена данными между устройствами я описывал в статье "ESP + MQTT как основа умного дома " и по тому повторяться не буду.
Управлять нашими электрическими кранами будет микроконтроллер ESP8266. Порт RxD будет управлять открытием/закрытием крана. Порт GPIO0 будет измерять сопротивление между ним и землей - датчик воды. Краны подключены не напрямую, а через транзистор КТ316. Ток для этих кранов не большой и этого маломощного транзистора хватает. Принципиальная схема устройства:
Датчик воды представляет собой кусок текстолита с двумя контактами. Он двухсторонним скотчем приклеен в укромном низком месте где может появиться вода.
Принцип работы
При включении устройства оно проверяет сопротивление на датчике. Если оно мало - включает тревогу и отключает подачу воды, если в норме - работает в следящем режиме.
Параллельно с этим устройство соединяется к домашнему роутеру и через интернет находит подключение к брокер серверу. Подписывается на топики "valve/1", "valve/alarm". Если на брокер сервер с мобильного клиента приходит топик "valve/alarm" = true - кран открывается, false - закрывается. Топик "valve/alarm" = true искусственно вызывает срабатывание тревоги и краны закрываются. "valve/alarm" = false отключает тревогу, если датчик не касается воды.
Скетч программы для Arduino IDE
#includeУправление на телефона
Скачал на свой Android программу - IoT MQTT Dashboard. В ней настроил отображение значения топиков "valve/1", "valve/alarm", которые присылаются раз в 3 секунды. Для управления кранами создал два переключателя "valve/1" и "valve/alarm", которые отсылают строки "true" и "false" при переключении.
Теперь остается спаять схемку и подключить. Тратить время на печатную плату было лень и сделал все по простому.
Устройство закрепил в техническом шкафу санузла. Подвел питание 5 вольт от блока питания, что бы лишний раз не светить фазой возле водяных труб.
Модернизация
В планах на доработку системы - отказ от проводных датчиков и использовать радио модули 433 МГц датчиков охраны двери с герконом. Геркон выпаивается и подпаивается самопальный сенсор воды (Контакты на плате уже есть. Такой же датчик для воды стоит вдвое дороже но практически ничем не отличается.)
На плату нужно будет добавить приемник 433 МГц и доработать код.
Библиотека pubsubclient.h в приложении. Она используются в скетче. Если выйдет более свежая версия библиотеки - может потеряться обратная совместимость с кодом и тогда можно использовать pubsubclient.h из архива.