Arduino

технологии

Использование датчика протечки

Датчик протечки (он же датчик дождя или датчик воды) может быть выполнен в виде одного или двух модулей:

Water sensor (one module)    Water sensor (one module)    Water sensor (two modules)

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

Итак, датчик состоит из двух модулей:

  • плата, которая рассчитана на попадание на нее капель воды, состоящая из "змейки" непересекающихся между собой токопроводящих дорожек, расположенных на обеих сторонах
  • модуль с микросхемой 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.

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

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