Arduino HC-SR04 超声波雷达:舵机扫描 + Processing 实时可视化
元器件与材料
| Arduino UNO | ×1 |
| HC-SR04 超声波测距模块 | ×1 |
| SG90/9g 微型舵机 | ×1 |
| 面包板 & 跳线 | 各×1 |
项目简介
利用 Arduino 控制舵机旋转 HC-SR04 进行 180° 扫描,将每一度的测距数据通过串口发送给 PC 端的 Processing 程序,实现类似雷达屏幕的实时可视化。项目包含两部分代码:
- Arduino 端:控制舵机逐步旋转,读取超声波距离,以
角度,距离格式发送串口数据 - Processing 端:接收串口数据,绘制极坐标雷达图,显示左右两次扫描的平均值
硬件接线
- HC-SR04:VCC→5V, GND→GND, Trig→Pin 2, Echo→Pin 3
- 舵机:信号线→Pin 9 (PWM), 电源→5V/GND (建议外部供电避免抖动)
Arduino 代码核心
/* Radar Screen Visualisation for HC-SR04
发送每一度的舵机角度和测距值到串口,供 Processing 读取 */
#include <NewPing.h>
#include <Servo.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define MAX_DISTANCE 150 // 最大测距 cm
#define SERVO_PWM_PIN 9
#define ANGLE_BOUNDS 80 // 扫描范围 ±80°
#define ANGLE_STEP 1 // 步进 1°
int angle = 0;
int dir = 1; // 1=正向, -1=反向
Servo myservo;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
myservo.attach(SERVO_PWM_PIN);
}
void loop() {
delay(50); // 留出舵机转动时间
// 舵机角度映射:-80~80 → 0~160
myservo.write(angle + ANGLE_BOUNDS);
// 读取距离并发送串口
int cm = sonar.ping_cm();
Serial.print(angle); Serial.print(","); Serial.println(cm);
// 更新角度,到达边界反向
if (angle >= ANGLE_BOUNDS || angle <= -ANGLE_BOUNDS) dir = -dir;
angle += dir * ANGLE_STEP;
}
Processing 端要点
Processing 代码读取串口 CSV 数据,维护两个方向的距离数组,绘制半透明扇形扫描线、距离点阵、网格刻度及文字标注。关键函数:
serialEvent()解析 "angle,dist" 存入对应数组drawRadar()绘制背景网格、扫描线、历史轨迹drawObject()根据角度和距离绘制目标点
完整 Processing 代码较长,请访问 GitHub 仓库获取:
https://github.com/faweiz/My-Arduino/tree/master/arduino_radar
原理图
简单的三模块连接:Arduino → HC-SR04 (Trig/Echo) + 舵机。建议舵机单独供电,共地即可。
制造工艺
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- 从零构建智能 Arduino 四足机器人:完整指南
- Arduino 声纳实时测距与 Processing 可视化
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
- Arduino Nano + MPU6050 实现加速度转倾斜角度(Visuino 图形化编程)
- 利用 Arduino Nano R3 自制全功能 CNC 雕刻机