ESP32 & Python学习——实验9 声音传感器模块的原理和使用
本次探究运用了声音感应装置,在掌握基础编程知识的同时,还搜集并梳理了该装置的部分运作机制(章节末尾),以便更透彻地把握代码功能。
1 代码
声音传感器使用代码:
'''
实验名称:声音传感器实验
安装指南:选用标准型普中ESP32开发板,将音频感应装置的输出端连接到开发板的第34号引脚,将感应装置的供电引脚接到开发板的3.3伏特电源接口,将感应装置的接地引脚与开发板的公共地线相连
实验现象:通过Thonny软件的shell区域,可以观察到声音的相应数据,这些数值能够被明确看到。
完成时间:2025/07/26
代码修改:罗特布克
调试传感器时需要调整电位器AD11,这个部件带有可以插入薄片的旋转结构,在环境非常安静的情况下,将其旋转到接近1的位置即可完成设定。
拓展思考:
1、可以监测声音分贝;
2、或者作为声控开关的检测部分。
'''
from machine import Pin,ADC
from time import sleep
sound = 34
# 初始化GPIO口
def setup():
global sound_ADC
sound_ADC通过ADC类生成,以Pin(sound)为参数,该对象以34号IO口为输入端口进行模数转换,名称设定为sound_ADC。
sound_ADC 设置衰减为11分贝,这意味着检测输入电压的范围在0到3.6伏之间。当前输入电源为3.3伏,这个电压值符合检测要求。
A0adc代表ADC接收到的数值,A0min表示无声状态下ADC传输的电压,最高电压为3.3伏特。
A0min值可以设置为1.7V,大致位于3.3V的二分之一处。由于音频转换后存在正负两个半周期,其形态类似于正弦波形,而音量高低仅取决于波峰的高度。
def Vvalue(A0adc,A0min):
vv1等于三点三乘以A0adc除以四千零九十五减去A0min,再除以三点三减去A0min,然后乘以一千,这个计算比较输入音量对应的电压值和一点七伏的差别,接着将这个差别除以整个量程,最后将结果放大一千倍,因为一百倍的声音识别变化显得有些微弱。
电压为1.7伏时,音量为零分贝,二者之间偏差数值的绝对值越大,表明音量越高。通过调整电位器,能够设定音量为零分贝时的标准电压读数。
vv1经过四舍五入处理,接着取其绝对值,因为声音信号有正负变化,绝对值能够反映音量大小。
返回音量大小,数值介于零到一千之间,电压三三伏特对应音量最大值一千。
# 循环函数
def loop():
计数器初始值为零
不断重复,永不终止
电压值=计算函数值(音频模数转换器读数,1.7) # 将零伏特对应调整为1.7伏特
如果声音数值非零,
输出声音数值,数值为voiceValue,并呈现结果。
当声音传感器的测量结果超过100时
声音太大了,需要提示,数量是多少,进行显示,计数结果输出
计数器数值增加一
暂停执行 0.2 秒,造成 200 毫秒的等待时间
# 程序入口
当当前模块作为主程序运行时
setup() # 初始化GPIO口
loop() # 循环函数
2 实验图片
3 实验显示结果
在shell区可以看到显示的音量结果:
4 声音传感器模块原理分析 4.1 驻极体话筒原理
驻极体话筒只有两个引脚,如下图
它的工作方式是怎样的?左侧装置是驻极体传声器,右侧装置是附加的辅助电路部分。具体机制可以参考相关视频讲解。
驻极体麦克风由驻极体和场效应管组成。驻极体充当电容器,内部储存永久电荷且不会消散。声波使震动膜振动,造成驻极体两极板间距变动,进而引起电容改变。根据公式Q=CU,当Q恒定而C变动时,电压U随之变化。造成场效应管电阻发生改变,是因为驻极体电容电压受声波影响而波动kaiyun官方网站登录入口,进而调制JFET的栅极电压,最终导致其沟道电阻发生改变,因此+点的电压也相应发生变化,这个道理需要进一步研究场效应管才能深入理解,不过我暂时没有深入探讨。
可以看作整个驻极体话筒相当于一个会变动的电阻,这个电阻的大小会随着声音的强弱而改变。
4.2 声音传感器模块
这张图展示了四端声音感应装置的线路构造,需要参照《单片机三剑客——ESP32单片机与Python语言编程》这本书进行理解
这里的MIC就是驻极体话筒。
1、AO引脚信号输出工作过程
如下红色的部分,就和4.1类似,不过多了一个滑动变阻器。
电压VCC通过RP11、R13、MIC,最终接地,若将MIC当作电阻开元棋官方正版下载,则信号经历了三个电阻的分压作用。在静音模式下,A点的电压值取决于滑动变阻器的阻值,滑动变阻器的电阻数值越小,A点的电压值就越高。
当前环境安静时,AO电压为1.7V,MIC存在一定电阻,通过调整电位器阻值,使MIC与R13的总电阻等于RP11的阻值,A点电压接近VCC的一半,即1.7V,此时以Shell区域对应的声音值接近0为准,通常在1左右即可判定。
音量波动会引起电阻数值波动,或增或减kaiyun全站网页版登录,这与声波节奏关联,进而引发A点电平波动,A点电平或高或低,超出1.7V基准,二者偏差即代表音量强弱,在终端显示为音量标示。
这基本上就是声音传感器的运作方式了。如果大家在学习过程中有任何疑问,欢迎随时提出宝贵意见。