1. 项目概述
这个基于单片机的小车循迹避障系统,是我在智能硬件开发领域做过最实用的入门项目之一。它完美融合了传感器技术、电机控制和算法逻辑三大核心模块,特别适合想要从理论走向实践的电子爱好者。
系统主要由三大部分组成:红外循迹模块负责识别地面黑色轨迹,超声波模块检测前方障碍物,单片机作为大脑处理传感器数据并控制电机动作。当小车沿着黑线行驶时,超声波会持续扫描前方区域,一旦检测到障碍物就会触发避障算法,让小车自动绕行后重新回到轨迹上。
提示:这个项目的难点不在于单个模块的实现,而在于如何让多个传感器协同工作,特别是在避障后准确回归原路径。
2. 硬件设计与选型
2.1 核心控制器选择
我最终选择了STC89C52RC单片机作为主控,这是基于以下几个实际考量:
- 价格低廉(约5元/片),适合学生和爱好者
- 具有32个I/O口,足够连接所有传感器和电机驱动
- 支持ISP在线编程,调试方便
- 工作电压5V,与常用模块兼容
对比Arduino,虽然开发更简单但成本高出3-4倍;而STM32性能更强却增加了学习曲线。作为入门项目,89C52是最平衡的选择。
2.2 传感器配置方案
循迹模块:
采用TCRT5000红外反射传感器,包含:
- 5组探头横向排列(间距2cm)
- 数字量输出,检测距离1-8cm可调
- 工作电压3.3-5V
探头布局是关键:中间3个用于精确循迹,两侧各1个用于检测弯道。实际测试中,将传感器离地高度固定在1.5cm时,对黑色电工胶带的识别最稳定。
避障模块:
HC-SR04超声波模块的主要参数:
- 检测距离2-400cm
- 精度可达3mm
- 测量角度15°
- 触发信号10μs高电平
安装时要注意:
- 模块朝前且水平放置
- 离地高度约10cm(避免地面反射干扰)
- 与车体边缘保持3cm以上距离(防止车体遮挡)
2.3 电机驱动电路
采用L298N双H桥驱动模块,特点包括:
- 驱动电压5-35V
- 单路峰值电流2A
- 内置续流二极管
- 支持PWM调速
接线时特别注意:
- 使能端ENA/ENB需接PWM引脚(如P1.0/P1.1)
- 电机输出端OUT1-OUT4要接反接保护二极管
- 逻辑电源和驱动电源必须共地
3. 软件设计与实现
3.1 主程序流程图
c复制void main() {
硬件初始化();
while(1) {
读取循迹传感器();
if(检测到障碍物()) {
避障子程序();
} else {
循迹控制();
}
延时(10ms);
}
}
3.2 循迹算法实现
五路传感器的状态组合对应不同控制策略:
| 传感器状态 | 电机动作 | 说明 |
|---|---|---|
| 00100 | 直行 | 中间探头检测到黑线 |
| 00010 | 左转30% | 轻微右偏 |
| 01000 | 右转30% | 轻微左偏 |
| 00001 | 左转70% | 急右偏 |
| 10000 | 右转70% | 急左偏 |
PWM占空比调节示例:
c复制void SetMotor(int left, int right) {
if(left > 0) {
IN1 = 1; IN2 = 0;
PWM1 = left; // 左电机正转
}
// 右电机同理...
}
3.3 超声波测距实现
关键代码段:
c复制float GetDistance() {
Trig = 1;
delay_us(10);
Trig = 0;
while(!Echo); // 等待回波
TR0 = 1; // 启动定时器
while(Echo);
TR0 = 0;
return (TH0<<8 | TL0) * 0.017; // cm
}
注意:实测中发现,当测量距离<10cm时误差较大,建议在代码中设置30cm的避障阈值。
3.4 避障策略设计
我采用的"右绕行-回归"算法流程:
- 检测到障碍物时立即停车
- 右轮后退,左轮前进,实现左转90°
- 直行20cm(根据车长调整)
- 右转90°
- 直行直到重新检测到黑线
- 沿黑线继续前进
4. Proteus仿真实现
4.1 仿真电路搭建要点
- 单片机模型选择STC89C52RC
- 电机用DC-MOTOR配合H桥电路
- 循迹传感器用开关组模拟
- 超声波传感器用SRF04模型
4.2 关键仿真参数设置
| 组件 | 参数 | 值 |
|---|---|---|
| 晶振 | 频率 | 11.0592MHz |
| 电机 | 负载 | 10Ω电阻+10mH电感 |
| 电源 | 电压 | 5V |
4.3 常见仿真问题解决
- 电机不转:检查H桥使能端是否接高电平
- 传感器无反应:确认上拉电阻已添加(通常4.7KΩ)
- 超声波距离固定:右键传感器→Edit Properties→设置Echo脉冲宽度
5. 实物调试经验
5.1 必带工具清单
- 数字万用表(检测电源和信号)
- 逻辑分析仪(可选,查看PWM波形)
- 绝缘胶带(快速固定线路)
- 可调电源(观察电流变化)
5.2 典型问题排查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 小车走偏 | 电机转速不一致 | 单独测试每个电机,调整PWM平衡 |
| 误避障 | 超声波干扰 | 在代码中添加滤波算法(取5次平均值) |
| 丢失轨迹 | 传感器高度不当 | 调整支架使探头距地面1.5-2cm |
| 重启异常 | 电源电流不足 | 更换2000mAh以上锂电池 |
5.3 性能优化技巧
- 循迹平滑性:在转弯控制中加入PID算法
c复制error = 当前位置 - 目标位置;
integral += error;
derivative = error - lastError;
output = Kp*error + Ki*integral + Kd*derivative;
- 电源管理:
- 单片机单独由7805供电
- 电机驱动直接接电池(避免电压跌落)
- 在电源入口加220μF电容滤波
- 机械调整:
- 将电池置于车体中部降低重心
- 轮胎缠上橡胶圈增加摩擦力
- 传感器支架用海绵减震
6. 项目扩展方向
- 无线遥控:增加HC-05蓝牙模块,通过手机APP控制
- 路径记忆:添加EEPROM存储行驶路线
- 视觉识别:改用OpenMV进行颜色识别
- 多车协作:通过nRF24L01实现车际通信
这个项目最让我惊喜的是,通过调整参数可以呈现出完全不同的行为特性。比如把避障阈值设为15cm、转弯速度降低40%后,小车会表现出非常谨慎的行驶风格,特别适合在拥挤环境中使用。而将循迹采样频率提高到100Hz后,即使面对急弯也能平稳通过。