模块熟悉
第 13 课·视频:声音模块
麦克风只能告诉你"多响",不能告诉你"什么声"
先说一件容易误会的事:这个模块不能录音,也不能识别你说的话。
它只会告诉你一件事:现在有多响。
看的时候注意三件事
第一,它是四根线,但只用一根。
模块上有 AO 和 DO 两个输出:
| 针脚 | 含义 | 我们用它吗 |
|---|---|---|
AO |
模拟量,声音越大数值越大 | ✅ 用这个 |
DO |
数字量,超过某个响度才翻转 | ❌ 本课不用 |
| GND | 地 | ✅ |
| VCC | 电源 | ✅ |
DO 不是没用,只是它那个"门槛"要靠板上的蓝色小电位器拧,不太精确。我们直接用 AO 读数,在代码里判断,更灵活。
第二,注意安静的时候那个数。
它不是 0。安静的时候也有个底数,可能是 100 多,也可能是 300 多。这个数跟环境有关,也跟你的模块有关。
这一点特别重要:判断"吵不吵"的时候,不能拿 0 当基准,要拿"安静时的读数"当基准。
第三,注意我说话的时候数字怎么动。
不是慢慢涨上去的,是猛地跳一下、又掉回来。声音就是这样——它变化得非常快。
声音是"波形",你读到的是"高度"
声音在物理上是一条上下起伏的波。这个模块做的事,就是把这条波变成一个数字——大致相当于"现在的波有多高"。
所以你读到的数,反映的是这一刻的响度,不是"这段话有多吵"。
这就带来一个实际问题:你打个响指,数字只跳一下。 如果程序刚好在它跳动那一刻检查,就抓到了;刚好错开,就漏了。
对策有两个,视频里用的是第一个:
- 多读几次,取最大的那个(叫"峰值保持")——不容易漏
- 多读几次,取平均——更稳,但会漏掉突然的响声
两种都行,看你想要什么。
自测
答案与解析
它只是个"响度计"。识别语音需要复杂的模型和算力,不是这个几块钱模块能做的事。记住这一点,你就不会对它抱不切实际的期待。
答案与解析
安静时读数不是 0,而且每个环境、每个模块都不一样。所以正确的做法是:先测一下你这里的"安静值",然后在这个值上加上一个幅度作为阈值。这样换到别的房间也能用。
答题要点
答题要点应该包含:声音是一瞬间的事,程序检查的时机如果和它错开就会漏掉。改进办法:① 提高检查频率,循环里不停读;② 做"峰值保持"——连续读多次,记住最大值,而不是只看当前这一次;③ 把判断改成"最近一小段时间内是否超过阈值",而不是"此刻是否超过阈值"。
拓展为什么有的麦克风模块还有 DO 引脚?它和 AO 有什么本质区别?
这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。
提示:搜"麦克风模块 AO DO 区别"、"比较器 输出"。想一想:DO 那个"门槛"是谁定的?定在电路里和定在代码里,各有什么好处?
拓展板子的 ADC 读一次要多久?这会不会成为限制?
这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。
提示:搜"ESP32 ADC 采样率"、"analogRead 速度"。算一算:如果一秒钟只能读几千次,能不能完整捕捉声音的波形?
本节你要动手做的事
- [ ] 接好线:
VCC→3.3V,GND→GND,AO→ 一个模拟引脚 - [ ] 先安静地跑一遍,记下安静时的读数是多少
- [ ] 然后拍手、说话,看数字怎么跳
- [ ] 试着在代码里设一个阈值,让它"听到响声就做点什么"
- [ ] 做完自测题