作业 5 · 综合实验:超声波测距仪

实验目的

  1. 学习超声波传感器的原理和工作过程;
  2. 掌握使用 Arduino 控制超声波传感器测距的方法;
  3. 完成一个简易超声波测距仪。

实验 1:Arduino 控制超声波模块

  • Arduino 发送触发信号,接收回响信号;
  • 声速取 340 m/s340\ \mathrm{m/s},距离单位为厘米,保留 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 次。报告对比了均值和中位数,并观察到滤波曲线比原始曲线更稳定。

记录的主要问题包括:

  1. 距离越远时误差变大,并出现偏小现象;重新校正了尺子和障碍物位置。
  2. 距离过近或过远时误差较大;尝试用多次采样取平均、提高采样频率缓解。
  3. 数码管部分段不亮;排查后认为是面包板上电阻密集,导致短路或接触不良。

报告的思考题还讨论了模块测量范围、障碍物形状与材质、环境温度、数值精度损失,以及调查法和控制变量法。

需要注意:原代码用 delay(10) 产生触发脉冲,实际是 10 ms,而模块要求至少 10 μs10\ \mu\mathrm{s};更合适的实现是 delayMicroseconds(10)。

评论