Датчик протечки (он же датчик дождя или датчик воды) может быть выполнен в виде одного или двух модулей:
Рассмотрим использование двухмодульного датчика как наиболее универсального. Во-первых, с него можно получить как цифровой, так и аналоговый сигнал, а, во-вторых, так как модули разнесены, проще изолировать от попадания воды все части датчика, которые не рассчитаны на ее попадание.
Итак, датчик состоит из двух модулей:
- плата, которая рассчитана на попадание на нее капель воды, состоящая из "змейки" непересекающихся между собой токопроводящих дорожек, расположенных на обеих сторонах
- модуль с микросхемой LM393 (могут также использоваться LM293 и LM193) с "обвязкой", преобразующий сигнал с первого модуля в аналоговый
Для работы модуля необходимо соединить модули двумя проводами, а второй модуль подключить к плате Arduino:
- контакт VCC модуля к контакту +5 или +3.3 вольта платы Arduino (датчик умеет работать с обоими напряжениями)
- контакт GND соответственно к контакту GND платы Arduino
- контакт D0 - к любому свободному цивровому пину
- контакт A0 - к любому свободному аналоговому пину
Подключение, как видно, очень простое и не требует схемы.
Простейший код работы с датчиком, подключенным к 8 цифровому пину, выглядит так:
#define WATER_SENSOR_D_PIN 8
void setup()
{
Serial.begin(9600);
pinMode(WATER_SENSOR_D_PIN, INPUT);
}
void loop()
{
int waterSensorValue = digitalRead(WATER_SENSOR_D_PIN);
if (waterSensorValue == LOW) {
Serial.println("ALARM!");
} else {
Serial.println("All is OK...");
}
delay(1000);
}
Этот код позволяет определить, есть ли вода на поверхности датчика или нет. Самый простой вариант сигнализации - подключить к плате спикер (пищалку) и включать звук при попадании воды на датчик, а при отсутствии - отключать:
#define WATER_SENSOR_D_PIN 8
#define SPEAKER_PIN 9
void setup()
{
Serial.begin(9600);
pinMode(WATER_SENSOR_D_PIN, INPUT);
pinMode(SPEAKER_PIN, OUTPUT);
}
void loop()
{
int waterSensorValue = digitalRead(WATER_SENSOR_D_PIN);
if (waterSensorValue == LOW) {
tone(SPEAKER_PIN, 700);
} else {
noTone(SPEAKER_PIN);
}
delay(1000);
}
Ну и последний вариант: использование аналогового сигнала с датчика.
#define WATER_SENSOR_A_PIN A3
void setup()
{
Serial.begin(9600);
pinMode(WATER_SENSOR_A_PIN, INPUT);
}
void loop()
{
int waterSensorValue = analogRead(WATER_SENSOR_A_PIN);
Serial.println(waterSensorValue);
delay(1000);
}
При отсутствии воды мы будем получать значение 1023, а при наличии - значение будет уменьшаться обратнопропорционально количеству жидкости на датчике. Таким образом, можно не только проверить, есть ли протечка, но также понять, насколько она сильная. Или же контролировать какой-то объект, наличие небольшого количества воды для которого - это нормально, и запускать сигнализацию только при превышении некоторого порогового значения.
Можно проделать интересный эксперимент: запустить код и смочить датчик небольшим количеством воды. Мы увидим, как значение сначала опустится, а потом, по мере испарения воды с датчика, будет возрастать, пока не станет равным 1023.
Ну и самое приятное: такой датчик стоит копейки по сравнению со стоимостью готовых сигнализаций протечки. А при желании его можно легко подключить к умному дому, тогда он сможет отправлять сигнал например вам на почту или в мессенджер, когда вас нет поблизости.
Купить датчик можно здесь: 1 2 3, а также еще несколько ссылок есть в соответствующем разделе каталога.