基于Matlab和Arduino的智能循迹小车的设计.docx
《基于Matlab和Arduino的智能循迹小车的设计.docx》由会员分享,可在线阅读,更多相关《基于Matlab和Arduino的智能循迹小车的设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于Matlab和Arduino的智能循迹小车的设计
工业自动化学院
《智能玩具及机器人专业实训》报告
(201-201学年第学期)
课程实训题目:
智能寻迹小车的设计
姓名:
学号:
班级:
********
时间:
成绩:
一、课程设计性质和目的
智能玩具及机器人专业实训是《智能玩具设计》课程与实验结束后的一门综合性实践课。
所选题目《智能寻迹车》紧密结合所学的主要内容,加深巩固所学知识,同时对所学内容进行扩展,有一定的深度和广度,能充分发挥学生的能动性和想象力。
通过设计、安装、调试等一系列环节的实施,提高学生利用matlab进行控制系统设计的能力。
二、课程设计的内容及要求
设计要求可分为两大部分:
寻迹车的设计和控制算法的设计。
1、寻迹车的设计
(1)组装寻迹小车底盘;
(2)光电传感器电路设计;
(3)电机驱动器、控制器、电池组、电源、传感器布局。
硬件平台:
ArduinoMEGA2560、智能车底板、轮子、轴联器、L支架、金属
减速电机、智能车万向轮、直流电机驱动器、移动电源、电池组、光电传感器等。
2、控制算法的设计
(1)根据功能要求确定控制思路;
(2)在matlab/simulink平台中建立寻迹车控制系统模型。
软件平台:
WindowsXP;
MatlabR2013a;
SimulinkSupportPackageforArduinoHardware;
ArduinoIDE。
三、课程设计的进度及安排
表1任务安排表
序号
项 目
时 间
1
布置课程设计任务、讲授控制方法和要求
半天
2
Arduino、raspberrypi学习
半天
3
智能寻迹车组装
半天
4
Matlab软件平台学习
半天
5
寻迹车控制算法设计
半天
6
跑道设计、控制算法调试
半天
7
控制算法优化
半天
8
控制系统整体调试
半天
9
检测验收、写课程设计报告
半天
10
寻迹车竞赛、提交课程报告、答辩
半天
四、设计所需设备及材料
表2材料清单
序号
名称
数量
1
Arduino Mega2560
1
2
小车底板
1
3
万向轮
1
4
L298N电机驱动模块
1
5
电机支架
2
6
直流减速电机
2
7
联轴器
2
8
轮胎
2
9
ST188
2
10
470欧电阻
2
11
10K电阻
2
12
面包板
1
13
M3铜柱
8
14
M3螺丝
20
15
M3螺母
12
16
9V电池
1
17
导线
若干
1.传感器原理
根据反射式红外光电传感器的原理和内部结构,我们可以设计如图4.1所示的电路,电阻主要起限流作用,电阻值常设置为:
R1=470Ω,R2=10kΩ。
如果接收管接收到反射回来的红外线,红外接收头导通,E管脚输出高电平,接近VCC;如果没有接收到反射回来的红外线,红外接收头不导通,E管脚输出低电平,接近GND。
按原理图进行焊接,实物如下图4.2所示,在通电的情况下可以看到红外线,即白灯亮紫色,即说明焊接成功。
图4.1ST188电路图4.2焊接完成的传感器
2.L298N电机驱动模块
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
内含两个H桥的高电压大电流全桥式驱动器,采用标准逻辑电平信号控制;该芯片可以驱动两台直流电机。
L298N的工作原理是内部有两个H桥,分别控制两个电机,H桥的工作原理如下图4.3所示,当IN1通电时,电流从正极经过Q1到电机再到Q4,最后回到负极,此时电机正转;当IN2通电时,电流从正极经过Q3到电机再到Q2,最后回到负极,此时电机反转。
IN1和IN2不能同时通电,否则会短路。
接线方式如下图4.4所示。
图4.3H桥驱动原理图4.4L298N接线图
五、设计思路及原理分析
小车在贴有黑线的路面上行驶, 不断地向地面发射红外光,利用红外线在不同颜色的物理表面具有不同的反射性质的特点,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。
当红外接收探头接收到信号后,再将信号送到arduino,由arduino内部程序来控制电机,由电机完成小车的前进,转向。
因此,可根据接收到的反射光的强弱来判断黑线。
整个路系统分为检测、控制、驱动三个模块。
首先利用光电对管对路面信号进行检测,把检测到的光信号转化为电信号,送给arduino进行处理,然后arduino输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。
六、控制系统建模
我们要使用Matlab对arduino完成控制系统的搭建,我们要进入以下三个步骤:
安装arduino支持包、控制逻辑分析、simulink建模。
1.安装arduino支持包
我们要在Matlab下面进行对arduino的控制建模,首先要安装arduino的支持包,点击任务栏下的【AddOne】->【GetHardwareSupportPackages】,如下图6.1所示:
图6.1GetHardwareSupportPackages
然后会出现如下图6.2所示,有两种安装方法,一种在线安装,一种是离线安装。
由于受到网络环境的限制,我们选择离线安装的方式,选择【Folder】选项,然后点【Next>】,出现如下图6.3所示界面,点【Next>】,出现如图6.4所示界面,点【Login】,我们需要在上注册一个账号,我们登陆以后会看到图6.5所示,勾选同意,点【Next>】,然后会跳转到图6.6,点【Next>】,然后进入图6.7界面,点【Intall】,图6.8是安装中的截图,如出现图6.9所示界面,即安装成功,可以在simulink库上看到arduino相关的库。
图6.2安装方式图6.3安装路径
图6.4登录账号图6.5同意协议
图6.6安装授权图6.7安装
图6.8安装过程图6.9安装完成
2.控制逻辑分析
首先,我们要确定小车有三种运动状态:
直走,左转和右转。
首先小车是放在直道上,左右两个传感器均没有感应到黑线,此时直走。
接下来就是转弯,这里要分两种情况:
左转弯和右转弯;以左转弯为例,此时左边的传感器就会感应到黑线,控制电机右轮速度大于左轮速度进行左转,直到右边的传感器感应到黑线,否则一直执行左转的程序,这样是为了防止转弯的半径小于跑道弯道的半径时,能够转回来;假如跳出左转循环的结束条件为当左边的传感器感应不到黑线,则会出现两种情况:
一种是小车的转弯半径小于跑道的弯道半径,小车转回跑道;另一种是小车的转弯半径大于跑道的弯道半径,此时左边传感器也感应不到黑线,但是此时小车已经跑出跑道了。
右转弯同理。
程序流程图如下图6.10所示。
图6.10程序流程图
3.Simulink建模
根据我们分析出来的控制逻辑进行simulink的控制系统模型建立,我们先打开之前安装好的arduino支持包,可以看到里面有模拟信号输入,PWM输出,数字信号输出,串口等模块。
如下图6.11所示:
图6.11simulink支持包
点击任务栏中的File,新建一个Model,把我们要用的功能模块拖出来,然后再根据控制逻辑进行相应的连线,完成后如下图6.12所示:
图6.12simulink控制模型
下面的Chart中的控制逻辑,在上一节有详细的介绍,在这里不太过多讲述。
图6.13控制系统逻辑
七、调试运行
把整个控制系统搭建完成之后,我们就要就行相应的调试,首先我们要下载arduino的驱动程序,然后设置成在线模式,对各个数据进行采集、查看、分析和总结,接下来进行修改,再进行观察,重复以上步骤,直到调试完成。
1.测试传感器
在测试传感器之前,我们首先设置成在线模式,这样我们才能对数据进行实时察看,我们打开【Tools】->【RunonTargetHardware】->【Options…】,进入如下图7.1所示界面,勾选上【EnableExternalmode】,就可以进入在线调试模式了。
图7.1在线模式设置
下面是传感器采集黑线和地板时的波形图,把传感器从右边感应到黑线,都没感应到,左边感应到,都没感应到……之间来回切换,采集到的数据如下图7.2所示,根据波形图可以得知:
黑线的值在300之间,地板的值在935之前,故阀值采集两者之间的值:
640。
图7.2传感器采集波形图
2.电机驱动模块的调试
把电机驱动模块按上面的接线图接好,接通电源。
把IN1和IN3接高电平,IN2和IN4接地,此时两个轮子都是反转;再把IN1和IN3都接地,IN2和IN4都接高电平,此时两个轮子都是正转。
说明两问题:
一、电机和电机驱动模块都可以正常工作,没有问题;二、IN2和IN4应该接PWM输出引脚,这样才可以保证小车向前行驶。
3.整体调试
取消在线模式,把程序下到arduino中,接上电源,把小车放到跑道上进行调试。
第一次调试的时候,小车很容易在弯道的时候跑出跑道,应该是转弯时候的差速给的不够,把左转时右轮的速度和右转时左轮的速度加大。
把修改后的程序烧进去,进行第二次调试,小车完整地跑完了几圈,没有跑出跑道的情况,调试完成。
八、结果及分析
在调试红外传感器的时,上电之后要先用手机的摄像头看一下红外是不是有亮灯,因为摄像头可以看到红外光,而人的肉眼看不到,如果上电红外没有亮灯,这时候要检查一下电源有没有接错,然后再去排查电路是否有问题,不要出现电源没接上,就以为是电路出问题了,结果一通检查,发现原来没有上电。
在调试电机驱动模块的时候,要把5V电源也接上,否则电机驱动模块不受控制,出现无法工作的情况。
然后再上电,给高低电平进行测试。
先不要给PWM进行电机驱动模块的测试,因为多了一个PWM之后,就多了一个不确定因素,无法确定是电机驱动模块出了问题,还是PWM输出信号有问题,增加调试难度。
直接给高低电平,相当于占空比为100%,如果此时电机还是不工作,那就要检查接线是否正确,最后检查电机驱动模块是否有问题。
在整体调试的时候,要把在线模式给取消掉,因为在线模式掉电后,程序会消失,不会保存在芯片的Flash上。
调试过程中,要细心观察现象,然后进行分析,再对程序进行修改,不要盲目修改,否则会适得其反。
九、心得体会
经过这一个星期的课程设计,感谢唐老师教会了我一种新的方法去进行控制系统的开发和在我调试出现问题的时候对我的悉心指导。
以前我们进行开发的时候,我们要先知道硬件的一些基本的结构,如知道硬件的晶振频率是多少,然后经过PLL倍频之后,内部的时钟频率又是多少,高速总线AHB的工作频率是多少,上面挂着哪些外设,低速总线APB又是多少,上面又挂着哪些外设,初始化时候的时候要开哪个时钟。
根据这个来计算参数,用来设置PWM的输出频率,AD采集的采样频率等,然后再看芯片的数据手册,按照寄存器的配置方式进行配置。
配置完成之后,我们还要对我们的配置进行验正和测试,然后再进行控制算法的分析和搭建,最后再转换成编程语言进行控制。
大量的时间都花费在了写驱动程序,测试驱动程序上,而且搭建出来的控制逻辑不能像图形化那样清晰可见,也不能进行在线调试,如果想要进行在线调试,还要编写串口驱动程序,制定相应的串口通信协议,在电脑端还要编写相应的上位机程序进行显示,也不知道程序运行到了哪一步,到底是哪里出现了问题,开发过程非常的复杂。
但是这次我们使用simulink的方式来搭建控制逻辑,节省了大量的去搭建底层代码的时候,如自己写AD采集驱动,PWM驱动程序,串口驱动程序的时间,也不用去编写上位机程序,也不用自己去制定串口通信协议,可以直接调用示波器模块来观察波形,打开Chart模块,可以直接看到图形化的控制逻辑,而且在线调试的时候,也可以看到程序运行到了哪一个状态,出现什么问题一目了然,可以马上进行修改,这样我们可以把更多的精力放在核心的建控制逻辑上面,大大地提高了开发的效率和成本。
十、参考文献
[1]陈吕洲.Arduino程序设计基础[M].北京:
北京航空航天大学出版社,2015:
30
[2]王正,林王琪.MATLAB/Simulink与控制系统仿真[M].上海:
电子工业出版社,2008:
16
[3]薛定宇.基于MATLAB/Simulink的系统仿真技术与应用[M].北京:
清华大学出版社,2011:
20
[4]陈杰.MATLAB宝典[M].重庆:
电子工业出版社,2007:
34
[5]葛哲学.精通MATLAB[M].桐城:
电子工业出版社,2008:
56
十一、致谢
感谢唐老师给了我们足够的时间让我们自己去思考,去设计,去学习和去完成这次的课程设计任务,也感谢唐老师在我调试过程中遇到问题时对我的悉心指导。
最后感谢同学们在焊接的时候对我提供的帮助。
十二、附录
图12.1小车正面照图12.2小车背面照
图12.3小车在直道上图12.4小车跑出轨道
图12.5小车顺利过弯