Как работает датчик дождя и его подключение к Arduino

Как работает датчик дождя и его подключение к Arduino

Представьте: вы отдыхаете дома, и вдруг набегают тёмные тучи. Не успели вы оглянуться, как дождь льёт через открытые окна и мансардные люки, заливая мебель и полы. Разве не было бы замечательно, если бы ваш дом мог сам определять дождь и реагировать автоматически — закрывать люки, убирать маркизу или отправлять оповещения?

Именно для этого и нужен датчик дождя! Этот датчик может обнаруживать не только дождь, но и мокрый снег или град, позволяя принять меры до того, как вода нанесёт ущерб.

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

Давайте начнём и добавим погодно-зависимую автоматизацию в ваши проекты!

Как работает датчик дождя?

Принцип работы датчика дождя довольно прост.

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

  • Когда больше воды покрывает поверхность, проводимость увеличивается, что приводит к уменьшению сопротивления.

  • Когда воды меньше, проводимость уменьшается, что приводит к увеличению сопротивления.

Как работает датчик дождя и его подключение к Arduino

Датчик генерирует выходное напряжение на основе этого изменяющегося сопротивления. Измеряя напряжение, мы можем определить, идёт ли дождь, а в некоторых случаях даже оценить количество выпавших осадков.

Обзор оборудования

Типичный модуль датчика дождя состоит из двух основных частей: чувствительной площадки и модуля компаратора LM393.

Чувствительная площадка

Чувствительная площадка — это компонент, который обнаруживает дождь. Она имеет набор открытых медных дорожек и обычно размещается на открытом пространстве, например на крыше, где она может непосредственно контактировать с дождём.

Как работает датчик дождя и его подключение к Arduino

Модуль компаратора LM393

Помимо чувствительной площадки, модуль включает компаратор LM393, обеспечивающий как аналоговый, так и цифровой выходы.

Аналоговый выход (вывод AO) поступает непосредственно от изменяющегося сопротивления чувствительной площадки. По мере накопления воды сопротивление уменьшается, что приводит к более низкому напряжению на аналоговом выходе.

Как работает датчик дождя и его подключение к Arduino

Этот аналоговый сигнал также подаётся на компаратор LM393, который сравнивает его с пороговым значением (опорным напряжением), заданным потенциометром на модуле.

  • Если количество воды на чувствительной площадке ниже установленного порога, компаратор выдаёт HIGH на цифровом выходе (DO).

  • Если уровень воды на площадке превышает порог, компаратор выдаёт LOW на цифровом выходе.

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

Вы можете настроить порог, поворачивая потенциометр:

Как работает датчик дождя и его подключение к Arduino

На модуле также есть два светодиодных индикатора:

  • Светодиод питания — загорается при подаче питания на модуль.

  • Светодиод статуса — загорается, когда цифровой выход (DO) переходит в LOW, что указывает на обнаружение дождя.

Распиновка датчика дождя

Датчик дождя чрезвычайно прост в использовании и требует подключения всего четырёх выводов.

Как работает датчик дождя и его подключение к Arduino

AO — аналоговый выходной вывод. Этот вывод выдаёт переменное напряжение, соответствующее количеству воды на чувствительной площадке — чем больше воды, тем ниже выходное напряжение. Подключите его к аналоговому входному выводу Arduino (например, A0).

DO — цифровой выходной вывод. Этот вывод выдаёт LOW, когда количество воды на чувствительной площадке превышает пороговое значение, установленное потенциометром, и HIGH в противном случае. Подключите его к цифровому входному выводу Arduino.

VCC — вывод питания датчика. Лучше всего питать датчик напряжением от 3,3 В до 5 В. Имейте в виду, что аналоговое выходное значение будет меняться в зависимости от подаваемого напряжения.

GND — это вывод заземления.

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

При использовании датчика дождя с Arduino правильная настройка поможет продлить его срок службы. Давайте пошагово подключим датчик.

На первый взгляд, питание датчика дождя кажется простым — можно было бы подключить его вывод VCC напрямую к выводу 5 В Arduino. Однако постоянное питание может привести к более быстрой коррозии поверхности датчика из-за постоянного воздействия влаги. Это снизит его эффективность со временем.

Решение? Не держите датчик постоянно под питанием. Вместо этого включайте его только тогда, когда хотите сделать замер. Для этого подключите вывод VCC датчика к цифровому выводу Arduino вместо вывода 5 В. Таким образом, вы сможете контролировать, когда датчик получает питание, просто меняя состояние цифрового вывода в коде.

Не беспокойтесь о потреблении тока — датчик дождя потребляет всего около 8 миллиампер (мА), когда оба его светодиода горят. Это настолько мало, что совершенно безопасно питать датчик напрямую от цифрового вывода Arduino. В нашей схеме мы подключим вывод VCC модуля датчика к цифровому выводу 7 Arduino, а вывод GND — к GND Arduino.

Для чтения выходного сигнала датчика мы подключим вывод DO (цифровой выход) модуля датчика к цифровому выводу 8 Arduino. Эта настройка позволяет Arduino обнаруживать дождь, считывая цифровой сигнал датчика.

Вот краткая справочная таблица подключения выводов:

Rain SensorArduino
VCC7
GNDGND
DO8

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

Как работает датчик дождя и его подключение к Arduino

Настройка порога

Как вы знаете, модуль датчика дождя оснащён небольшим потенциометром, позволяющим настроить чувствительность датчика к воде. Это означает, что вы можете определить, сколько именно воды должно присутствовать, прежде чем датчик сработает. Когда количество воды на чувствительной площадке превышает установленный порог, светодиод статуса на модуле загорается, а вывод DO (цифровой выход) выдаёт сигнал LOW.

Для настройки порога:

  • Начните с лёгкого разбрызгивания воды на чувствительную площадку датчика.

  • Медленно поворачивайте потенциометр по часовой стрелке, пока светодиод статуса не загорится.

  • Теперь аккуратно поверните потенциометр немного против часовой стрелки, пока светодиод не погаснет.

Вот и всё! Ваш датчик дождя теперь готов к использованию в ваших проектах.

Расположение и установка

При установке датчика дождя помните следующие важные рекомендации:

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

  2. Наклоните чувствительную площадку примерно на 20 градусов, чтобы вода эффективно стекала.

  3. Помните, что хотя чувствительная площадка рассчитана на воздействие дождя, сам электронный модуль не является водонепроницаемым. Убедитесь, что модуль установлен в сухом месте, чтобы только чувствительная площадка контактировала с водой.

Пример кода Arduino

После подключения датчика к Arduino загрузите предоставленный скетч на вашу плату.

// Sensor pins
#define sensorPower 7
#define sensorPin 8

void setup() {
  pinMode(sensorPower, OUTPUT);

  // Initially keep the sensor OFF
  digitalWrite(sensorPower, LOW);

  Serial.begin(9600);
}

void loop() {
  //get the reading from the function below and print it
  int val = readSensor();
  Serial.print("Digital Output: ");
  Serial.println(val);

  // Determine status of rain
  if (val) {
    Serial.println("Status: Clear");
  } else {
    Serial.println("Status: It's raining");
  }

  delay(1000);  // Take a reading every second
  Serial.println();
}

//  This function returns the sensor output
int readSensor() {
  digitalWrite(sensorPower, HIGH);   // Turn the sensor ON
  delay(300);                        // Allow power to settle
  int val = digitalRead(sensorPin);  // Read the sensor output
  digitalWrite(sensorPower, LOW);    // Turn the sensor OFF
  return val;                        // Return the value
}

После запуска скетча откройте монитор последовательного порта в Arduino IDE. Сначала вы должны увидеть «Status: Clear», если чувствительная площадка сухая. Теперь, чтобы проверить датчик, разбрызгайте немного воды на площадку и наблюдайте, как статус меняется на «It’s raining». Когда площадка высохнет, выход должен вернуться к «Clear».

Как работает датчик дождя и его подключение к Arduino

Объяснение кода:

Код начинается с определения выводов Arduino, подключённых к выводам VCC и DO модуля датчика.

#define sensorPower 7
#define sensorPin 8

В функции setup() первое, что мы делаем — устанавливаем вывод sensorPower как OUTPUT, чтобы мы могли контролировать, когда датчик получает питание. Для минимизации коррозии и продления срока службы датчика мы изначально устанавливаем этот вывод в LOW, что означает, что датчик выключен по умолчанию. Мы также инициализируем монитор последовательного порта, чтобы видеть выходные данные датчика в реальном времени.

void setup() {
  pinMode(sensorPower, OUTPUT);

  // Initially keep the sensor OFF
  digitalWrite(sensorPower, LOW);

  Serial.begin(9600);
}

Теперь в функции loop() мы непрерывно проверяем наличие дождя. Для этого мы вызываем функцию readSensor() каждую секунду. Значение, возвращаемое readSensor(), сообщает нам, обнаружен ли дождь. Если датчик возвращает HIGH, это означает, что площадка сухая, и мы выводим «Status: Clear» в монитор последовательного порта. Если датчик возвращает LOW, это означает, что на площадке достаточно воды, чтобы считаться дождём, и мы отображаем «Status: It’s raining».

void loop() {
  //get the reading from the function below and print it
  int val = readSensor();
  Serial.print("Digital Output: ");
  Serial.println(val);

  // Determine status of rain
  if (val) {
    Serial.println("Status: Clear");
  } else {
    Serial.println("Status: It's raining");
  }

  delay(1000);  // Take a reading every second
  Serial.println();
}

Функция readSensor() отвечает за получение цифрового выхода датчика. Для этого она сначала включает датчик, устанавливая вывод питания в HIGH, затем ждёт 300 миллисекунд для стабилизации. После этого она считывает цифровое значение с вывода DO датчика, затем немедленно выключает датчик. Наконец, функция возвращает считанное значение, которое используется для определения, идёт ли дождь. Этот метод гарантирует, что датчик включён только при необходимости, уменьшая износ.

int readSensor() {
  digitalWrite(sensorPower, HIGH);   // Turn the sensor ON
  delay(300);                        // Allow power to settle
  int val = digitalRead(sensorPin);  // Read the sensor output
  digitalWrite(sensorPower, LOW);    // Turn the sensor OFF
  return val;                        // Return the value
}