Pathfinder:Arduino UNO 避障机器人项目套件 —— 组件清单与详解
所需组件与物料
| 组件 | 数量 | 备注 |
| Arduino UNO | 1 | 核心控制器 |
| HC-SR04 超声波测距模块 | 1 | 前向避障感测 |
| 1000mAh 锂电池 | 2 | 供电(建议带保护板) |
| RGB 共阴 LED | 1 | 状态指示(红/绿/蓝) |
| 有源蜂鸣器 | 1 | 声光报警 |
| 330Ω 电阻 | 3 | LED 限流 |
| USB-A 转 B 线 | 1 | 编程/供电 |
| 杜邦线 | 20 根 | 公对公/公对母 |
所需工具
- Arduino Materia 101(或同类 3D 打印机,打印底盘)
- 十字螺丝刀
所需软件与服务
- Arduino IDE
- Autodesk Fusion 360(底盘 3D 建模)
项目概要
本项目设计一款自主避障机器人,基于 Arduino UNO 与 Adafruit Motor Shield,具备:
- 超声波传感器 + 微型舵机实现 180° 扫描测距,精准探测前方障碍物
- 磁性蜂鸣器 + RGB LED 多模态指示:红灯+蜂鸣(近距离危险)、蓝灯(中距离减速)、绿灯(远距离加速)、白灯(无障碍全速)
- 四种电机转速档位对应四种距离区间
- 自主决策:遇障后退 → 舵机扫描左右距离 → 向宽阔侧转向 → 同侧受阻则原地掉头
- 全自主运行,无需外部遥控
潜在应用:军事侦察、人道主义救援、辅助视障/听障人士感知环境。
核心代码逻辑
引脚定义
BuzzPIN A0 // 蜂鸣器
TrigPIN A1 // 超声波 Trig
EchoPIN A2 // 超声波 Echo
LEDBPIN A3 // RGB 蓝
LEDGPIN A4 // RGB 绿
LEDRPIN A5 // RGB 红
DCMROFF 25 // 双电机校准偏移
关键函数
Search():触发超声波测距,返回厘米值
ChangePath():停车→后退→舵机扫描左右→比较距离→转向
CompareDistance():左/右距离比较,决定左转/右转/掉头
Forward/Backward/TurnRight/TurnLeft/TurnAround/Stop:电机控制封装
主循环逻辑
距离 < 30cm → 红灯+蜂鸣,减速(100),ChangePath()
30cm ≤ 距离 < 60cm → 蓝灯,中速(150),前进
60cm ≤ 距离 < 90cm → 绿灯,高速(200),前进
距离 ≥ 90cm → 白灯(RGB全亮),全速(250),前进
完整 Arduino 代码
#include <AFMotor.h>
#include <Servo.h>
#define BuzzPIN A0
#define TrigPIN A1
#define EchoPIN A2
#define LEDBPIN A3
#define LEDGPIN A4
#define LEDRPIN A5
#define DCMROFF 25
AF_DCMotor M1(1, MOTOR12_64KHZ);
AF_DCMotor M2(2, MOTOR12_64KHZ);
Servo SER1;
int Search() {
float duration = 0, cm = 0;
digitalWrite(TrigPIN, LOW); delayMicroseconds(2);
digitalWrite(TrigPIN, HIGH); delayMicroseconds(10);
digitalWrite(TrigPIN, LOW);
duration = pulseIn(EchoPIN, HIGH);
cm = duration / 58.8;
return (int)cm;
}
int RightDistance, LeftDistance;
float Distance = 0;
void setup() {
pinMode(BuzzPIN, OUTPUT);
pinMode(TrigPIN, OUTPUT);
pinMode(EchoPIN, INPUT);
pinMode(LEDBPIN, OUTPUT);
pinMode(LEDGPIN, OUTPUT);
pinMode(LEDRPIN, OUTPUT);
SER1.attach(10); // 舵机接 Motor Shield 的 Servo1 接口
}
void loop() {
SER1.write(80); // 舵机中位(前向)
delay(100);
Distance = Search();
if (Distance < 30) {
digitalWrite(BuzzPIN, HIGH);
digitalWrite(LEDBPIN, LOW); digitalWrite(LEDGPIN, LOW); digitalWrite(LEDRPIN, HIGH);
M1.setSpeed(100); M2.setSpeed(100);
ChangePath();
} else if (Distance < 60) {
digitalWrite(BuzzPIN, LOW);
digitalWrite(LEDBPIN, HIGH); digitalWrite(LEDGPIN, LOW); digitalWrite(LEDRPIN, LOW);
M1.setSpeed(150); M2.setSpeed(150);
Forward();
} else if (Distance < 90) {
digitalWrite(BuzzPIN, LOW);
digitalWrite(LEDBPIN, LOW); digitalWrite(LEDGPIN, HIGH); digitalWrite(LEDRPIN, LOW);
M1.setSpeed(200); M2.setSpeed(200);
Forward();
} else {
digitalWrite(BuzzPIN, LOW);
digitalWrite(LEDBPIN, HIGH); digitalWrite(LEDGPIN, HIGH); digitalWrite(LEDRPIN, HIGH);
M1.setSpeed(250); M2.setSpeed(250);
Forward();
}
}
void ChangePath() {
Stop(); Backward(); Stop();
SER1.write(12); delay(500); RightDistance = Search(); delay(500);
SER1.write(160); delay(1000); LeftDistance = Search(); delay(500);
SER1.write(80); delay(500);
CompareDistance();
}
void CompareDistance() {
if (RightDistance > LeftDistance) TurnRight();
else if (LeftDistance > RightDistance) TurnLeft();
else TurnAround();
}
void Forward() { M1.run(FORWARD); M2.run(FORWARD); }
void Backward() { M1.run(BACKWARD); M2.run(BACKWARD); delay(500); }
void TurnRight() { M1.run(BACKWARD); M2.run(FORWARD); M1.setSpeed(100+DCMROFF); delay(300); }
void TurnLeft() { M1.run(FORWARD); M2.run(BACKWARD); M2.setSpeed(100+DCMROFF); delay(300); }
void TurnAround() { M1.run(FORWARD); M2.run(BACKWARD); M2.setSpeed(100+DCMROFF); delay(700); }
void Stop() { M1.run(RELEASE); M2.run(RELEASE); delay(100); }
3D 打印底盘
机器人底盘 STL 文件见 Custom parts 栏,可在 Fusion 360 中修改适配不同电机/电池尺寸。
原理图
电路连接图见 Schematics 栏,包含 Motor Shield、超声波、舵机、RGB LED、蜂鸣器、电池供电完整接线。
项目展示: Youth Zest Project Showcase