风筝
发表于: 2020-1-9 21:42:38 | 显示全部楼层

通过使用Arduino开发板和雨量传感器(Rain Sensor)连接,可以轻松制作一个简单的雨水检测系统(Rain Detection System)。传感器将检测到任何降雨,Arduino开发板将对其进行感应并执行所需的操作。这样的系统可用于许多不同的领域,例如农业和汽车领域。降雨检测可用于自动调节灌溉过程。而且,连续的降雨数据可以帮助农民使用该智能系统,仅在需要时才自动为作物浇水。同样,在汽车领域,通过使用雨水检测系统可以使雨刷器完全自动化。而且,家庭自动化系统还可以使用雨水检测功能自动关闭窗户并调节室温。在本篇文章中,我们将使用Arduino和蜂鸣器制作简单的雨量传感器。然后,您可以在该设置基础之上制作任何所需的内容。另外,请注意,雨量传感器模块根据使用情况也称为雨滴传感器、或雨水传感器,但本文中它们均指的是同一传感器,并且工作原理相同。


所需的材料

●    Arduino UNO开发板

●    雨量传感器

●    蜂鸣器

●    面包板

●    连接导线


雨量传感器

雨量检测模块由两个电路板组成,分别是雨量传感器电路板和控制板。


雨量传感器电路板模块(Rain Sensor)由两个铜线组成,其设计方式使得它们在干燥条件下可为电源电压提供高电阻,并且该模块的输出电压为5V。随着电路板上湿度的增加,该模块的电阻逐渐减小。随着电阻的降低,其输出电压也会相对于模块上的湿度降低。雨量传感器电路板模块由两个用于连接到控制板的引脚组成,如下所示。

Rain-Sensor.png


控制板模块控制灵敏度并将模拟输出转换为数字输出。如果模拟值低于控制板的阈值,则输出为低电平;如果模拟值高于阈值,则输出为数字高电平。为了进行比较和转换,使用了LM393运算放大器比较器。运算放大器比较器是一个有趣的电路,可以用来比较两个不同的电压值。


如下所示,雨量控制模块由4个用于连接Arduino的引脚组成,即VCC、GND、D0、A0,另外两个引脚用于连接雨量传感器电路板模块。总之,雨量传感器电路板模块检测雨水,控制板模块用于控制灵敏度,并将模拟值转换为数字值。

Rain-Control-Module.png


雨量传感器的工作原理

雨量传感器模块的工作原理很容易理解。在晴天期间,由于模块干燥,因此对电源电压具有很高的电阻。该电压在模块的输出引脚上为5V。如果由Arduino的模拟引脚读取,则此5V读取为1023。在下雨期间,雨水会导致雨量传感器模块电路板的湿度增加,进而导致电阻减小。随着电阻逐渐减小,输出电压开始减小。


当雨量传感器模块完全湿透并且其提供的电阻最小时,输出电压将尽可能低(约0)。如果由Arduino的模拟引脚读取,则此0V将读取为0值。如果模块部分潮湿,则该雨板模块的输出将取决于其提供的电阻。如果通过防雨板模块提供的电阻的输出为3V,则读取的模拟值将为613。可以通过以下公式得出查找ADC的公式:ADC =(模拟电压值X 1023)/ 5。通过使用此公式,您可以将任何模拟电压转换为Arduino模拟读取值。


电路图

下面的电路图显示了Arduino与雨量传感器的电路连接。

Interfacing-Rain-Sensor-with-Arduino-Circuit-Diagram.png


电路图中所示的雨量传感器模块连接至控制板。控制板的VCC引脚连接到5V电源。接地引脚接地。如果需要,可以将D0引脚连接到Arduino的任何数字引脚,并且该引脚必须在程序中声明为输入引脚。 由于D0引脚输出的是高低电平信号,因此我们无法获得D0引脚确切的输出电压值。如果输出引脚超过阈值电压,则控制模块可以监测输出的变化。即使雨量传感器模块中的输出电压发生一点变化,我们也需要操作蜂鸣器。由于这些原因,我们使用A0引脚,并将其连接到Arduino的模拟引脚,这使得监视输出变化变得容易。蜂鸣器可以连接到Arduino的任意数字引脚。如果蜂鸣器需要5V以上的电压,则尝试使用继电器电路或晶体管。


代码说明

雨量传感器的Arduino代码是使用Arduino IDE编写的。该项目的完整代码在本文末尾给出。

  1. #define rainfall A0
  2. #define buzzer 5
  3. int value;
  4. int set=10;
复制代码

将引脚A0定义为rainfall,将引脚5定义为buzzer,并将变量“value”和“set”声明为整数,并将其变量set值设置为10。可以根据实际情况更改此值。如果您希望即使下雨很小也能启动蜂鸣器,将变量值设置为最小值。

  1. void setup() {
  2.   Serial.begin(9600);
  3.   pinMode(buzzer,OUTPUT);
  4.   pinMode(rainfall,INPUT);
  5.   }
复制代码

初始化串口通讯,并将蜂鸣器设置为输出引脚,将rainfall引脚设置为输入引脚。

  1. void loop() {
  2. value = analogRead(rainfall);
  3. Serial.println(value);
  4. value = map(value,0,1023,225,0);
复制代码

在loop函数中,函数analogRead读取雨量传感器的值。Serial.println(value)在串口监视器上打印该值,这在调试时很有帮助。map函数映射输出引脚上的雨量传感器的值,并为变量分配一个值,范围为0到225。

  1. if(value>=set){
  2.   Serial.println("rain detected");
  3.   digitalWrite(buzzer,HIGH);
复制代码

如果读取的传感器值大于set值,则程序进入循环,在串口监视器上打印消息并打开蜂鸣器

  1. else{
  2.   digitalWrite(buzzer, LOW);
复制代码

仅当该值小于set值时,程序才进入else功能。当设定值大于传感器的值时,将关闭蜂鸣器,表明没有雨。


基于Arduino的雨水检测系统的工作

该系统的工作方式是:在下雨时,雨水充当触发器,从而触发蜂鸣器。在雨滴传感器的Arduino代码中,我们定义了引脚5是蜂鸣器和A0是雨滴传感器引脚。

Arduino-based-Rain-Detection-System.jpg


这是雨量传感器的众多应用场景中的一种,在雨刷、其他家庭自动化、农业部门等中也会看到相同的原理。希望您理解该项目并喜欢进行制作。如果您有任何疑问,请在本帖下面进行回复。


代码

以下是本文使用的完整代码: main.rar (342 Bytes, 下载次数: 110)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-20 08:04 , Processed in 0.132407 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表