Простую систему обнаружения дождя можно спроектировать, подключив датчик дождя к плате Arduino. Этот датчик будет обнаруживать любые осадки, которые падают на его поверхность и передавать сигнал об этом на плату Arduino, которая будет выполнять необходимые операции. Подобная система обнаружения дождя может быть использована в различных приложениях:
- в сельском хозяйстве для автоматического регулирования уровня полива растений;
- в автомобилях для автоматического включения стеклоочистителей;
- в системах автоматизации дома для автоматического закрытия окон и регулирования температуры в доме.
В данной статье мы рассмотрим создание простейшей системы обнаружения дождя на основе платы Arduino, датчике дождя и зуммера. При обнаружении дождя в нашей системе плата Arduino будет подавать сигнал на включение зуммера, который будет издавать звуковой сигнал. В дальнейшем вы на основе этого проекта сможете при обнаружении дождя с помощью платы Arduino управлять любыми необходимыми вам исполнительными механизмами, то есть построить именно ту систему обнаружения дождя, которая вам нужна.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Датчик дождя (Rain sensor) (купить на AliExpress).
- Зуммер (Buzzer) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Датчик дождя (Rain sensor)
Модуль датчика дождя состоит из двух плат – плата обнаружения дождя (Rain Board) и плата управления (Control Board).
Плата обнаружения дождя состоит из двух медных проводников, спроектированных таким образом (имеющих такую форму), что в условиях сухого воздуха они имеют большое сопротивление, поэтому на выходе модуля в этих условиях будет напряжение 5V. По мере увеличения влажности окружающей среды сопротивление этих проводников постепенно уменьшается, что приводит к уменьшению напряжения на выходе модуля пропорционально увеличению влажности окружающей среды. Плата обнаружения дождя имеет 2 контакта, к которым подключается плата управления как показано на следующем рисунке.
Плата управления регулирует чувствительность датчика дождя и преобразует аналоговый выход платы обнаружения дождя в цифровой выход. Если значение аналогового напряжения на входе платы управления (с выхода платы обнаружения дождя) меньше определенной границы, то на выходе платы будет напряжение низкого уровня (low), а если значение аналогового напряжения на входе платы будет больше этой границы, то на выходе платы будет напряжение высокого уровня (high). Для этой цели в составе платы присутствует компаратор на основе микросхемы операционного усилителя LM393.
Модуль датчика дождя, показанный на рисунке ниже, имеет с одной стороны 4 контакта (VCC, GND, D0, A0), которые мы будем подключать к плате Arduino, и 2 контакта с другой стороны, которые мы будем подключать к плате обнаружения дождя. Таким образом, в нашем проекте плата обнаружения дождя будет обнаруживать наличие дождя, а плата управления будет использоваться для регулировки чувствительности и преобразования аналогового выхода платы обнаружения дождя в цифровой выход.
Принцип работы датчика дождя
Принцип работы датчика дождя достаточно прост. В ясную сухую погоду он имеет большое сопротивление, поэтому на его выходе формируется напряжение высокого уровня (5V), что соответствует значению 1023 на выходе АЦП (аналого-цифрового преобразователя) того аналогового контакта платы Arduino, к которому подключен датчик. Во время влажной погоды (дождя) сопротивление датчика уменьшается, следовательно, уменьшается и напряжение на выходе датчика.
Когда влажность очень сильная, сопротивление датчика будет равно его минимальному значению, поэтому и напряжение на выходе датчика будет приблизительно равно 0. Это значение напряжения 0V будет соответствовать значению 0 на выходе АЦП того аналогового контакта платы Arduino, к которому подключен датчик. Если же, к примеру, на выходе датчика будет напряжение 3V, то это будет соответствовать значению 613 на выходе АЦП контакта платы Arduino. Поэтому формула для расчета значения на выходе АЦП будет выглядеть следующим образом:
ADC = (analog voltage value X 1023)/5,
где analog voltage value – аналоговое значение напряжения на выходе датчика дождя.
Схема проекта
Схема подключения датчика дождя к плате Arduino Uno представлена на следующем рисунке. Работа данной схемы была смоделирована в симуляторе Proteus.
На представленной схеме плата обнаружения дождя подключена к плате управления. Контакт VCC платы управления подключен к источнику напряжения 5V. Земля платы управления подключена к земле схемы. Выходной контакт датчика можно подключить к любому цифровому контакту платы Arduino, однако в результате наших экспериментов мы выяснили, что более стабильно схема работает если его подключить к аналоговому контакту платы Arduino. Зуммер подключен к контакту D5 платы Arduino.
Примечание: в нарисованной схеме небольшая ошибка, выходной контакт датчика дождя должен быть подключен не к контакту Reset, а к аналоговому контакту A0 платы Arduino.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Вначале в программе инициализируем необходимые контакты и переменные.
1 2 3 4 |
#define rainfall A0 #define buzzer 5 int value; int set=10; |
К контакту A0 подключен к датчику дождя, к контакту 5 подключен зуммер. Также объявлены две переменные целого типа “value” и “set”. Переменной “set” присвоено значение 10 – это значение определяет, при каком уровне влажности зуммер будет издавать звуковой сигнал. Измените это значение если хотите изменить порог влажности, при котором будет срабатывать рассматриваемая нами схема.
Далее, в функции void setup(), мы инициализируем последовательную связь и зададим режимы работы (на ввод или вывод данных) для используемых контактов.
1 2 3 4 5 |
void setup() { Serial.begin(9600); pinMode(buzzer,OUTPUT); pinMode(rainfall,INPUT); } |
Затем в функции void loop() мы будем считывать значение напряжения с выхода датчика дождя. Далее с помощью функции map мы конвертируем считанное значение напряжения в диапазон от 0 до 255.
1 2 3 4 |
void loop() { value = analogRead(rainfall); Serial.println(value); value = map(value,0,1023,225,0); |
Если считанное с датчика значение (value) больше установленной нами границы (set), то мы передаем в окно монитора последовательной связи сообщение о начавшемся дожде и включаем зуммер.
1 2 3 |
if(value>=set){ Serial.println("rain detected"); digitalWrite(buzzer,HIGH); |
Если же описанное условие не выполняется (дождя нет), то мы выключаем зуммер.
1 2 |
else{ digitalWrite(buzzer, LOW); |
Тестирование работы детектора дождя
Спроектированный нами детектор дождя на основе платы Arduino работает таким образом, что при появлении дождя он включает сигнал зуммера, а при отсутствии дождя он отключает сигнал зуммера. Датчик дождя подключен к контакту A0, а зуммер – к контакту 5 платы Arduino. При желании вы легко можете изменить эти контакты, не трогая остальную часть кода. При появлении дождя зуммер включается, а когда дождь кончается – зуммер выключается. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Взяв за основу наш проект, вы легко сможете спроектировать на его основе устройства на основе датчика дождя, подходящие для практического применения, например, систему автоматического полива растений, закрытия окон в доме при появлении дождя, систему автоматического включения дворников (стеклоочистителей) на транспортном средстве и т.д.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#define rainfall A0 #define buzzer 5 int value; int set=10; void setup() { Serial.begin(9600); pinMode(buzzer,OUTPUT); pinMode(rainfall,INPUT); } void loop() { value = analogRead(rainfall); Serial.println("LOL"); Serial.println(value); value = map(value,0,1023,225,0); Serial.println(value); if(value>=set){ Serial.println("rain detected"); digitalWrite(buzzer,HIGH); } else{ digitalWrite(buzzer,LOW); } delay(200); } |