模块熟悉
第 15 课·视频:超声波模块
四根线、两个触发脚,测出"前面有多远"
超声波是套件里唯一能测距离的模块。它长着两只"眼睛"——一个是喇叭,一个是耳朵。
看的时候注意三件事
第一,它是四根线,不是三根。
VCC、Trig、Echo、GND。比别的模块多一根,因为它要发信号,也要收信号——一个引脚负责"喊",一个引脚负责"听"。
第二,注意 Trig 和 Echo 分别接在哪个脚。
这两个引脚在代码里是分开填的。接反了不会烧坏,但读数一定是错的(通常是 0 或者一个巨大的数)。
第三,注意手掌离得远近,数字怎么变。
把手慢慢移远,看数字一点点变大。你会看到它不是完全平滑的——偶尔跳一下,这是正常的,后面讲。
它到底怎么测距离
原理其实特别朴素,就是回声。
你对着山谷喊一声,听到回声。你从喊出去到听见回声,中间隔了多久?隔得越久,山谷越远。
超声波模块干的就是这件事:
- 在
Trig脚给它一个触发脉冲——"喊一声" - 它在
Echo脚上输出一个高电平——高电平持续的时间,就是"喊出去到听到回声"的时间 - 程序量出这个时间,乘上声速,除以 2
为什么要除以 2? 因为声音是跑过去又跑回来,走的距离是你到物体的两倍。
为什么读数会跳
三个原因,都会让你的数字不稳:
物体表面。 声音遇到软的东西(比如衣服、窗帘)会被吸收,几乎不反射。 角度。 超声波是喇叭形发射的,物体歪着,回波就弱。 斜面和尖角。 声音会弹到别处去,不往回来。
所以超声波的读数天然就有波动。你后面写代码的时候,别拿单个读数做判断——多读几次取中间值,或者取平均,会稳很多。
自测
答案与解析
Trig 负责"喊",Echo 负责"听"。一个引脚没法同时干这两件事,所以分成了两根。这也是它比别的模块稍复杂的原因。
答案与解析
2000 微秒 = 0.002 秒。声音走的距离 = 340 × 0.002 = 0.68 米 = 68 厘米。但这是来回的距离,所以要除以 2,实际距离约 34 厘米。忘了除 2 是这里最常见的错误。
答题要点
答题要点应该包含:① 先看 Trig/Echo 有没有接反或接错脚;② 再看 VCC/GND 接对没有、模块上的电源灯亮不亮;③ 确认是不是物体太近了(低于模块最小测距距离,一般 2~3 厘米测不出);④ 确认物体是不是太远,超出量程(一般 4 米左右);⑤ 最后才怀疑代码。
拓展为什么超声波测距的最小距离有下限?
这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。
提示:搜"超声波 最小测距 盲区 原因"。想一想:如果物体太近,回声是不是和"还在喊"的声音混在一起了?
拓展同样测距离,红外、激光、超声波各有什么优劣?
这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。
提示:搜"超声波 激光 红外 测距 对比"。想一想扫地机器人和电梯里的测距用的是哪种、为什么。
本节你要动手做的事
- [ ] 接好四根线:
VCC→3.3V,GND→GND,Trig/Echo→ 两个 GPIO - [ ] 跑程序,把手放在不同距离,看数字变化
- [ ] 拿尺子量一下实际距离,看看读数准不准
- [ ] 试试用不同材料挡(手、书本、衣服),看读数有什么不同
- [ ] 做完自测题