风筝
发表于: 2022-11-15 14:27:27 | 显示全部楼层

天气仍一如既往地诡异莫测,当窗户打开时,天空会突然开始下雨,屋内的东西就很容易被雨水打湿。但是,如果使用雨水传感器,您可以阻止这种情况发生。


您可以使用雨水传感器监视雨水/冰雹的出现,当降雨时可以向电子百叶窗、遮阳篷或天窗发送一条关闭请求。


雨水传感器是如何工作?

雨水传感器(Rain Sensor)的工作原理非常简单。一些露铜走线的传感焊盘用作可变电阻器(就像电位器一样),其电阻值根据其表面上的水量改变。

Rain-Sensor-Working.gif

电阻值与雨水量成反比:

●    表面上的水量越多,意味着更好的电导率,并且会形成较小的电阻值。

●    表面上的水量较少,意味着交叉的电导率,并且会形成较大的电阻值。

传感器根据电阻产生输出电压,通过测量我们可以确定是否下雨。


硬件概述

常见的雨水传感器具有两个组件。


传感器包含一个带有一圈露铜走线的传感焊盘,放置在开放式的屋顶上或可能受降雨影响的地方。


正常时,这些走线没有连接一起,但可以被雨水桥接。

Rain-Sensor-Probe.jpg


传感器还包含一个将传感焊盘连接到Arduino的电子模块。该模块根据传感焊盘的电阻产生输出电压,并在模拟输出(AO)引脚处生成。


同一个信号也被馈送到LM393高精度比较器以数字化并以数字输出(DO)引脚提供。

Rain-Sensor-Sensitivity-Adjustment.jpg


该模块具有内置电位器,可用于调整数字输出(DO)。您可以使用电位器设置阈值;因此,当水量超过阈值时,模块将输出低电平。


除此之外,该模块有两个LED。当模块供电时,电源LED将点亮。当数字输出低电平时,状态LED将点亮。

Rain-Sensor-Power-and-Status-LEDs.jpg


雨水传感器的引脚

雨水传感器非常易于使用,只需4个引脚就可以连接。

Rain-Sensor-Module-Pinout.jpg


●    AO(模拟输出)引脚为我们提供了(5V)至0V之间的模拟信号。

●    DO(数字输出)引脚给出了内部比较器电路的数字输出。您可以将其连接到Arduino上的任何数字引脚或直接连接到5V继电器或类似设备。

●    GND 是接地连接。

●    VCC 引脚为传感器提供电源。建议用3.3V  -  5V之间的传感器为传感器供电。请注意,模拟输出将根据传感器提供的电压而有所不同。


传感器与Arduino开发的硬件连接

让我们将雨水传感器连接到Arduino开发板上。首先,您需要向传感器供电,将模块上的VCC引脚连接到Arduino上的5V。


但是,这些传感器的一个常见问题是在暴露于潮湿环境时寿命短。将电源不断地施加到感应焊盘上,可以显着加速腐蚀的速度。为了解决这一点,我们建议您不要不断为传感器供电,而只有在您进行读取时才为其供电。


实现此目的的一种简单方法是将VCC引脚连接到Arduino的数字引脚,并根据您的要求将其设置为高电平或低电平。因此,让我们将模块上的VCC引脚连接到Arduino数字引脚#7,GND引脚接地。


最后,将模块上的DO引脚连接到Arduino上的数字引脚#8。

Wiring-Rain-Sensor-with-Arduino.jpg


校准雨传感器

为了从雨水传感器中获取准确的读数,建议您首先对其进行校准。该模块带有一个用于校准数字输出(DO)的内置电位器。


通过转动电位器的旋钮,您可以设置一个阈值。因此,当水量超过阈值时,状态LED将点亮,数字输出(DO)将输出电平。


现在要校准传感器,在传感焊盘上撒一些水,然后顺时针调整旋钮,使状态LED已打开,然后逆时针调整旋钮,直到LED熄灭。传感器现在已经校准并准备好使用。


Arduino代码 - 检测雨水

在搭建电路后,将以下草图上传到您的Arduino。现在,将雨传感器放在一个位置,使降水可以直接落入传感器,这可以是在屋顶上。 还将其稍微倾斜(〜20°)放置以促进水流。

  1. // Sensor pins
  2. #define sensorPower 7
  3. #define sensorPin 8

  4. void setup() {
  5.         pinMode(sensorPower, OUTPUT);

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

  8.         Serial.begin(9600);
  9. }

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

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

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

  24. //  This function returns the sensor output
  25. int readSensor() {
  26.         digitalWrite(sensorPower, HIGH);        // Turn the sensor ON
  27.         delay(10);                                                        // Allow power to settle
  28.         int val = digitalRead(sensorPin);        // Read the sensor output
  29.         digitalWrite(sensorPower, LOW);                // Turn the sensor OFF
  30.         return val;                                                        // Return the value
  31. }
复制代码

上传草图后,打开串口监视器,查看Arduino的输出。天气晴朗时,您应该看到数字输出高电平。为了测试雨水,您可以在感应焊盘上撒一些水。

Rain-Sensor-Output.jpg


代码说明

首先声明传感器的VCC和DO引脚连接到的Arduino引脚编号。

  1. #define sensorPower 7
  2. #define sensorPin 8
复制代码

setup()函数部分中,我们首先声明与传感器的电源引脚配置输出,然后将其设置为低电平,因此最初不会流过传感器。

  1. pinMode(sensorPower, OUTPUT);
  2. digitalWrite(sensorPower, LOW);
  3. Serial.begin(9600);
复制代码

loop()函数中,我们以一秒钟的间隔重复调用readSensor()函数,并将返回值与状态一起打印。

  1. int val = readSensor();
  2. Serial.print("Digital Output: ");
  3. Serial.println(val);

  4. if (val) {
  5.         Serial.println("Status: Clear");
  6. } else {
  7.         Serial.println("Status: It's raining");
  8. }

  9. delay(1000);
复制代码

readSensor()函数用于获取传感器的当前数字输出。它打开传感器,等待10毫秒,读取传感器的数字值,关闭传感器,然后返回结果。

  1. int readSensor() {
  2.         digitalWrite(sensorPower, HIGH);
  3.         delay(10);
  4.         int val = digitalRead(sensorPin);
  5.         digitalWrite(sensorPower, LOW);
  6.         return val;
  7. }
复制代码

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

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-16 14:30 , Processed in 0.541563 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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