Сигнализация о протечке воды на Arduino

Всем привет и сразу к сути.

Позвонил знакомый и попросил помочь ему с дипломным проектом. Тема диплома: Оповещение об утечке воды, работающее по радиоканалу.

Недолго думая и сделав скидку на свою лень,прикинул в голове, что мне нужны две ардуины, 2 блока питания, какая-нибудь верещалка, модуль измерения влажности и комплект RF-модулей.

Arduino UNO, Arduino Nano, RF-модули и датчик влажности с операционником
Arduino UNO, Arduino Nano, RF-модули и датчик влажности с операционником

После приобретения необходимого взялся клепать исходник.

Блоки питания для отладки мне не нужны, и сирена тоже не особо роль сыграет.

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

Будем отправлять команду на срабатывание сирены лишь тогда, когда будет протечка, и датчик влажности зафиксирует превышение влажности. Проверку влажности сделаем один раз в секунду. Сброс тревоги организуем банальным Reset'ом.

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

Для радиосвязи задействуем популярную библиотеку RCSwitch, более нам ничего не потребуется.

Код передатчика для Arduino:

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup()
{
mySwitch.enableTransmit(2);
pinMode(13, OUTPUT);
}
void loop()
{
delay(1000);
if (digitalRead(11) == LOW)
mySwitch.send(B1101, 4);
if (digitalRead(11) == LOW)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
}

Собственно, этих строчек нам хватит, теперь на скорую руку пилим код приемника:

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup()
{
pinMode(13, OUTPUT);
mySwitch.enableReceive(0);
}
void loop()
{
if (mySwitch.available())
{
int value = mySwitch.getReceivedValue();
if (value == B1101)
digitalWrite(13, HIGH);
mySwitch.resetAvailable();
}
}

Схема подключения датчика к Arduino1:

"VCC " ----> 5V

"GND " ----> GND

"DO" ----> 11

Схема подключения передатчика к Arduino1 :

"+" ----> 3.3V

"-" ----> GND

"DAT" ----> 2

UNO с датчиком влажности и передатчиком
UNO с датчиком влажности и передатчиком

Схема подключения приемника к Arduino2:

"VCC " ----> 5V

"GND " ----> GND

"DO" ----> 2

Nano с приемником
Nano с приемником

А теперь вкратце опишу алгоритм работы. Передающее устройство каждую секунду проверяет сигнал на входе. Если вода попала на датчик, то операционник делает свое дело, и на выходе модуля влажности появляется логический ноль!!!!!. Во время очередной проверки микроконтроллер видит, что на входе логический ноль и посылает на радиопередатчик код 1101. Если датчик протерли и влаги на нем больше нет,то на микроконтроллер приходит логическая единица, и он ничего не передает "верещателю".

Приемное устройство постоянно мониторит эфир, и как только оно получило посылку с кодом 1101, подает логическую единицу на третий выход. На выходе висит генератор с динамиком, в моем случае хватит и светодиода, незачем соседей пугать))). Для отключения "верещателя" нажимаем кпопку сброса "Reset", и приемник снова становится в режим ожидания.

Если у Вас есть вопросы или предложения, пишите: nikitos-it@mail.ru или телеграмм https://t.me/nikitos_it

Проект можно поддержать тут или в форма для доната ниже ;)

Смелых идей и прямых рук! Ставьте пальцы вверх, подписывайтесь на канал, дальше будет интересней. Ваш Никитос.