Arduino UNO 自制循迹小车:从零构建自主巡线机器人
项目简介
经典双路红外循迹小车,利用两路反射式红外传感器识别黑线(白底黑线),Arduino UNO 通过 L293D 驱动两路 BO 电机实现差速转向。适合初学者理解闭环控制、电机驱动、传感器融合基础概念。
硬件清单
| 元件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO R3 | 1 | |
| L293D 双 H 桥驱动 | 1 | DIP-16,峰值 600mA/通道 |
| BO 直流减速电机 + 轮子 | 2 | 黄色 6V 150RPM 常用 |
| 万向轮 | 1 | 前轮支撑 |
| 红外循迹模块 | 2 | LM393 比较器输出,数字量 0/1 |
| 9V 电池/电池盒 | 1 | 或 2S 锂电池 7.4V |
| 底盘 | 1 | 亚克力/纸板/3D 打印均可 |
| 点焊板/定制 PCB | 1 | 文中提供 PCBWay 共享链接 |
电路接线
L293D 引脚映射
| L293D 引脚 | 功能 | Arduino 引脚 |
|---|---|---|
| 1,9 EN | 使能左/右 | 常接 5V(或 PWM 调速) |
| 2,7 IN | 左电机方向 | D8, D9 |
| 10,15 IN | 右电机方向 | D10, D11 |
| 3,6 OUT | 左电机 | 接电机两端 |
| 11,14 OUT | 右电机 | 接电机两端 |
| 8 VCC2 | 电机电源 | 9V 电池正极 |
| 16 VCC1 | 逻辑电源 | 5V |
| 4,5,12,13 GND | 地 | 共地 |
红外传感器
- 左传感器 OUT → D13
- 右传感器 OUT → D12
- VCC→5V,GND→GND
- 检测到黑线输出 HIGH,白色输出 LOW(或相反,依模块调整代码)
核心控制逻辑
// 引脚定义
const uint8_t LM1=8, LM2=9, RM1=10, RM2=11;
const uint8_t SL=13, SR=12;
void setup() {
pinMode(LM1,OUTPUT); pinMode(LM2,OUTPUT);
pinMode(RM1,OUTPUT); pinMode(RM2,OUTPUT);
pinMode(SL,INPUT); pinMode(SR,INPUT);
stopMotors();
}
void loop() {
bool left = digitalRead(SL); // HIGH=黑线
bool right = digitalRead(SR);
if (!left && !right) forward(); // 都在白面 → 直行
else if (right && !left) turnLeft(); // 右偏 → 左转修正
else if (!right && left) turnRight(); // 左偏 → 右转修正
else stopMotors(); // 双黑 → 停止/十字路口
}
void forward() { digitalWrite(LM1,HIGH); digitalWrite(LM2,LOW); digitalWrite(RM1,HIGH); digitalWrite(RM2,LOW); }
void backward() { digitalWrite(LM1,LOW); digitalWrite(LM2,HIGH); digitalWrite(RM1,LOW); digitalWrite(RM2,HIGH); }
void turnLeft() { digitalWrite(LM1,LOW); digitalWrite(LM2,HIGH); digitalWrite(RM1,HIGH); digitalWrite(RM2,LOW); }
void turnRight() { digitalWrite(LM1,HIGH); digitalWrite(LM2,LOW); digitalWrite(RM1,LOW); digitalWrite(RM2,HIGH); }
void stopMotors(){ digitalWrite(LM1,LOW); digitalWrite(LM2,LOW); digitalWrite(RM1,LOW); digitalWrite(RM2,LOW); }
调试与优化指南
1. 传感器阈值校准
多数模块自带蓝色电位器调节比较器阈值。让小车悬空,对准白纸调节至 LED 熄灭(LOW),对准黑电工胶带 LED 点亮(HIGH)。
2. 电机死区与 PWM 调速
L293D 饱和压降约 2V,6V 电机实际得 4V,扭矩较弱。建议:
- EN 引脚接 PWM 引脚(D5/D6),
analogWrite(EN, 180)限制电流并调速。 - 或改用 TB6612FNG(MOSFET 桥,压降低、效率高、体积小)。
3. 防抖与平滑转向
- 传感器读取加软件滤波:连续 3 次相同才判定有效。
- 转向时内侧电机反转(制动)而非停转,转弯半径更小、更稳。
4. 进阶算法:PID 循迹
若使用 4-8 路模拟输出传感器(如 QTR-8RC),可计算偏差 error = position - center,引入 PID 控制电机差速,实现高速平滑过弯。
PCB 定制与外壳
- 文中提供 PCBWay 共享项目,可直接下单制板(含丝印、过孔、安装孔)。
- 底盘建议 3D 打印参数化模型(Thingiverse 搜「Line Follower Chassis」),预留电池仓、传感器可调高度槽。