树莓派资料
显示屏资料
系统下载
树莓派Pico
首页 动态 发帖 版块 我的
 退出
游客  
等级:
金币:
经验值:

树莓派使用KY-037声音传感器实验

  256 
 0
 2
趣    

一:声音传感器介绍

这是一款功能实用的声音传感器,可精准感知周围环境声音信号,并将其转换为电信号输出,以便后续处理与分析 。常用于各类需要对声音进行检测、监测的项目场景,如智能家居设备、环境噪音监测系统、智能玩具等。主体为红色电路板,布局紧凑合理。一侧搭载有灵敏的咪头(声音采集部件),用于捕捉声音信号,实时监测环境噪音水平,电路板上还设有多个标识清晰的元件,包括用于调节的蓝色电位器(标有 “W104” ),可对传感器灵敏度等参数进行微调 ;以及指示灯(LED1、LED2 ),能直观呈现传感器工作状态。


工作原理:传感器内部集成音频放大芯片 LM386,该芯片具有自身功耗低、增益可调整(放大 200 倍 )、电源电压范围大、外接元件少和总谐波失真小等优点。当声音信号被咪头捕捉后,会先转换为微弱电信号,经 LM386 芯片放大处理。模拟量输出(AO )可输出连续变化、与声音强度成比例的电压信号,适合用于对声音强度进行精确测量与分析的场景;数字量输出(DO )则会在声音强度超过设定阈值时,输出低电平信号,可用于简单的声音有无判断或触发控制场景。

产品信息详细参数
供电电压3.3V~5V DC(兼容主流开发板电源输出)
工作电流约 20mA(5V 供电时)
模拟量信号(AO)0-3.3V(与声音强度成比例)
数字量输出(DO)TTL 电平(高电平≈VCC,低电平≈0V)
频率响应范围20Hz-20kHz(人耳可听范围)
灵敏度调节范围通过电位器可调,阈值范围约 50-800mV
音频放大芯片LM386N-1
输出阻抗模拟输出:≤10kΩ,数字输出:≤100Ω
工作温度-20℃ ~ +60℃
存储温度-30℃ ~ +80℃
信噪比(SNR)≥45dB
动态范围约 40dB
响应时间≤10ms
分辨率模拟量:≈0.05mV(12 位 ADC 采样),数字量:二进制(0/1)
触发阈值数字输出:约 0.5-3V(可调),hysteresis:≈0.2V(抗干扰回差)
静态功耗≤100mW(3-5V 供电)
动态功耗≤200mW(最大声压时)
产品尺寸3.2cm × 2.2cm × 1.5cm(不含引脚)


声音传感器电路原理图

二:硬件接线

树莓派pico声音传感器
3.3+正极
GND-负极
GP26AO模拟量


Image

三:Python程序代码

import machine
import utime
import math

# 配置ADC引脚(GP26对应ADC0)
adc = machine.ADC(0)

# 参考电压(单位:伏特)
REFERENCE_VOLTAGE = 3.3

# ADC分辨率(16位ADC的最大值为65535)
ADC_RESOLUTION = 65535

# 参考声压级(单位:伏特),需要根据传感器校准
REFERENCE_SOUND_PRESSURE = 0.02  # 示例值,可能需要根据实际传感器校准

def adc_to_voltage(adc_value):
    """将ADC值转换为电压值"""
    return adc_value * (REFERENCE_VOLTAGE / ADC_RESOLUTION)

def voltage_to_decibel(voltage):
    """将电压值转换为分贝值"""
    if voltage <= 0:
        return 0  # 避免对数计算错误
    # 使用公式 dB = 20 * log10(测量电压/参考电压)
    return 20 * math.log10(voltage / REFERENCE_SOUND_PRESSURE)

def calibrate_reference_sound_pressure(samples=100):
    """校准参考声压值(在安静环境下运行)"""
    total = 0
    for _ in range(samples):
        total += adc.read_u16()
        utime.sleep_ms(10)
    avg_adc = total / samples
    avg_voltage = adc_to_voltage(avg_adc)
    return avg_voltage * 2  # 设置参考值为平均噪声的2倍

try:
    print("正在校准参考声压值,请保持安静环境...")
    REFERENCE_SOUND_PRESSURE = calibrate_reference_sound_pressure()
    print(f"参考声压值已校准为: {REFERENCE_SOUND_PRESSURE:.4f}V")
    
    print("开始检测声音...")
    while True:
        # 读取ADC值
        adc_value = adc.read_u16()
        
        # 转换为电压
        voltage = adc_to_voltage(adc_value)
        
        # 转换为分贝
        decibel = voltage_to_decibel(voltage)
        
        # 打印结果
        print(f"ADC: {adc_value:5d} | 电压: {voltage:.4f}V | 分贝: {decibel:5.1f}dB", end='\r')
        
        # 延时
        utime.sleep(0.1)
        
except KeyboardInterrupt:
    print("\n程序已停止")    
运行结果:

Image


说明:分贝计算是相对于参考声压的相对值,实际测量的绝对值需要专业校准,不同的输入电压的灵敏度是不同的,可能需要调整参考值以获得更准确读数,如果环境噪声较大,校准结果也可能不准确,可以尝试手动设置参考值。根据模拟量输出的电压进行调整。



标签:
作者签名:    楼主  2025-06-03 10:38:00
回复列表
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权
您的IP: 18.97.14.82 , 2025-06-19 15:11:18
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权