第 5 讲 · 超声波测距、滤波与数码管显示
飞行时间法
HC-SR04 的基本时序是:
- Arduino 向 Trig 发送至少 高电平;
- 模块发射超声波;
- Echo 输出的高电平宽度对应往返时间 ;
- 用 计算单程距离。
若 pulseIn 返回微秒,且声速近似为 ,则
源报告的实验代码用了 delay(10) 产生 Trig 高电平,单位是毫秒,远大于要求的 。它可能仍能触发,但更准确的写法是 delayMicroseconds(10)。
误差从哪里来
- 声速:温度改变时,把 固定为 会引入系统误差;
- 几何与材质:倾斜、柔软或表面不平的物体可能不把声波反射回探头;
- 盲区与衰减:过近时余震干扰,过远时回波弱;
- 时间量化:定时分辨率、函数延迟和单位换算都会进入结果。
源报告记录显示,在 5 cm、20 cm、50 cm 和 80 cm 设置点都有多次测量,并对比平均数与中位数,这比只保留一次读数更能说明稳定性。
滑动窗口滤波
对最近 个样本 ,均值滤波为
中位数滤波则先排序,取中间元素。窗口越大,输出通常越稳,但对真实距离变化的响应也越慢,所以滤波不是“越强越好”。
显示一个数字实际在做什么
七段数码管用 到 七条线段组成数字,外加小数点 dp。代码需要:
- 把待显示数值拆成各位;
- 查表得到每个数字应点亮的段;
- 按硬件是共阴还是共阳输出正确电平;
- 为每条 LED 回路限流。
源报告遇到数码管部分段不亮,定位到面包板上电阻密集导致短路或接触不良。“只在公共端串一个电阻”虽能让所有段亮起来,但不能保证每段电流一致;更可靠的修复是给各段单独限流并重新整理连线。