基于Arduino的雨水检测系统设计

电子说

1.2w人已加入

描述

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

所需的材料

●    Arduino UNO开发板

●    雨量传感器

●    蜂鸣器

●    面包板

●    连接导线

雨量传感器

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

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

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

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

雨量传感器的工作原理

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

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

电路图

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

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

代码说明

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

#define rainfall A0

#define buzzer 5

int value;

int set=10;

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

void setup() {

Serial.begin(9600);

pinMode(buzzer,OUTPUT);

pinMode(rainfall,INPUT);

}

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

void loop() {

value = analogRead(rainfall);

Serial.println(value);

value = map(value,0,1023,225,0);

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

if(value>=set){

Serial.println("rain detected");

digitalWrite(buzzer,HIGH);

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

else{

digitalWrite(buzzer, LOW);

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

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

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

这是雨量传感器的众多应用场景中的一种,在雨刷、其他家庭自动化、农业部门等中也会看到相同的原理。希望您理解该项目并喜欢进行制作。
编辑:hfy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分