## 作品简介
##### **基于ARM内核的GD32F470GZT6单片机立创梁山派开发板的具有寻迹、避障、蓝牙、遥控功能等功能的双驱动两轮智能小车**
## 演示视频
[【基于立创梁山派开发板GD32F470ZGT6的智能小车,寻迹pid,蓝牙透传,超声波避障-哔哩哔哩】](https://b23.tv/0oSwVTZ)
#####
## 功能需求
基础功能:
为了实现前进,后退,左转,右转,停止功能
速度档位调节功能:
为了实现多种路况下的任意切换不同速度的功能
蓝牙遥控功能:
为了实现无线控制遥控小车功能
寻迹功能:
为了实现无控制状态下自动按路线的效果
避障功能:
为了自由运动模式下增加防碰撞功能
电池电量预测功能:
为了增加电量低提醒的效果
照明功能:
为了实现夜间行驶照明功能,和氛围灯效果
## 总体设计方案框图
方案框图
![xjf智能小车项目方案框图.png]

## 原理图设计说明
### 原理图介绍如下:
**认真阅读注意事项部分**
#### 电源部分
![IMG_20230222_142532.jpg]

![QQ截图20230222145509.png]

**采用了14500锂电池串联输出7.4V的电压给电机供电,在通过5V稳压芯片给单片机以及模块供电。此处的三个滤波电容可以滤掉大部分的高频和低频干扰。**
#### 主控部分
![IMG_20230222_142802.jpg]

![主控.png]

**主控部分采用了立创梁山派开发板,GD32F470GZT6,资源极其多,做这个小车可以说完全有点过剩,可谓杀鸡用牛刀。梁山派设计的很好无论是对于学习GD系列单片机还是使用方面都挺不错的,扩展功能预留口也多,扩展使用极其方便!**
#### 电机以及电机驱动部分
![IMG_20230222_142840.jpg]

![IMG_20230222_142908.jpg]

![电机驱动.png]

**采用了TB6612模块主要是设计的是双轮驱动,6612模块太贵也可以用8833代替,模块刚好是双H桥设计,可以输出两个PWM,采用N20直流减速电机,用300-500转的就足够了,轮子是直径65mm的。
#### 蓝牙部分!!!
![IMG_20230222_143133.jpg]

![QQ截图20230222154355.png]

**!!!此处设计要特别注意,注意自己买的模块是3.3V供电还是5V供电,我一开始设计的是3.3V的供电,后来买来的模块是HC05兼容版,是5V供电的,后来选择在端子排的的供电引脚上飞线,因为不想退货再从新买,更不可能重新打板。**
#### 蜂鸣器部分!!!
![IMG_20230222_143059.jpg]

![QQ截图20230222154441.png]

**!!!此处也要特别注意,蜂鸣器电路电压供电把5V改成3.3V供电不然会不受控制的响,切记,切记,切记。**
#### 超声波模块
![IMG_20230222_143156.jpg]

![QQ截图20230222144754.png]

**注意5V供电,画PCB注意其面朝方向即可**
#### 寻迹电路部分
![IMG_20230222_143243.jpg]

![QQ截图20230222144923.png]

**采用了五路寻迹模块,利用红外光电传感器和运放电压比较器和电位器捕捉黑线的位置状态,其实可以不要比较器用ADC采集电压变化会捕获更准确,配合PID运算,就可以走出比较好的路线,但是对于编程和调试是很大的工作任务。后面会尝试去做做看。**
#### 按键和LED电路
![IMG_20230222_143018.jpg]

![QQ截图20230222144608.png]

**照明部分的LED用的电阻小一点亮一点。**
#### ADC电压采集部分
![QQ截图20230222161023.png]

**此处采用了电阻三等分压给单片机ADC端**
![微信图片_20230224162045.png]

**串口展示采样值和,电量百分比。**
## PCB设计说明
**1.注意事项,电源线用20-30mil,信号线用10mil**
**2.注意螺丝孔位布局,原本一开始设计前后各一个万向轮的,因为前面的档寻迹模块了就拆了**
**3.红外传感器模块尽量放板子的最前面,我这个放太中间了,导致寻迹响应要求高,效果不理想**
下面会有PCB图以及原理图
## 软件说明
##### 阅读代码前看工程DOC文件里的readme.txt
**软件部分在工程代码里都有注释,这里主要说说实现的功能部分:**
1.蓝牙部分使用了串口与手机通信
2.超声波寻迹使用了定时器中断和外部中断来测距
3.寻迹部分使用了PID差速环来调速,但由于硬件原因效果不太理想(此处借鉴了B站一只脑袋不够用的代码,目前只用了差速环)
4.按键消抖部分和LED闪烁部分采用了定时器扫描处理(借鉴B站江科大51课程里的定时中断执行驱动函数的程序结构)
5.ADC电压电池电量采集(主要在计算采集值与真实电压值的转换),可以用串口助手查看剩余电量,也可以不用看,低于10%会报警。四个照明LED闪烁
这里主要说说,电量高的时候和电量底的时候输出的电压不一样,寻迹效果也有所不同,视频中的是满电状态下跑的,大约剩余50%的电跑的时候极其流畅。。。。
## 实物展示说明
提示:作品的实物图片,图片可以加上说明。
![IMG_20230222_170836.jpg]

上电LED车灯闪烁两圈表示启动完成
模式0为初始化状态,LED模式灯不闪烁
按一下模式按键,进入模式1状态,蓝牙控制模式,此时,LED模式灯为2秒闪烁一次,点击启动按键就可以用手机控制小车运动了
再按一下进入模式2状态,模式2状态自由奔跑的避障模式,此时,LED模式灯为1秒闪烁一次,点击启动按键就会直走遇到障碍物就会执行避障程序。
再按一下按键为模式3状态,此状态为寻迹状态,此时LED每200ms快闪,点启动按钮就可以启动了寻迹了。
再按一下当然是回到模式0了。