天气仍一如既往地诡异莫测,当窗户打开时,天空会突然开始下雨,屋内的东西就很容易被雨水打湿。但是,如果使用雨水传感器,您可以阻止这种情况发生。
您可以使用雨水传感器监视雨水/冰雹的出现,当降雨时可以向电子百叶窗、遮阳篷或天窗发送一条关闭请求。
雨水传感器是如何工作? 雨水传感器(Rain Sensor)的工作原理非常简单。一些露铜走线的传感焊盘用作可变电阻器(就像电位器一样),其电阻值根据其表面上的水量改变。
电阻值与雨水量成反比: ● 表面上的水量越多,意味着更好的电导率,并且会形成较小的电阻值。 ● 表面上的水量较少,意味着交叉的电导率,并且会形成较大的电阻值。 传感器根据电阻产生输出电压,通过测量我们可以确定是否下雨。
硬件概述 常见的雨水传感器具有两个组件。
传感器包含一个带有一圈露铜走线的传感焊盘,放置在开放式的屋顶上或可能受降雨影响的地方。
正常时,这些走线没有连接一起,但可以被雨水桥接。
传感器还包含一个将传感焊盘连接到Arduino的电子模块。该模块根据传感焊盘的电阻产生输出电压,并在模拟输出(AO)引脚处生成。
同一个信号也被馈送到LM393高精度比较器以数字化并以数字输出(DO)引脚提供。
该模块具有内置电位器,可用于调整数字输出(DO)。您可以使用电位器设置阈值;因此,当水量超过阈值时,模块将输出低电平。
除此之外,该模块有两个LED。当模块供电时,电源LED将点亮。当数字输出低电平时,状态LED将点亮。
雨水传感器的引脚 雨水传感器非常易于使用,只需4个引脚就可以连接。
● 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。
校准雨传感器 为了从雨水传感器中获取准确的读数,建议您首先对其进行校准。该模块带有一个用于校准数字输出(DO)的内置电位器。
通过转动电位器的旋钮,您可以设置一个阈值。因此,当水量超过阈值时,状态LED将点亮,数字输出(DO)将输出电平。
现在要校准传感器,在传感焊盘上撒一些水,然后顺时针调整旋钮,使状态LED已打开,然后逆时针调整旋钮,直到LED熄灭。传感器现在已经校准并准备好使用。
Arduino代码 - 检测雨水 在搭建电路后,将以下草图上传到您的Arduino。现在,将雨传感器放在一个位置,使降水可以直接落入传感器,这可以是在屋顶上。 还将其稍微倾斜(〜20°)放置以促进水流。 - // Sensor pins
- #define sensorPower 7
- #define sensorPin 8
- void setup() {
- pinMode(sensorPower, OUTPUT);
- // Initially keep the sensor OFF
- digitalWrite(sensorPower, LOW);
- Serial.begin(9600);
- }
- void loop() {
- //get the reading from the function below and print it
- int val = readSensor();
- Serial.print("Digital Output: ");
- Serial.println(val);
- // Determine status of rain
- if (val) {
- Serial.println("Status: Clear");
- } else {
- Serial.println("Status: It's raining");
- }
- delay(1000); // Take a reading every second
- Serial.println();
- }
- // This function returns the sensor output
- int readSensor() {
- digitalWrite(sensorPower, HIGH); // Turn the sensor ON
- delay(10); // Allow power to settle
- int val = digitalRead(sensorPin); // Read the sensor output
- digitalWrite(sensorPower, LOW); // Turn the sensor OFF
- return val; // Return the value
- }
复制代码
上传草图后,打开串口监视器,查看Arduino的输出。天气晴朗时,您应该看到数字输出高电平。为了测试雨水,您可以在感应焊盘上撒一些水。
代码说明 首先声明传感器的VCC和DO引脚连接到的Arduino引脚编号。 - #define sensorPower 7
- #define sensorPin 8
复制代码在setup()函数部分中,我们首先声明与传感器的电源引脚配置输出,然后将其设置为低电平,因此最初不会流过传感器。 - pinMode(sensorPower, OUTPUT);
- digitalWrite(sensorPower, LOW);
- Serial.begin(9600);
复制代码
在loop()函数中,我们以一秒钟的间隔重复调用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;
- }
复制代码
|