ServoRadar:Arduino 超声波雷达扫描系统
项目概述
本项目利用 Arduino UNO 驱动 SG90 舵机旋转 HC-SR04 超声波传感器,实现 0°~180° 扫描测距,并在串口监视器实时打印角度、距离及“物体检测”报警信息。原理类似雷达:超声波发射 8 个周期脉冲束,接收回波计算飞行时间换算距离;舵机以 1° 步长扫描,形成极坐标点云。适合初学者理解舵机控制、超声波测距、串口通信及简单数据可视化。
所需组件与物料
- Arduino UNO R3 × 1
- HC-SR04 超声波测距模块 × 1
- SG90 微型舵机 × 1
- 面包板 × 1
- 杜邦线若干
硬件接线表
| 模块引脚 | Arduino 引脚 | 说明 |
|---|---|---|
| HC-SR04 VCC | 5V | |
| HC-SR04 Trig | D8 | 触发信号输出 |
| HC-SR04 Echo | D11 | 回波信号输入 |
| HC-SR04 GND | GND | |
| SG90 信号线 (橙/白) | D3 | PWM 控制 |
| SG90 电源红线 | 5V | 建议外接 5V 1A 电源,避免 Arduino 供电不足抖动 |
| SG90 地棕/黑线 | GND |
核心代码逻辑
#include <Servo.h>
Servo myservo;
int angle = 0;
long duration;
int distance;
const int trigPin = 8;
const int echoPin = 11;
void setup() {
Serial.begin(9600);
myservo.attach(3);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// 正向扫描 0° -> 180°
for (angle = 0; angle <= 180; angle++) {
myservo.write(angle);
delay(15); // 舵机到位延时
}
// 反向扫描 180° -> 0° (含测距)
for (angle = 180; angle >= 0; angle--) {
myservo.write(angle);
delay(200); // 稳定后测距
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // 标准 10μs 触发脉冲
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // 声速 340m/s 换算 cm
Serial.print("Angle: "); Serial.println(angle);
Serial.print("Distance: "); Serial.println(distance);
if (distance <= 10) Serial.println("Object detected!");
}
}
关键参数与优化建议
| 参数 | 当前值 | 建议调整 | 影响 |
|---|---|---|---|
| 扫描步长 | 1° | 可改 2°~5° | 减小步长提高角分辨率,增大加快扫描周期 |
| 正向延时 | 15ms | 10~20ms | 舵机机械响应时间,过小会抖动 |
| 反向测距延时 | 200ms | 50~100ms | 平衡测距稳定性与扫描速度 |
| 触发脉冲 | 10μs | ≥10μs | HC-SR04 规格要求,过短可能不触发 |
| 报警阈值 | 10cm | 可改 5~50cm | 根据应用场景调整灵敏度 |
数据可视化扩展
- Processing 绘图:串口读取 "Angle,Distance" 绘制极坐标雷达图,实时显示障碍物轮廓。
- Python + Matplotlib:
plt.polar(theta, r)绘制极坐标散点图,可保存历史帧生成动画。 - Serial Plotter:Arduino IDE 自带工具,直接绘制距离随角度变化曲线。
常见问题排查
- 距离读数为 0 或乱跳:检查 Echo 引脚接线、共地、供电纹波;加 100μF 电解电容跨接传感器 VCC-GND。
- 舵机抖动/卡顿:舵机峰值电流大,Arduino 5V 引脚限流约 400mA,必须外接 5V 电源并共地。
- 串口乱码:波特率统一 9600,避免中文注释编码问题。
- 盲区:HC-SR04 最近测距约 2cm,<2cm 读数不准。
进阶改进方向
- 双舵机实现俯仰 + 方位二维扫描 (3D 雷达)。
- 替换为 TF-Luna / TFmini Plus 激光雷达,精度 mm 级、范围 12m+。
- 加入 SLAM 算法 (如 Hector SLAM) 构建 2D 地图。
- 集成 ESP32 通过 WiFi 传输点云至 Web 端三维渲染。
制造工艺