在雨滴系统中,用雨滴传感器检测降雨量,并转换控制器检测到的信号。然后根据这些信号自动设置雨刮器的时间隔,以方便地控制雨刮器的电机。在智能照明系统中,自动检测驾驶环境并调整照明模式,提高恶劣环境下的行车安全。在智能天窗系统中,检测是否下雨,如果检测到雨滴就自动关闭天窗。
有两根金属线彼此靠近,但不会在雨水检测板上交叉。当雨水落在电路板上时,两根金属线会导通。因此两根金属线之间会有电压。
控制板上有两个指示灯,电源指示灯PWR-LED和输出信号指示灯DO-LED。电源指示灯在通电后常亮,没有雨的时候出信号指示灯不亮;雨滴上去,候出信号指示灯亮。雨滴板和控制板是分开的,方便将线引出,大面积的雨滴板,更有利于检测到雨水。
控制板上有两个输出,数字输出DO,模拟输出AO。接上5V电源电源灯亮,感应板上没有水滴时,DO输出为高电平,滴上一滴水,DO输出为低电平,刷掉上面的水滴,又恢复到输出高电平状态,灵敏度可以通过蓝色的可变电阻调节。
AO模拟输出,连接到PCF8591的模拟输入AIN0口,通过比对模拟值转化为的数字值大小,可以检测滴在上面的雨量大小,雨水越大,电阻值越小,模拟值转化为的数字值越小。数字值的范围当然是0~255, 不同的值对应是降雨量的多少毫米,则需要实体测量,雨滴板的放置方式不同结果都不同。
雨滴传感器电路原理图
第1步接线:将雨滴传感器DO开关量引脚连接到树莓派GPIO.0(BCM17), AO模拟量引脚接在PCF8591模块AIN0端口。如下图
第2步开启I2C:PCF8591模块采用的是I2C(IIC)总线进行通信的,但是在树莓派的镜像中默认是关闭的,在使用该传感器的时候,我们必须首先允许IIC总线通信。
查看I2C设备地址输入下面命令,我们当前I2C的地址为48
sudo i2cdetect -y 1
第3步开始编程:完成了基础的连线,我们就可以开始编码工作了。关于PCF8591的使用,我们之前的教程有过详细的介绍,但是如果每次使用到数模转换时,都编写一遍PCF8591的控制代码会非常的麻烦,而且这也不是我们要核心关注的功能点,对于本实验来说,我们更多需要关注的是如何处理雨滴检测模块的数据,而不是DA转换相关逻辑,因此我们可以编写一套通用的PCF8591驱动代码,之后再使用到有模拟信号输出的元件时,直接使用此驱动即可。点此查看关于PCF8591模块使用教程
#coding:utf-8 import smbus #在程序中导入“smbus”模块 # /dev/i2c-1 bus = smbus.SMBus(1) #创建一个smbus实例 # 初始化驱动模块 定义PCF元件地址 def init(addr): global address address = addr # 读取某个通道的数据 def read(chn): global address if chn == 0: #发送一个控制字节到设备 表示要读取AIN0通道的数据 bus.write_byte(address,0x40) if chn == 1: #发送一个控制字节到设备 表示要读取AIN1通道的数据 bus.write_byte(address,0x41) if chn == 2: #发送一个控制字节到设备 表示要读取AIN2通道的数据 bus.write_byte(address,0x42) if chn == 3: #发送一个控制字节到设备 表示要读取AIN3通道的数据 bus.write_byte(address,0x43) bus.read_byte(address) # 空读一次,消费掉无效数据 return bus.read_byte(address) # 返回某通道输入的模拟值A/D转换后的数字值 def write(val): global address temp = val temp = int(temp) # 进行写数据操作 bus.write_byte_data(address, 0x40, temp)
实现水滴检测的代码如下:
#coding:utf-8 import pcf8591 as PCF import RPi.GPIO as GPIO import time DO = 11 # 设置使用的引脚编码模式 GPIO.setmode(GPIO.BOARD) GPIO.setup(DO, GPIO.IN) PCF.init(0x48) while True: print('------------分割线-------------') rainDO = GPIO.input(DO) print('是否检测到水滴:%s'%('否' if rainDO else '是')) # 读取AIN0的模拟数据 rainAO = PCF.read(0) print('雨水程度%d'%(255 - rainAO)) time.sleep(2)
在树莓派上运行上面程序,即可检测水滴情况。