Как работает датчик дождя и его взаимодействие с Arduino
Рассмотрим датчик, который вы можете использовать для отслеживания дождя или мокрого снега/града, а при обнаружении дождя автоматически закрывать электронные жалюзи, окна или навесы.
Как работает датчик дождя?
Принцип действия датчика дождя довольно прост.
Сенсорная панель с рядом открытых медных дорожек действует как переменный резистор (потенциометр), сопротивление которого изменяется в зависимости от количества воды на его поверхности.
Это сопротивление обратно пропорционально количеству воды:
- Чем больше воды на поверхности, тем лучше проводимость и ниже сопротивление.
- Меньшее количество воды на поверхности означает плохую проводимость и приводит к более высокому сопротивлению.
Датчик выдает выходное напряжение в соответствии с сопротивлением сенсорной панели; и, измеряя это напряжение, мы можем определить, идет ли дождь или нет.
Обзор аппаратного обеспечения
Типовой датчик дождя состоит из двух компонентов.
Сенсорная панель
Датчик включает в себя сенсорную панель с рядом открытых медных дорожек, которая размещается на открытом месте, например, на крыше или там, где на нее могут воздействовать осадки.
Обычно эти дорожки электрически не связаны друг с другом, но вода образует между ними электрический контакт.
Модуль
Датчик также содержит электронный модуль, который соединяет сенсорную панель с Arduino.
Модуль выдает выходное напряжение в соответствии с сопротивлением сенсорной панели, которое доступно на выводе аналогового выхода (AO).
Тот же сигнал подается на прецизионный компаратор LM393 для его оцифровки, сигнал с выхода компаратора подается на вывод цифрового выхода модуля (DO).
Для регулировки чувствительности цифрового выхода (DO) модуль имеет встроенный потенциометр. С помощью этого потенциометра вы можете установить порог срабатывания; таким образом, когда количество воды превышает пороговое значение, модуль выдаст низкий логический уровень, в противном случае он будет выдавать высокий логический уровень.
Поверните движок потенциометра по часовой стрелке, чтобы увеличить чувствительность, или против часовой стрелки, чтобы уменьшить ее.
Помимо этого, модуль имеет два светодиода. Индикатор питания загорится, когда на модуль подано напряжение питания. Светодиод состояния загорится, когда на цифровом выходе будет установлен низкий логический уровень.
Распиновка датчика дождя
Датчик дождя очень прост в использовании и для подключения содержит только 4 вывода.
AO (аналоговый выход) выдает нам аналоговый сигнал в диапазоне от 0 В до напряжения питания (5 В).
Вывод DO (цифровой выход) выдает цифровой выходной сигнал со схемы внутреннего компаратора. Вы можете подключить его к любому цифровому выводу Arduino или напрямую к реле 5В или любому другому подобному устройству.
GND – земля.
Вывод VCC используется для подачи питания на датчик. Рекомендуется питать датчик напряжением от 3,3 до 5 В. Обратите внимание, что напряжение на аналоговом выходе будет зависеть от того, какое напряжение питания подается на датчик.
Подключение датчика дождя к Arduino
Сначала вам нужно подать питание на датчик. Для этого вы можете подключить вывод VCC на модуле к выводу 5V на Arduino.
Однако, одна из широко известных проблем с этими датчиками – это их короткий срок службы при воздействии влажной среды. Постоянная подача питания на сенсорную панель значительно ускоряет процесс коррозии.
Чтобы решить эту проблему, мы рекомендуем не держать датчик включенным постоянно, а подавать на него питание только тогда, когда снимаете показания.
Самый простой способ сделать это – подключить вывод VCC к цифровому выводу Arduino и устанавливать на нем либо высокий, либо низкий логический уровень.
Кроме того, общая мощность, потребляемая модулем (оба светодиода горят), составляет около 8 мА, поэтому питать модуль от цифрового вывода Arduino можно.
Итак, давайте подключим вывод VCC на модуле к цифровому выводу 7 Arduino и соединим земли (выводы GND) на модуле и Arduinio.
И, наконец, подключим вывод DO на модуле к цифровому выводу 8 Arduino.
На следующем рисунке показана схема соединений.
Калибровка датчика дождя
Чтобы получить точные показания с датчика дождя, рекомендуется сначала его откалибровать.
Модуль имеет встроенный потенциометр для калибровки цифрового выхода (DO).
Поворачивая ручку потенциометра, вы можете установить порог срабатывания. Таким образом, когда количество воды превышает пороговое значение, светодиод состояния загорается, а на цифровой выход (DO) подается низкий логический уровень.
Теперь, чтобы откалибровать датчик, брызните немного воды на сенсорную панель и поверните потенциометр по часовой стрелке, чтобы светодиод состояния зажегся, а затем поворачивайте потенциометр против часовой стрелки до тех пор, пока светодиод не погаснет.
Теперь ваш датчик откалиброван и готов к использованию.
Обнаружение дождя. Код для Arduino
Как только схема будет собрана, загрузите следующий скетч в вашу плату Arduino.
Теперь поместите датчик дождя в такое место, чтобы осадки могли попадать прямо в датчик, возможно, на крышу. Чтобы облегчить сток воды, слегка его наклоните (~20°).
Обратите внимание, что электронный модуль не обеспечивает водонепроницаемость, поэтому при установке соблюдайте осторожность, чтобы с водой контактировала только сенсорная панель.
// выводы, подключенные к датчику
#define sensorPower 7
#define sensorPin 8
void setup()
{
pinMode(sensorPower, OUTPUT);
// изначально держим датчик выключенным
digitalWrite(sensorPower, LOW);
Serial.begin(9600);
}
void loop()
{
// получить показания из функции ниже и вывести их в печать
int val = readSensor();
Serial.print("Digital Output: ");
Serial.println(val);
// определить состояние дождя
if (val)
{ // дождя нет
Serial.println("Status: Clear");
}
else
{ // идет дождь
Serial.println("Status: It's raining");
}
// брать показания каждую секунду
delay(1000);
Serial.println();
}
// эта функция возвращает значение на выходе датчика
int readSensor()
{
digitalWrite(sensorPower, HIGH); // включить датчик
delay(10); // дать время питанию установиться
int val = digitalRead(sensorPin); // прочитать выходной сигнал датчика
digitalWrite(sensorPower, LOW); // выключить датчик
return val; // вернуть значение
}
Как только скетч будет загружен, откройте окно монитора последовательного порта, чтобы увидеть выходные данные Arduino. При ясной погоде вы должны увидеть высокий логический уровень на цифровом выходе. Чтобы увидеть, как определяется вода, можно брызнуть немного воды на сенсорную панель.
Объяснение кода
Скетч начинается с объявления выводов Arduino, к которым подключены выводы VCC и DO датчика.
#define sensorPower 7
#define sensorPin 8
Теперь, в функции setup()
, мы сначала объявляем вывод подключения питания к датчику как выход, а затем устанавливаем на нем низкий логический уровень, чтобы изначально питание на датчик не подавалось. Также настраиваем последовательный порт.
pinMode(sensorPower, OUTPUT);
digitalWrite(sensorPower, LOW);
Serial.begin(9600);
В функции цикла мы периодически (с интервалом в одну секунду) вызываем функцию readSensor()
и выводим возвращаемое значение вместе со статусом.
int val = readSensor();
Serial.print("Digital Output: ");
Serial.println(val);
if (val)
{
Serial.println("Status: Clear");
}
else
{
Serial.println("Status: It's raining");
}
delay(1000);
Функция readSensor()
используется для получения текущего состояния цифрового выхода датчика. Она включает датчик, ждет 10 миллисекунд, считывает цифровое значение с датчика, выключает датчик и затем возвращает результат.
int readSensor()
{
digitalWrite(sensorPower, HIGH);
delay(10);
int val = digitalRead(sensorPin);
digitalWrite(sensorPower, LOW);
return val;
}