一起玩转树莓派(20)——噪声监测

一起玩转树莓派(20)——噪声监测

噪声污染是非常令人讨厌的一件事,长时间暴露在噪声中,不仅会使人心烦意乱,甚至还会影响我们的身心健康。本节,借助声音传感器,我们可以开发一个小型的噪声监测工具,当环境噪音过大时,发出提醒。

一.声音传感器

声音传感器模块是一种将声波转换成电信号的元件。使用它可以方便的获取环境中的声音强度。本次实验,我们使用的声音传感器模块如下图所示:

如图所示,此传感器模块有4个对外引脚,其中AO引脚是模拟引号输出引脚,DO引脚是数字引号输出引脚。G引脚用来接地,+引脚接5V电源。

此传感器模块上还有两个LED指示灯,LED1是电源指示灯,只要传感器的正负极正常连通,此指示灯就会亮。LED2是声音检测指示灯,环境声音强度没有超过一定值时,此指示灯会熄灭,环境声音强度超过了一定数值后,此指示灯会亮。具体的阈值可以通过调节图中蓝色部分的可变电阻来进行调整。

本次实验我们使用的声音传感器模块既可以输出数字信号也可以输出模拟信号,对于数字信号,我们可以直接将其接树莓派的GPIO来进行接收,由于树莓派没有内置数模转换模块,因此对于模拟信号,我们需要使用PCF8591数模转换模块来读取模拟信号。

二. 实验

首先先确认下我们要使用的引脚,声音传感器的数字信号引脚可以直接连接树莓派的GPIO17(BCM编码),模拟引号引脚连接PCF8591的AINO。如下表:

PCF8591与树莓派:

PCF8591 树莓派
SCL SCL
SDA SDA
GND GND
VCC +5V

声音传感器模块与树莓派:

声音传感器 树莓派
G GND
+ +5V
DO GPIO17(BCM编码,对应物理编码11)

声音传感器与PCF8591:

声音传感器 PCF8591
AO AIN0

编写示例代码如下:

#SMBus (System Management Bus,系统管理总线) 
import smbus   #在程序中导入“smbus”模块
import RPi.GPIO as GPIO 
import time

bus = smbus.SMBus(1)         #创建一个smbus实例

# 通过PCF8591读取模拟信号

# 声音强度的模拟数据
def readData():
    #发送一个控制字节到设备 表示要读取AIN0通道的数据
    bus.write_byte(0x48,0x40)   
    bus.read_byte(0x48)         # 空读一次,消费掉无效数据
    return bus.read_byte(0x48)  # 返回某通道输入的模拟值A/D转换后的数字值

# 通过GPIO读取数字信号

# 设置使用的引脚编码模式
GPIO.setmode(GPIO.BOARD)
# 数字输出引脚 BCM 17
P = 11

# 引脚初始化
GPIO.setup(P, GPIO.IN)

while True:
    print('--------分割线----------')
    print('环境声音强度数字信号:', GPIO.input(P))
    data = readData()
    print('环境声音强度模拟信号:', readData())
    if data < 130:
        print("噪声过大,请注意!!!!!!!!!")
    time.sleep(2)

上面代码中设置模拟信号小于130则表示环境声音过强,需要注意,如果你运行上面的程序发现数值一直很小,可能是灵敏度设置过高所致,可以调节可变电阻来得到合适的灵敏度。

代码运行效果如下图所示:

本次实验并没有特别新颖的地方,所使用到的技术本系列之前博客中都有详细的介绍。

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

QQ:316045346

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/2340880/blog/5311091
今日推荐