这是一款功能实用的声音传感器,可精准感知周围环境声音信号,并将其转换为电信号输出,以便后续处理与分析 。常用于各类需要对声音进行检测、监测的项目场景,如智能家居设备、环境噪音监测系统、智能玩具等。主体为红色电路板,布局紧凑合理。一侧搭载有灵敏的咪头(声音采集部件),用于捕捉声音信号,实时监测环境噪音水平,电路板上还设有多个标识清晰的元件,包括用于调节的蓝色电位器(标有 “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 | -负极 |
GP26 | AO模拟量 |
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程序已停止")运行结果:
说明:分贝计算是相对于参考声压的相对值,实际测量的绝对值需要专业校准,不同的输入电压的灵敏度是不同的,可能需要调整参考值以获得更准确读数,如果环境噪声较大,校准结果也可能不准确,可以尝试手动设置参考值。根据模拟量输出的电压进行调整。