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

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

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


一、雨滴检测传感器


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

image.png




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


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

image.png



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


   观察控制模块,可以看到其上封装了两个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)

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

目录
相关文章
|
移动开发 API
2024年阿里云域名注册、域名续费优惠口令大全来了
2024年阿里云域名注册、域名续费优惠口令大全来了,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”
11689 0
2024年阿里云域名注册、域名续费优惠口令大全来了
|
存储 数据可视化 计算机视觉
树莓派计算机视觉编程:1~5
树莓派计算机视觉编程:1~5
385 0
|
4月前
|
消息中间件 设计模式 人工智能
掌握全维度智能体提示词框架(CAP)重塑AI提示词工程​
本文介绍了全维度智能体提示词框架CAP,通过四层架构实现对AI智能体行为的精准控制,涵盖身份定义、能力调度、安全约束与执行优化,助力企业构建可控、可维护的AI应用系统。
719 0
|
开发者 UED 容器
鸿蒙next版开发:ArkTS组件通用属性(Flex布局)
在HarmonyOS next中,ArkTS的Flex布局是一种强大且灵活的布局方式,支持水平或垂直方向排列元素,并能动态调整大小和位置以适应不同屏幕。主要属性包括justifyContent、alignItems、direction和wrap,适用于导航栏、侧边栏和表单等多种场景。示例代码展示了如何使用这些属性创建美观的布局。
538 10
|
C语言
【C语言】逗号运算符详解 - 《不起眼的 “逗号”》
逗号运算符(`,`)是C语言中的一个二元运算符,它会对两个操作数进行求值,并返回最后一个操作数的值。其主要作用是将多个表达式组合成一个复合表达式。
809 7
|
大数据 Python
Python 高级编程:深入探索高级代码实践
本文深入探讨了Python的四大高级特性:装饰器、生成器、上下文管理器及并发与并行编程。通过装饰器,我们能够在不改动原函数的基础上增添功能;生成器允许按需生成值,优化处理大数据;上下文管理器确保资源被妥善管理和释放;多线程等技术则助力高效完成并发任务。本文通过具体代码实例详细解析这些特性的应用方法,帮助读者提升Python编程水平。
569 5
|
编解码 Linux
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
《FFmpeg开发实战》书中指导如何在Linux环境下为FFmpeg集成libwebp以支持WebP图片编解码。首先,从GitHub下载libwebp源码,解压后通过`libtoolize`,`autogen.sh`,`configure`,`make -j4`和`make install`步骤安装。接着,在FFmpeg源码目录中重新配置并添加`--enable-libwebp`选项,然后进行`make clean`,`make -j4`和`make install`以编译安装FFmpeg。最后,验证FFmpeg版本信息确认libwebp已启用。
374 1
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
使用pyaudio 录音,停止说话时自动结束
该博客文章介绍了如何使用Python的pyaudio库进行录音,并通过检测声音强度的变化自动结束录音过程。
|
前端开发 JavaScript 定位技术
HTML中target的使用注意点
`target` 属性在 HTML 中主要用于 `<a>` 和 `<form>` 元素,指定链接打开或表单提交的位置。常见值包括 `_self`(当前窗口)、`_blank`(新窗口)、`_parent`(父框架)和 `_top`(整个窗口)。使用 `target="_blank"` 时应加 `rel="noopener noreferrer"` 以提高安全性。JavaScript 可动态设置 `target`,CSS 可增强样式。尽管 `target` 主要用于链接和表单,但在特定场景下也可应用于其他元素。
|
前端开发 安全
stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析
stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析
636 0