基于STM32的智能导盲系统
闲来无事,用手头STM32做个项目。
成品功能:
1、垃圾车可以可以按照规定的路线自动行驶,当红外传感器检测到有人靠近后可以自动停车,电机驱动打开垃圾桶盖;
2、垃圾桶内设红外传感器,当垃圾桶内的垃圾已经装满的时候,单片机会通过短信模块自动发送短信给管理人员;
3、小车装有GPS定位,可以通过GPS实时查看垃圾车的位置,当垃圾已满或超重时会提醒有关人员进行垃圾清理。
材料
- STM32F103C8T6芯片最小系统板
- OLED液晶显示屏
- 5个红外检测模块
- 杜邦线
- GSM模块
- GPS模块
- 人体红外模块
- 一个模块小车
- 一个电池盒
- 四节5号电池
- ULN2003驱动模块
- 一个舵机
- 一个开关
- 一个小垃圾桶(纸盒子也行)
- 用keil5进行开发
小车为
开始制作。
整体示意图
这里画了一个简单的示意图,方便后续设计思路
系统流程图
还有系统原理图等在资料中。
制作过程
1、首先测试GPS,找到地址(经纬度)数据。再测试GSM,通过AT指令使其可以发短信(也可测试打电话,本项目用不到),然后在板子中测试,再测试GPS,找到地址(经纬度)数据。
2、测试小车自动循迹。
3、测试小车
GPS模块调试
模块原理
GPS(ATK-NEO-6M GPS)模块
设置好后,模块接收NMEA码并解析出我们需要的数据。
例如:
每个都代表着不同的数据。可以参考:GPS的NMEA码的详细解释定义
具体的模块已经配置好了,我们使用就可以了。
硬件连接
1、给模块供5V电、GND接地。
2、模块接到板子串口1上(模块TX接板子PA10、模块RX接板子PA9)。
代码调试
1、代码要做的就是将这个过程自动化。收集到数据之后自动处理。
2、部分代码如下
void parseGpsBuffer()
{
char *subString;
char *subStringNext;
char i = 0;
if (Save_Data.isGetData)
{
Save_Data.isGetData = false;
u2_printf("**************\r\n");
u2_printf(Save_Data.GPS_Buffer);
for (i = 0 ; i <= 6 ; i++)
{
if (i == 0)
{
if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
errorLog(1);
}
else
{
subString++;
if ((subStringNext = strstr(subString, ",")) != NULL)
{
char usefullBuffer[2];
switch(i)
{
case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break; //??è?UTCê±??
case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break; //??è?UTCê±??
case 3:memcpy(Save_Data.latitude<