毕业设计 - 题目:基于 STM32 的自动泊车系统 -智能小车 自动停车


1 简介

Hi,大家好,学长今天向大家介绍一个 单片机项目

基于 STM32 的自动泊车系统

大家可用于 课程设计 或 毕业设计

🔥 项目分享与指导:https://gitee.com/sinonfin/sharing

1 背景

目前我们所能见到的汽车企业大多数都控制在 L2 级半自动驾驶, 其中包括半自动泊车系统: 传感器技术的组成配合下收集精确的环境信息实现“泊车路径规划” 、 系统进行“车辆控制” 等功能, 在部分自动泊车(高级泊车辅助 APA)系统的辅助下驾驶员可以在监控下实现泊车动作。 现实中, 车辆激增带来的停车问题变得更加复杂, 大城市停车空间有限, 将汽车驶入各式各样的停车位置是每个驾驶员一项必备的技能。 与之相随而来的交通压力、 复杂多样的停车环境、 有限苛刻的停车空间, 停车难成为众多驾驶员的一大难题。 泊车过程中出现的轻微碰撞以及剐蹭事件的频繁发生, 市场需求的增长, 环境检测基础的相对成熟, 推进了自动泊车系统研究的技术发展。

2 设计概要

自动泊车系统(Automated Parking System,简称 APS)是一项属于无人驾驶的重要技术,随着车辆的激增, 汽车自动驾驶技术的不断创新与发展, 自动泊车系统尚未普及, 为降低当下人工停车的难度, 设计了一种基于 STM32F103ZET6 实现自动倒车入库和侧方位停车的智能化小车系统。

该自动泊车系统利用红外光感 HJ-IR2 传感器、 超声波 HC-SR04 模块、 循迹 TCRT5000模块、 标准的 IEEE 802.11nd 的 WIFI 模块组成进行环境检测, 实现了障碍物识别, 并将采集到的数据传送到处理器, 处理器将数据转换为电信号驱动小车的控制 L298N 驱动模块, 这些模块在 Keil uVsion5 编译环境下整合到一起, 在路径规划下对小车进行速度控制和转向控制。

系统根据停车位识别在模拟停车环境下控制小车进行入库操作, 满足了在不同的停车环境下进行智能化自动泊车, 此系统属于嵌入式系统兼容于多数汽车实现侧方位泊车和倒车入库并自行细微调整, 实现更稳定的入库停车。

3 硬件选型

3.1 主控 - STM32

意法半导体公司中的 STM32 系列芯片

在这里插入图片描述
在这里插入图片描述

3.2 电机驱动

为了更真实模拟汽车运作状态, 本设计安装了四个电机, 如下图所示。 本设计通过 PWM 占空比来调节直流电机的转速, 并通过控制前后轮的不同速度完成小车的转向。

在这里插入图片描述
电机用到了主控板的 8 个 IO 口, 通过对电机的高低电平控制使之正反转, 电机分有正负极, 前进时: 先将正极的电平置 1, 负极复位 0; 后退则正极复位 0, 负极置 1; 停止则都复位 0。

电机与芯片管脚配置表
在这里插入图片描述
小车由于左右两边各用一个驱动, 所以 A 和 C 两个电机只需要 C 电机控制, B 和 D电机只需 B 控制, 这里将 D 电机控制脚当电机使能: 将 DUP 和 DDOWN 的电平置 1。

3.3 红外遥控设计

学长设计的系统采用红外遥控来实现对小车的初步控制, 红外线遥控是目前使用最广泛的一种通信和遥控手段, 具有体积小、 功耗低、 功能强、 成本低的优点。 通用红外遥控系统由发射和接收两大部分组成, 应用编/解码专用集成电路芯片来进行控制操作, 发射部分包括键盘、 编码调制、 LED、 红外发送器; 接收部分包括光、 电转换放大器、 解调、 解码电路。

红外遥控器
在这里插入图片描述

红外接收及解码

在这里插入图片描述
相关技术原理:

    1. 引导码: MCU 检测到正确的引导码之后确认接收后面的数据, 以此来保证数据的稳定性和正确性,
    1. 客户码: 区分不同红外遥控设备
    1. 操作码: 客户操作时产生的编码, 通过操作的不同产生不同的码值, 等待红外接收头接收。
    1. 解码: 芯片通过接收到的电平信号, 解析操作码的码值, MCU 在根据码值做出相应动作。

根据遥控器提供的键码, 优先满足小车的基本运动, 前进、 后退、 左转、 右转、 以及停止, 设计算法, 短按则为 200MS 运作, 长按则持续运行。 预留其他按钮进入自动驾驶状态, 即: 循迹模式、 避障模式、 超声波模式、 摄像头模式、 侧方位自动泊车, 倒车入库自动泊车等。

在这里插入图片描述

3.4 传感器部分

3.4.1 循迹模块

在这里插入图片描述
遵循既有的道路现状, 给定小车相关的循迹算法, 基于一个三路循迹和两个二路循迹的循迹模块, 使得小车自动行驶在路劲规划下, 称为循迹技术。

3.4.2 红外避障模块

在这里插入图片描述
红外光电传感器(HJ-IR2), 发射出探测的脉冲, 当在一定距离中探测到物体会重新输入到 MCU 中进行处理, 它相当于一个红外开关, 检测到障碍物输出低电平, 未检测到则反之。 在得知在停车过程中遇到的障碍物可以依据此对小车进行控制避免碰撞, 此为避障功能。

接收管接收到信号之后, 经集成电路进行放大, 会点亮模块的 LED 灯管, 并同时输出给 MCU 一个低电平信号。

3.4.3 超声波模块

HC-SR04 超声波测距可提供 2cm-40cm 的非接触式距离感测功能测距精度可达高到3mm; 模块包括超声波发射器、 接收器与控制电路。 本设计利用超声波传感器来达到对自动泊车中精细调整。 小车在进入自动泊车模式后, 环境检测部分会通过超声波收集左右部掐障碍物的具体位置, 在侧方位泊车中可以利用检测前后车辆的停车距离,倒车入库泊车中可以检测左右车辆的精准距离, 实现更完美的泊车路径规划。 超声波模块如图

在这里插入图片描述

3.4.4 WIFI 视频模块

设计模拟倒车途中的后视摄像头, 将倒车时的情景展示在与上位机的屏幕当中,模拟出更真实的停车环境, 实时监控倒车时的情况, 并通过 WIFI 模块, 在上位机编写好指定代码传送给小车上的 WIFI 模块, WIFI 模块中的芯片进行解码并发送电信号给 MCU进行控制, MCU 根据 WIFI 模块中的信号对小车进行控制。

PC控制软件

软件中的界面基本满足对小车的基本控制, 附带有打开摄像头的指令, 在设置中也可以按照需求编写新指令发送给主控芯片。 操作界面如下图所示

在这里插入图片描述

这里的设计需要注意, 同时开启数据的收发, 根据收到的 WIFI 信号进行判断, 串口 WIFI 解码代码如下:

unsigned char rec_data;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
/* Read one byte from the receive data register */
rec_data = USART_ReceiveData(USART3);
if(start!=0&&rec_data!=0xff) //如果已收到包头并且当前收到的不是包尾
{
buf[start-1]=rec_data; //缓存数据
start++;
}
else if(start!=0&&rec_data==0xff)//如果收到包尾
{
mode[0]=buf[0]; //给状态存储数组赋值
mode[1]=buf[1];
mode[2]=buf[2];
start=0;
mode1=1; //指示主函数循环检测一次
}
else if(rec_data==0xff&&start==0) //如果收到的是包头
start++;
}

4 小车成品展示

在这里插入图片描述

摄像头则安装在车尾处, 可以观察倒车时后视的环境, 也适用于作为图像处理的后续功能推进, WIFI 模块在开发板的下方, 不影响信号的前提下也得到了合理的空间放置。

在这里插入图片描述

5 泊车算法设计

常见的泊车方式有: 侧方位泊车和倒车入库泊车, 本设计根据两种泊车方式设计了不同的算法。

5.1 侧方位泊车

侧方位停车位的设置主要是为了道路的宽度而设置, 机动车驾驶证考试中的科目二就有一项侧方位停车法。 本设计由科目二驾驶中的侧方停车为标准, 侧方位泊车如图所示。

在这里插入图片描述

根据停车的不同场景, 本设计通过收集的环境信息进行了不同的处理, 并作出不同的控制电信号。

如果未扫描到障碍物和相邻小车, 系统主要通过循迹模块对停车线反射的强度不同来定位停车位的具体位置。 具体算法逻辑如流程图所示:

在这里插入图片描述

算法步骤:

  • 1、 按下遥控器按钮平行泊车模式, 开始检测周围环境信息, 如果超声波反射回来的距离小于 10CM 则判断为障碍物, 大于 10CM 则判断为无障碍物。
  • 2、 减速后退直到超声波判断距离大于 10CM 且红外避障无感应。
  • 3、 红外避障有感应则继续后退, 重复(1)(2)步骤。
  • 4、 左循迹模块感应到停车线, 系统收集到此时车辆左转角度, 然后继续左转。
  • 5、 右循迹模块感应到停车线, 系统收集到此时车辆位置信息, 由于小车左转角度还不足, 系统此时再给予一个 200MS 的左转信号。
  • 6、 车辆左转角度已经足够, 停车时的车辆速度不能过快, 修改高电平的占比, 降低速度, 给出一个持续前进的电信号
  • 7、 中循迹模块感应到边缘停车线, 小车停止。
  • 8、 开始摆正车身, 根据左转的角度, 给出相同延时右转信号摆正车身
  • 9、 右转进行时, 对中循迹模块进行判定, 如果收集到电信号, 对小车进行后退调整,然后完成整个系统泊车操作。

关键代码

if(LL_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
auto_flag = 1;
}
CarRight();
}
else if (auto_flag == 1)
{
if(RR_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
CarRight();
delay_ms(6000);
CarStop();
delay_ms(18000);
auto_flag = 2;
}
CarRight();
}
else if(auto_flag == 2)
{
SPEED_DUTY = 10;
if(SEARCH_M_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
CarBack();
delay_ms(6000);
back_time = 0;
back_flag = 0;
auto_flag = 3;
}
CarGo();
}
else if(auto_flag == 3)
{
SPEED_DUTY = 30;
if(back_time <= 600)
{
CarLeft();
if(SEARCH_M_DATA == BLACK_AREA)
{
back_flag = 1;
}
if(back_time == 599)auto_flag = 4;
}
}
else if (auto_flag == 4)
{
if(back_flag == 0)sensor_flag = 0;
else if(back_flag == 1)
{
SPEED_DUTY = 20;
CarBack();
delay_ms(4000);
CarStop();
sensor_flag = 0;
}
}

5.2 倒车入库

倒车入库是多数停车场中的停车建设, 停停车场都有较为规范的停车线规划和停车建设, 对于线条的感应也更容易, 倒车入库示意图如图所示

在这里插入图片描述

算法设计

在这里插入图片描述

算法流程:

  • 1、 按下遥控器按钮垂直泊车模式, 开始检测周围环境信息, 如果超声波反射回来的距离小于 10CM 则判断为障碍物, 大于 10CM 则判断为无障碍物。
  • 2、 减速后退直到超声波判断距离大于 10CM, 且红外避障未感应到障碍物, 开始左转
  • 3、 左循迹模块感应到停车线, 系统收集到此时车辆左转角度, 然后继续左转
  • 4、 右循迹模块感应到停车线, 系统收集到此时车辆位置信息,
  • 5、 车辆左转角度已经足够,调整车身, 左转至车身垂直。
  • 6、 根据车身调整位置, 三路循迹在同一条直线上, 给出前进信号。
  • 7、 倒车入库完成。
void AUTO_Vertical(void)
{
if (auto_flag == 0 )
{
if(obstacle_flag == 0)
{
if(distance_cm < 15 )
{
SPEED_DUTY = 10;
CarGo();
return;
}
else if(distance_cm >= 15 )
{
CarStop();
obstacle_flag = 1;
}
}
if( obstacle_flag == 1)
{
SPEED_DUTY = 30;
CarRight();
if(LL_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
auto_flag = 1;
}
}
}
else if (auto_flag == 1)
{
if(SEARCH_L_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
auto_flag = 2;
}
CarRight();
}
else if(auto_flag == 2)
{
SPEED_DUTY = 10;
CarGo();
if(SEARCH_M_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
CarBack();
delay_ms(8000);
auto_flag = 3;
back_time = 0;
}
}
else if(auto_flag == 3)
{
SPEED_DUTY = 30;
if(back_time >= 12)auto_flag = 4;
if(back_time <= 14)
{
CarRight();
}
}
else if(auto_flag == 4)
{
if(SEARCH_M_DATA == BLACK_AREA)
{
CarStop();
delay_ms(18000);
CarBack();
delay_ms(6000);
sensor_flag = 0;
}
SPEED_DUTY = 10;
CarGo();
}
}

6 测试效果

优先模拟的周围无障碍物的情形, 会通过判断停车线然后根据算法步骤将车停进去车位。 经过多次测试, 小车多次稳定的停入车位, 但若控制者将车驶在与停车位平行的位置, 会导致停车缓慢且容易出错, 车位可供停车的范围需对小车的位置有限制。 运行完侧方位泊车之后小车的位置如图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 最后

🔥 项目分享与指导:https://gitee.com/sinonfin/sharing

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于stm32自动泊车系统是一种智能化的技术应用,通过搭载在车辆上的stm32芯片进行控制。这个系统能够通过传感器获得车辆周围的环境信息,根据获取到的信息计算出最佳的停车方案,并自动控制车辆完成停车过程。 首先,系统会通过声纳或摄像头等传感器获取车辆周围的环境信息,包括障碍物的距离和位置等。这些信息会被传输到搭载stm32芯片的控制系统进行处理和分析。 接着,stm32芯片根据环境信息进行计算,确定最佳的停车方案。通过算法的运算,车辆可以找到合适的停车位,并规划车辆的轨迹。 然后,stm32芯片将计算出来的控制信号发送给车辆的各个执行机构,如电机、转向器等,来实现车辆自动驾驶。车辆的转向、加速和制动等动作都能够由stm32芯片进行精确控制,以确保车辆能够平稳地完成停车操作。 此外,stm32芯片还可以实时监控车辆周围的动态变化,并根据情况进行相应的调整。例如,如果有其他车辆或行人靠近,系统会及时做出相应的反应,确保停车过程的安全性。 基于stm32自动泊车系统的实现,不仅提高了停车的准确性和效率,也提高了驾驶的安全性。此外,这个系统还能够减少驾驶员的操作负担,提升驾驶的便捷性和舒适性。 总而言之,基于stm32自动泊车系统是一种先进的技术应用,能够实现车辆的自动泊车,提升驾驶的效率和安全性。这个系统的应用前景广阔,有望在未来的智能交通中发挥更大的作用。 ### 回答2: 基于STM32自动泊车系统是一种智能化的技术,能够帮助车辆实现自动停车和出库。该系统使用STM32微控制器作为核心控制单元,结合车载传感器和执行器,实现对车辆的精准控制。 该系统的工作原理是通过车载传感器获取车辆周围环境信息,包括距离、障碍物位置等,并利用STM32进行实时数据处理和分析。系统根据传感器数据,结合预设的停车位置和周围环境地图,计算出最佳的停车路径和角度。同时,系统还能够实时监测车辆位置和周围障碍物变化,并进行自适应调整,以确保安全停车。 在具体操作过程中,用户只需选择停车位置并触发系统系统便会根据环境条件自动调整车辆前进、后退、转向等操作,直到完成停车。同样,当用户需要车辆出库时,系统也能自动识别车辆位置并规划最佳出库路径。 基于STM32自动泊车系统具备一系列优势。首先,它能够提高停车安全性,避免驾驶员因为视野限制或操作不当而导致的事故。其次,该系统能够减少停车时间,提高车位利用率。此外,由于系统智能化,能够适应不同车型和环境变化,提供更好的用户体验。 总而言之,基于STM32自动泊车系统是一种高效、安全的智能车辆停放解决方案,为驾驶员提供便利与安全,为城市交通提供更好的管理和规划手段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值