这里是慕雪的小助手,这篇文章介绍了如何使用树莓派和雨滴传感器模块进行降雨检测实验,包括所需器材、实验原理、电路接线图以及C语言代码示例,通过PCF8591模数转换器读取传感器数据,实现雨滴检测并在终端显示结果,还可通过LED灯指示检测状态,文章还提及了其在智能雨刮器、照明系统和天窗系统中的应用潜力。
好久没玩树莓派了,今天上手来做一个实验

1.实验器材
- 树莓派开发板
- 40p软排线+T型转接板+面包板
- 雨滴传感器模块
- LM393模块
- PCF8591模数转换器模块(实验12)
- 一些跳线
- 一个一字螺丝刀

2.实验原理
2.1基本说明
雨滴传感器的控制模块具有4个输出,其中VCC连接到5V电源,模块的GND引脚接地。DO引脚连接到微控制器的数字引脚以进行数字输出,也可以使用模拟引脚。要使用模拟输出,可以将A0引脚连接到微控制器的ADC引脚。
在雨滴/雨水器系统中,用雨滴传感器检测降雨量并转换控制器检测到的信号。然后根据这些信号自动设置雨刮器的间隔,以方便地控制雨刮器的电机;在智能照明系统中,自动检测驾驶环境并调整照明模式,提高恶劣环境下的行车安全;在智能天窗系统中,检测是否下雨,如果检测到雨滴,则自动关闭天窗。
传感器模块包括一个电位计,LM393比较器,LED,电容器和电阻器。雨板模块由铜轨组成,铜轨用作可变电阻器。它的阻力随雨板上的湿度而变化。
2.2电路图

2.3接线图
| 树莓派 |
T型转接板 |
PCF8591 |
| SDA |
SDA |
SDA |
| SCL |
SCL |
SCL |
| 5V |
5V |
VCC |
| GND |
GND |
GND |
| LM393模块 |
T型转接板 |
PCF8591 |
| DO |
GPIO 17 |
* |
| AO |
* |
AIN 0 |
| VCC |
3.3V |
* |
| GND |
GND |
* |

在连接LM393和雨滴传感器的时候,发现雨滴传感器上并没有明确标出正负极,但是在正极的管脚下方用小点做了标识(负极无该白点)

本次实验需要接的线非常多,注意不要接错了。其中PCF8591模块在接线时需要将所有跳线帽拔出


3.代码效果
3.1代码示例
因为需要使用pcf8591模数转换器,所以需要引用头文件<pcf8591.h>
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <stdio.h> #include <wiringPi.h> #include <pcf8591.h> #include <math.h>
#define makerobo_PCF 120 #define makerobo_DOpin 0
void makerobo_Print(int x) { switch(x) { case 1: printf("\n************************\n" ); printf( "* makerobo Not Raining *\n" ); printf( "************************\n\n"); break; case 0: printf("\n**********************\n" ); printf( "* makerobo Raining!! *\n" ); printf( "**********************\n\n"); break; default: printf("\n**********************\n" ); printf( "* Print value error. *\n" ); printf( "**********************\n\n"); break; } }
int main() { int makerobo_analogVal; int makerobo_tmp, makerobo_status; if(wiringPiSetup() == -1){ printf("setup wiringPi failed !"); return 1; } pcf8591Setup(makerobo_PCF, 0x48); pinMode(makerobo_DOpin, INPUT); makerobo_status = 0; while(1) { makerobo_analogVal = analogRead(makerobo_PCF + 0); printf("%d\n", makerobo_analogVal);
makerobo_tmp = digitalRead(makerobo_DOpin);
if (makerobo_tmp != makerobo_status) { makerobo_Print(makerobo_tmp); makerobo_status = makerobo_tmp; } delay (200); } return 0; }
|
注意:雨滴传感器其实是LM393和雨滴感应模块的集合体,所以代码注释中说的设置管脚为input模式,实际上设置的是LM393模块的管脚(毕竟只有它连上了T型转接板)
本次博客的代码和之前的实验很相似,其中PCF8591在上篇实验12博客中已经有过讲解,所以在这里就不bb啦
3.2运行效果
当你把湿纸巾印在雨滴传感器上,屏幕上会打印出makerobo Raining!!,数值会随着雨滴量的大小变化(我这里测试的是,水多的时候打印的值小)但最后会趋于稳定,打印128

如果没有水,屏幕上打印makerobo Not Raining,数值打印255

在LM393模块上有两个LED指示灯,在传感器探测到水后,DO-LED会亮起

如果你的DO-LED没有亮起,可以通过该传感器上蓝色的模块,用十字螺丝调节LM393模块的灵敏度(这个蓝色模块调节的是电阻)
结语
有了这个东西,你可以把雨滴传感器丢到窗台上,在不在家的时候,就可以运行代码,看看家里有无下雨了(毕竟时候工作上学的地方和家里隔了十几公里,天气就可能完全不同)
配合cpolar实现内网穿透,效果更佳哦😀
不过知道自己家下雨了,被子还没收,是不是徒增焦虑?