作业 5 · 综合实验:超声波测距仪
实验目的
- 学习超声波传感器的原理和工作过程;
- 掌握使用 Arduino 控制超声波传感器测距的方法;
- 完成一个简易超声波测距仪。
实验 1:Arduino 控制超声波模块
- Arduino 发送触发信号,接收回响信号;
- 声速取 ,距离单位为厘米,保留 2 位小数;
- 目标距离小于 10 cm 时,LED 快速闪烁报警;
- 通过串口把结果传到计算机。
实验 2:超声波测距仪
在实验 1 基础上:
- 将测量结果循环显示在 1 位 8 段数码管上,整数部分为 4 位、以 0 开头,小数部分 1 位;
- 分别对修正后数据做平均数和中位数滤波;
- 用
key1和key2选择数码管显示哪一种滤波结果; - 通过串口绘图器同时绘制原始数据与滤波数据,截图提交。
报告要求
报告需要包含需求分析、原理论证、方案与电路设计、代码架构、实验过程和结果、问题与解决方案、思考题和附录源码。图表需要编号和标题,正文不直接堆源码,源码放在附录。
查看提交结果与实验分析
提交报告用飞行时间法计算距离,配置 Trig 为 13 号引脚、Echo 为 12 号引脚。实验 1 的代码核心为:
digitalWrite(trig, LOW);
delay(10);
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
distance_cm = pulseIn(echo, HIGH) / 58.8;
distance_cm = int(distance_cm * 100.0) / 100.0;
实验 1 在 5 cm、20 cm、50 cm 和 80 cm 设置点各采 7 次数据;实验 2 在 5 cm、20 cm 和 50 cm 设置点各采 5 次。报告对比了均值和中位数,并观察到滤波曲线比原始曲线更稳定。
记录的主要问题包括:
- 距离越远时误差变大,并出现偏小现象;重新校正了尺子和障碍物位置。
- 距离过近或过远时误差较大;尝试用多次采样取平均、提高采样频率缓解。
- 数码管部分段不亮;排查后认为是面包板上电阻密集,导致短路或接触不良。
报告的思考题还讨论了模块测量范围、障碍物形状与材质、环境温度、数值精度损失,以及调查法和控制变量法。
需要注意:原代码用 delay(10) 产生触发脉冲,实际是 10 ms,而模块要求至少 ;更合适的实现是 delayMicroseconds(10)。