【树莓派C语言开发】实验13:雨滴传感器模块(关联PCF8591)

好久没玩树莓派了,今天上手来做一个实验

QQ图片20220512211821


1.实验器材

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

IMG_20220513_123931

2.实验原理

2.1基本说明

雨滴传感器的控制模块具有4个输出,其中VCC连接到5V电源,模块的GND引脚接地。DO引脚连接到微控制器的数字引脚以进行数字输出,也可以使用模拟引脚。要使用模拟输出,可以将A0引脚连接到微控制器的ADC引脚。

在雨滴/雨水器系统中,用雨滴传感器检测降雨量并转换控制器检测到的信号。然后根据这些信号自动设置雨刮器的间隔,以方便地控制雨刮器的电机;在智能照明系统中,自动检测驾驶环境并调整照明模式,提高恶劣环境下的行车安全;在智能天窗系统中,检测是否下雨,如果检测到雨滴,则自动关闭天窗。

传感器模块包括一个电位计,LM393比较器,LED,电容器和电阻器。雨板模块由铜轨组成,铜轨用作可变电阻器。它的阻力随雨板上的湿度而变化。

2.2电路图

13.雨滴检测传感器原理图

2.3接线图

树莓派T型转接板PCF8591
SDASDASDA
SCLSCLSCL
5V5VVCC
GNDGNDGND
LM393模块T型转接板PCF8591
DOGPIO 17*
AO*AIN 0
VCC3.3V*
GNDGND*

image-20220513142625988

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

image-20220513142652902

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

IMG_20220513_143015

IMG_20220513_143113

3.代码效果

3.1代码示例

因为需要使用pcf8591模数转换器,所以需要引用头文件<pcf8591.h>

//雨滴探测传感器实验
#include <stdio.h>
#include <wiringPi.h>
#include <pcf8591.h>
#include <math.h>

#define	makerobo_PCF    120 // 基础管脚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;
	}
	//在基本引脚120上设置pcf8591,地址0x48
	pcf8591Setup(makerobo_PCF, 0x48);
    //设置雨滴传感器管脚为输入模式
	pinMode(makerobo_DOpin, INPUT);
    //默认状态值设置为0
	makerobo_status = 0; 
	//无限循环
	while(1) 
	{
		makerobo_analogVal = analogRead(makerobo_PCF + 0);
		//获取AIN0上的值
		printf("%d\n", makerobo_analogVal); //打印出该值 

		makerobo_tmp = digitalRead(makerobo_DOpin); 
		//读取数字IO口电平,读取数字雨滴传感器DO端口

		if (makerobo_tmp != makerobo_status) //状态发生改变
		{
			makerobo_Print(makerobo_tmp); //打印出雨滴传感器检测信息
			makerobo_status = makerobo_tmp;  //状态值重新赋值
		}
		delay (200);   //延时200ms
	}
	return 0;
}

注意:雨滴传感器其实是LM393和雨滴感应模块的集合体,所以代码注释中说的设置管脚为input模式,实际上设置的是LM393模块的管脚(毕竟只有它连上了T型转接板)

本次博客的代码和之前的实验很相似,其中PCF8591在上篇实验12博客中已经有过讲解,所以在这里就不bb啦

3.2运行效果

当你把湿纸巾印在雨滴传感器上,屏幕上会打印出makerobo Raining!!,数值会随着雨滴量的大小变化(我这里测试的是,水多的时候打印的值小)但最后会趋于稳定,打印128

GIF

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

Screenshot_2022_0513_135905

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

image-20220513140330132

如果你的DO-LED没有亮起,可以通过该传感器上蓝色的模块,用十字螺丝调节LM393模块的灵敏度(这个蓝色模块调节的是电阻)

结语

有了这个东西,你可以把雨滴传感器丢到窗台上,在不在家的时候,就可以运行代码,看看家里有无下雨了(毕竟时候工作上学的地方和家里隔了十几公里,天气就可能完全不同)

配合cpolar实现内网穿透,效果更佳哦😀

不过知道自己家下雨了,被子还没收,是不是徒增焦虑?

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕雪华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值