ionicons-v5-f

基于STM32的迷宫智能车设计

实验题目:基于 STM32 的走迷宫智能车设计

1. 课程简要信息

1)课程名称:《电类创新实践训练》
2)课程学时:24学时
3)项目学时:24学时
4)适用专业:电类专业(电子,计算机)
5)学生年级:本科一年级,下学期

2. 实验内容与任务(限 500 字,可与“实验过程及要求”合并)

本课程是一门前导实践训练课,类似于大学生创新创业训练。因此项目设置应涵盖后续课程知识点,且不能太难,要符合本科一年级的知识定位,同时项目要有启发性,趣味性。

综上,课程设计了模块化方式搭建自动走迷宫智能车项目。项目要求学生利用网络平台购买的开源散件(STM32开发板、L298N电机驱动模块、光电传感器模块、电机、电池仓、电池)搭建智能车,完成智能车走迷宫任务。在实验讲解和实际项目验收中,引出后续课程知识点。如STM32程序编写学习引出《嵌入式系统设计》 、《计算机组成原理》 、《计算机系统机构》课程知识点;L298N 电机驱动模块学习引出《电路理论》 、《模拟电子线路》 、《数字逻辑》课程知识点;粘贴不同宽窄的胶带导致小车行走不稳问题引出《自动控制原理》的 PID 课程知识点,走迷宫算法学习引出《数据结构》 、《算法分析与设计》 、《人工智能》课程知识点。

项目考核验收分为基础智能车验收和高级智能车验收。基础版本胶带宽窄固定,迷宫不包含“回”字形等回路。高级版本胶带宽窄不一,且包含不同回路。不同版本考核验收的规定可培养学生的勇于挑战、勇于竞争、力争上游的精神,充分调动引导他们去思考,去查询文献,去自主学习后续课程的部分知识。无法及时在课程中解决的问题,课程教师会指出在后续哪门课程会给出解决方法,使学生带着问题完成大学四年学习。

3. 实验过程及要求(限 300 字)

1)学生分组,2人一组;
2)学习和掌握 Keil 软件的使用方法;
3)学习 STM32 的 GPIO、Timer 定时器的工作原理及编程方法;
4)学习和实现基于 GPIO 的光电传感器数据读取;
5)学习 L298N 电机驱动模块的原理及使用方法;
6)学习和实现基于 L298N 的直流电机控制程序编写;
7)综合光电传感器数据读取与直流电机控制程序实现智能车的巡线;
8)通过查询文献,网络学习等方式确认本组走迷宫的算法;
9)提供初级版和高级版的验收场地;
10) 智能车的迷宫行走反复测试,更新算法,提高完成速度,挑战高级场地;
11) 集中验收,按照完成度和完成速度打分;
12) 撰写设计总结报告,并通过分组演讲与讨论,学习交流不同解决方案的特点。
13) 教师总结,对学生无法解决的共性问题给与简单讲解,指出知识点后续归属课

4. 相关知识及背景(限 150 字)

项目背景:

本课程是面对本科一年级学生开设的一门解决工程实际问题的必修课程。面对迈入大学不久的学生来说,高中到大学的学习方式会出现很大的变化,大学的最大特点是自主学习能力务必要加强,再也不能像中小学那样,只需要跟着老师的步调即可。而自主学习是建立在乐学、爱学基础上,只有学生喜欢干某件事,才有可能自主地去做,强迫是不可能产生自主的,本项目是针对如上背景进行教学设计的。

相关知识:

1)STM32 基本原理(GPIO、Timer)
2)Keil软件的安装与使用
3)STM32 GPIO 的原理与编程
4)STM32 PWM 的原理与编程
5)STM32 定时器的原理与编程
6)电机驱动模块的原理与使用
7)红外巡线传感器的原理与使用
8)自动走迷宫–左手摸墙法则介绍
9)PID算法介绍
10) 人工智能走迷宫

5. 实验环境条件

硬件类:

1)智能车底盘一个;
2)STM32开发板一块;
3)Jtag仿真器一个;
4)18650 电池 2 节;
5)18650电池仓一个;
6)L298N电机驱动模块一个;
7)红外巡线传感器若干;
8)杜邦线若干;
9)不同宽度的黑胶带若干。

软件类:

1)Keil uVision5 嵌入式系统开发工具软件。

6. 教学目标与目的(限 150 字)

1)激发学习兴趣,培养学生编程思维;
2)掌握STM32的原理、红外传感器工作原理、电机驱动模块工作原理及实际项目运
用;
3)分工合作,培养学生的合作精神;
4)走迷宫的时间要求,可激发学生积极探索,大胆创新的精神。

7. 教学设计与实施进程

本实验的过程是一个比较完整的工程实践工程,需要经历学习研究、方案论证、系统设计、实现调试、设计总结等过程。在实验教学中,应在以下几个方面加强对学生的引导:

教师任务:

1)任务引出:播放机器人走迷宫的视频;
2)任务讨论:讨论机器人为什么可以自主的完成走迷宫操作,如果是人去走这个迷宫,要如何去走,机器人能否按照人的策略去走出迷宫,完成这个机器人走迷宫需要用到哪些知识点,哪些是大家已经具备的,哪些是需要去学习的;
3)方案设计:要求学生分组(2人为一个小组),课后自行查阅资料,分析与讨论如何实现机器人走迷宫,并提交方案论证文档;
4)方案讨论:组织学生讨论提交的方案,沟通提交方案的可行性,难易度。对方案中的知识点进行分类介绍与讨论(使学生了解知识点的难度,掌握知识点需要学习哪些课程);
5)知识讲解:重点讲授难度较高的 STM32 编程,使学生具备基本的 GPIO、定时器、PWM 操作能力;
6)实现调试:学生基于 STM32 开发板,实现巡线小车的框架搭建,巡线程序,迷宫算法编写,并进行测试;
7)集中验收:统一时间,验收作品,记录完成度和完成速度;
8)总结交流:在实验完成后,组织各组学生以 PPT 演讲的形式对本组作品进行讲解,分析本组作品的优点和缺点,并进行组间讨论;
9)报告提交:以个人为单位,记录本次实验过程,总结得失。

8. 实验原理及方案

1)硬件部分:主要分为 5 个模块:传感器模块、电机及驱动模块、电源及稳压模块、主控模块、运行状态显示模块、车体框架。


图 8.1 实验原理图

传感器模块:

如图8.2所示,巡线传感器模块由一个红外发射器和一个红外接收器组成,其中透明色为红外发射器,黑色为红外发射器,如图8.3所示。


图8.2 巡线用红外传感器模块


图8.3 红外线发射器和接收器

由于其经常被用来控制机器人沿着线走,故被称作巡线传感器。检测范围为 1到2厘米。此模块有三个引脚,VCC、GND和 OUT。在 VCC和GND正确连接并通电后,巡线传感器模块的红外发射器会不断向外发射红外光,若红外光被反射(如遇到白色或其他浅色平面),则模块接收器会收到红外信号,OUT 引脚输出数值 1,若红外光被吸收或无法被反射,则接收器收不到红外信号,OUT引脚输出数值 0。因此我们通过OUT引脚的0,1两种状态可以判定巡线传感器模块前方是否为黑色胶带。然后通过多个巡线传感器组合判断,即可控制小车沿黑色胶带行走。

直流电机及驱动模块

单片机GPIO 口的输出电流很小,无法驱动直流电动机。如果想用 GPIO口控制直流电动机,我们需要用三极管放大电流,或者用达林顿管,电路图如图8.4所示。


图8.4 直流电机驱动电路

直流电动机的核心是一个线圈,相当于一个电感。如果三极管突然停止给电动机供电,电感中的电流不会发生突变,因此会对三极管产生反向电压,可能会损伤三极管。因此需要加一个二极管,用来保护三极管。

有了如上的电路,我们就可以控制电机的启动和停止,还可以通过 PWM控制电机的转速,但是我们的智能车在后退和转弯时需要改变直流电机的转向。上述电路并不能满足需求,因此需要一个 H桥电路来完成这个任务,如图 8.5所示。


图 8.5 H 桥电机驱动电路

从图中可以看出如图所示,H桥式电机驱动电路包括 4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。要使电机运转,必须使对角线上的一对三极管导通。例如,当 Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经 Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管 Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动。

本次课程我们使用购买的 H桥模块L298N 来实现电机的驱动和转向、转速控制。如图8.6所示。


图 8.6 L298N 直流电机驱动模块

图8.6中的驱动模块完成 H桥的工作。L298N包含两个H桥电路,1号和2号引脚等于图 8.5 的 VCC 和 GND,4-7 六个引脚中的 IN1-IN2,IN3-IN4 相当于图 8.5的Q1-Q4,8号引脚和 9号引脚接直流电动机输出,此模块可配合单片机完成直流电机的控制。

$\bullet$ 电源及稳压模块

智能车采用2 节18650电池供电,电压为 7.2V,项目所用STM32 开发板需要的供电电压是5V,因此需要将 7.2V降压到 5V,如8.6所示模块中的 78M05 可完成此项功能,其中引脚 3与引脚2一起输出 5V电压。可提供给STM32 开发板供电。

$\bullet$ 主控模块

大部分Arduino 的主控是AVR单片机,Arduino的最主要的优势还是代码封装性高,开发商把大量的代码封装好后放入库中,方便开发者直接调用,用Arduino开发所需的编程语句少,从而降低了软件的开发难度。目前 STM32发展较为成熟,库函数封装较好,即可以选择直接对硬件底层编程,也可以选择直接使用库函数,学生学习可算度较大。从学习的难易程度来说 Arduino 相对于 STM32 容易很多。从学习后获得的知识上来进行比较 Arduino 远远比不上STM32。从安全上来说,用 STM32 做出来的东西想开源就开源,不想开源可以什么都不公布。STM32 围绕产品建设电路需要很多的硬件知识,比较考验自己的知识储备。考虑到电类专业的性质。推荐使用 STM32开发板作为主控芯片。

$\bullet$ 运行状态显示模块

课程要求用2-5个发光二极管,简单显示程序关键点,学有余力的同学可以选择 LED 点阵。

$\bullet$ 车体框架 压克力框架地盘

2)软件部分:主要分为 2 个部分:智能车控制、巡线算法、迷宫行走算法。

$\bullet$ 智能车控制:学习GPIO、定时器和 PWM程序编写,并结合L298N控制智能车行走。

巡线算法


图 8.7 巡线算法示意

如图8.7,讲解两个巡线传感器配合下如何实现巡线操作,通过 8.7d 说明当前算法的缺点,引出PID算法。

迷宫行走算法:

讲解较简单的左手摸墙定则走迷宫,左手摸墙定则(就是在每一个路口,我们都选择最左边的方向,左转的优先级最高,其次为向前,最后为右转,如果实在走进了一个死胡同,那就连续右转两次,回头向后走。稍微研究一下这种走迷宫的方法,我们就发现在这个过程中,事实上我们的左手可以始终放在墙上。)对迷宫进行探索。给出回字形迷宫,左手定则无法完成,引发学生思考。

9. 实验报告要求

实验报告需要反映以下工作:

1)实验需求分析
2)实现方案论证
3)小组分工

4)STM32主要程序流程图

5)测试数据记录
6)问题分析
7)实验创新点说明(是否解决宽窄胶带问题,是否解决“回字问题,如何解决)
8)实验建议:是否还有其他类型的迷宫提供电子附件: STM32 程序$\bullet$ 比赛照片与录像

10.考核要求与方法(限 300 字)

1)统一验收:在同一时间验收,公开公平公正,学生可互相监督;
2)实物验收:按照完成的迷宫等级、完成速度打分,可量化;
3)自主创新:是否能提出创新的迷宫走法
4)实验报告:实验报告的规范性与完整性。

11.项目特色或创新(可空缺,限 150 字)

1)模块化方式搭建自动走迷宫智能车:

既可以较为容易的完成基础版本迷宫智能车,又可以通过对模块原理和使用方式的学习引出后续课程知识点。

2) 项目考核验收分为基础智能车验收和高级智能车验收:

基础版本均可完成,培养学生成就感,高级版较难完成,让学生一方面充满紧迫感自学新知识,一方面对课程留有需要将来才能完成的“遗憾”。

3)相互比拼:

学生可提出自己的个性化迷宫,接受其他队挑战,极大的提高积极性。

12. 开课照片

$\bullet$ 图12.1 智能车作品$\bullet$ 图 12.2 调试现场$\bullet$ 图12.3 验收现场$\bullet$ 图 12.4 任务讨论$\bullet$ 图 12.5 学生报告 1$\bullet$ 图 12.6 学生报告 2黑白二值图转换成相应的信号输出给树莓派小车。


图 12.1 智能车作品


图 12.2 调试现场


图 12.3 验收现场


图 12.4 任务讨论


图2:黑白二值图

这些算法的主要步骤时:

建立围墙(即遍历边界) A*算法寻找最短路 访问最经过的路口坐标点,使用BFS判断该路口类型和下一步调用GoldfishControl的infoRun函数

2.记忆化DFS算法

记忆化DFS算法主要解决带有封闭赛道的线迷宫,如图所示,这种迷宫无法单纯使用左手、右手定则走出,有时候可能会陷入环”的状态,这个时候就需要小车能“记忆”走过的路径。当遇过的路径时,采取一定的措施,这是我们设计算法需要考虑的


图1:带有封闭赛道的线迷宫
图 12.5 学生报告 1
图 12.6 学生报告 2

获奖信息

获奖等级 一等奖
年份 2022

作品信息

学时分类 21-64学时
课程分类 课内:电子系统设计(含单片机及微机系统)、

作者信息

作者
董校,马驰,解永平
学校
大连理工大学
院系
电信学部

电工电子实验教学资源平台 苏ICP备09069895号-19