基于STM32的智能小车设计:避障、循迹与蓝牙遥控
基于STM32的智能小车设计:避障、循迹与蓝牙遥控
本文详细介绍了基于STM32的智能小车设计,包括避障、循迹和蓝牙遥控功能。文章从需求分析开始,逐步深入到硬件选型、电路设计和软件编程,最后通过测试验证了设计的可行性。
一、设计主要解决的问题
- 实现2m的自动直线行驶,要求左右偏移不大于10cm。
- 车载显示屏显示车辆当前行驶速度或车辆运行时间,当前方20cm内出现障碍物时显示与前方障碍物的距离,车每次转弯蜂鸣器报警,同时通过左右指示灯指示转弯方向。
- 依次驶过障碍物①②③④,且不触碰障碍物。
- 成功进行调头转弯,行驶过程中车轮不碾压黑实线。
- 在车道指定位置停车且不越界。
- 通过红外、蓝牙、WiFi等任意一种方式实现对小车的控制,使其前进、后退、左转、右转。
二、赛道图
1. 避障赛道
2. 循迹赛道
三、系统框图
选用STM32F103C8T6作为主控处理器,通过超声波模块检测障碍物,光电管辅助避障,采用红外对管进行循迹,小车每次转向都会触发LED转向指示灯和蜂鸣器报警,按键用于切换小车模式,蓝牙模块用于无线遥控,OLED显示超声波测量距离和实时时钟。
四、硬件选型
1. 主控处理器
选用STM32F103C8T6最小系统板:
2. 超声波模块
选用HC-SR04超声波模块,供电5V:
3. 光电管
选用E18-D80NK光电管,供电5V,感应距离3-80cm:
4. 循迹模块
选用TCRT5000红外对管,供电3.3-5V,检测距离1mm-25mm:
5. 显示模块
选用0.96寸OLED,四针脚IIC协议,供电3.3V:
6. 蜂鸣器模块
选用有源蜂鸣器,供电3.3-5V:
7. 蓝牙模块
选用HC-05蓝牙模块,USB转TTL(用于蓝牙AT指令操作):
8. 电机驱动模块
选用tb6612电机驱动模块,供电12V:
9. 电机选型
选用尺寸小、适合小型玩具、入门级智能小车的电机。
10. 其他辅助器件
包括LED灯珠、按键、限流电阻等。
五、供电方案
- 12V:电机驱动VM脚,ADC的R1输入端。
- 5V:超声波模块、光电管、蓝牙模块、STM32最小系统板5V输入脚。
- 3.3V:OLED、红外对管、LED。
六、PCB设计与小车组装
采用b站up:好家伙VCC 的智能循迹小车V1.5版本PCB,光电管和LED通过拓展排针和面包板外接。
1. PCB原理图
2. PCB走线图
3. PCB实物图
4. 小车实物图
七、软件底层设计
1. LED初始化
用于转向灯与蜂鸣器,二者总是同时进行的,所以封装到一个函数里。
2. 按键初始化
采用外部中断法,能够及时响应,切换模式。
3. OLED初始化
用于显示内容,采用软件IIC。
4. 超声波模块初始化
超声波有定时器中断法、外部中断法、输入捕获法等多种方法,这里使用输入捕获法。
5. 红外对管与光电管初始化
用于读取红外对管与光电管电平,光电管是5V供电,要把他连接到32能承受5V的引脚(引脚定义中带FT标识)。
6. PWM初始化
采用高级定时器1输出普通pwm,用于调节电机转速。
7. 小车动作初始化
用于封装小车各种动作函数,方便调用,其他动作读者可自行设置,修改speed里的数值可改变速度。
8. 串口初始化
用于蓝牙遥控。
9. ADC初始化
用于测量电池电量。
10. RTC初始化
用时间戳获取实时时间。
八、程序设计
1. 避障思路
避障程序有多种设计方法,这里提供一种思路:
2. 循迹程序设计
循迹主要有两个难点,1、2两个急转弯和3入库,利用红外对管3、4同时检测到时进行快速左转,速度要比普通转弯快,实际使用时可能要把4扳到离3近一些,检测到的可能性会有所提高。由于四个光电管同时检测到的概率较小,所以利用2、3同时检测到时进行入库停车操作。
3. 跟随程序设计
主要实现一个定距离跟随功能,离得太近小车后退,离得太远小车前进,这里只写了直线跟随,可以利用光电管实现非直线跟随。
4. 蓝牙遥控程序设计
实现蓝牙发送数据,小车实现对应功能。
九、程序源码
链接:https://pan.baidu.com/s/1-IG5TbmaLH36aXVDPOdxHQ?pwd=s2rn
提取码:s2rn