zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

一起玩转树莓派(13)——雨滴检测传感器

2023-02-26 10:21:07 时间

一起玩转树莓派(13)——雨滴检测传感器

    在本系列的前几篇博客中,我们有进行过温度传感器和光强传感器的实验。通过这些传感器,加上简单的编程技术,我们很容易获取这些环境数据。通过各种丰富的传感器,用树莓派可以非常容易的打造一款”简易气象站“。对于一个小型的气象站来说,除了需要收集温度和光照强度数据外,当前的天气状况也是必不可少的。本篇博客,我们将通过雨滴检测传感器实验来获取雨势信息。

一、雨滴检测传感器

    本次实验使用的雨滴检测传感器模块如下图所示:

(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>

一起玩转树莓派(13)——雨滴检测传感器

可以看到,此元件组由一个检测板和控制模块组成,两部分分开连接,便于将检测板放置到合适的检测位置,且检测板面积大,易于进行雨滴检测。

此传感器模块工作电路图如下所示:

一起玩转树莓派(13)——雨滴检测传感器

在使用时,先将检测板的两个引脚与模块的只有两个引脚一侧的引脚相连(可以将检测板理解为两根不想交的导线,有雨水落下时,导线会联通)。

    观察控制模块,可以看到其上封装了两个LED,其中一个LED是电源指示灯,当接通电源后会发光,另一个LED是信号灯,没有雨水的时候信号灯不亮,检测板上有雨水的时候信号灯亮。在检测是否下雨时,可以将检测板倾斜放置,有雨水流过即可改变电平信号的输出。控制模块中还自带一个调节电阻,调节此电阻可以设置传感器的灵敏度。控制模块的另一侧有4个引脚,分别为AO,DO,GND和VCC。其中,AO为模拟信号输出,可以通过这个引脚输出的信号来判断雨量的大小。DO引脚为数字信号输出,可以用这个引脚输出的信号判断检测板上是否有雨水,没有水滴时此引脚输出高电平,有水滴时此引脚输出低电平。

二、实验连线与编码

    本次实验,我们将使用GPIO引脚直接获取雨滴检测模块的数字信号,并通过PCF8591来读取雨滴检测模块的模拟信号。首先,连线如下:

PCF8591与树莓派连接:

PCF8591 树莓派
SDA SDA
SCL SCL
VCC 5V电源
GND GND

雨滴检测模块:

雨滴检测模块 树莓派 PCF8591
VCC 5V  
GND GND  
AO   AIN0
DO GPIO17(BCM编码)  

完成了基础的连线,我们就可以开始编码工作了。关于PCF8591的使用,我们之前的博客有过详细的介绍,但是如果每次使用到数模转换时,都编写一遍PCF8591的控制代码会非常的麻烦,而且这也不是我们要核心关注的功能点,对于本实验来说,我们更多需要关注的是如何处理雨滴检测模块的数据,而不是DA转换相关逻辑,因此我们可以编写一套通用的PCF8591驱动代码,之后再使用到有模拟信号输出的元件时,直接使用此驱动即可。

    需要注意,要使用PCF8591,不要忘记打开树莓派的I2C接口,接线完成后,使用如下指令可以查看设备地址:

sudo i2cdetect -y 1

完整代码如下:

#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)

在树莓派上运行上面程序,即可检测水滴情况。

专注技术,懂的热爱,愿意分享,做个朋友

一起玩转树莓派(13)——雨滴检测传感器


本站部分内容转载自网络,版权属于原作者所有,如有异议请联系QQ153890879修改或删除,谢谢!
转载请注明原文链接:一起玩转树莓派(13)——雨滴检测传感器

你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:

1、点击这里立即申请成为腾讯云VIP客户

2、点击这里立即注册成为天翼云VIP客户

3、点击这里立即申请成为华为云VIP客户

4、点击这里立享阿里云产品终身VIP优惠价

喜欢 (0)
[[email protected]]
分享 (0)