避障小车课程设计报告书.docx
《避障小车课程设计报告书.docx》由会员分享,可在线阅读,更多相关《避障小车课程设计报告书.docx(19页珍藏版)》请在冰豆网上搜索。
避障小车课程设计报告书
1.绪论
1.1课题背景
机器人是先进制造技术和自动化装备的典型代表,是人造机器的“终极”形式。
它涉及到机械、电子、自动控制、计算机、人工智能、传感器、通讯与网络等多个学科和领域,是多种高新技术发展成果的综合集成,因此它的发展与众多学科发展密切相关,代表了高科技发展的前沿。
随着电子技术的不断发展人们发明了各式各样的具有感知,决策,行动和交互能力的机器人,自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等多个领域。
近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式,随着它在人类生活领域中的应用不断扩大,将会给人们的生产生活带来了巨大的影响。
在国外机器人的发展有如下趋势。
一方面机器人在制造业应用的围越来越广阔,其标准化、模块化、网络化和智能化的程度越来越高,功能也越来越强,并向着技术和装备成套化的方向发展;另一方面,机器人向着非制造业应用以及微小型方向发展,如表演型机器人,服务机型器人,机器人玩具等。
国外研究机构正试图将机器人应用于人类活动的各个领域。
在我国机器人主要应用于工业制造领域,我国工业机器人现在的总装机量约为120000台,其中国产机器人占有量约为1/3,即40000多台。
与世界机器人总装机台数7500万台相比,中国总装机量仅占万分之十六[1]。
对中国这样一个拥有13亿人口的大国来说,仅在机器人数量上就和发达国家有着很明显的差距。
因此大力发展我国的机器人事业刻不容缓。
智能小车可以理解为机器人的一种特例,它是一种能够通过编程手段完成特定任务的小型化机器人。
与普遍意义上的机器人相比智能小车制作成本低廉,电路结构简单,程序调试方便,具有很强的趣味性,为此其深受广大机器人爱好者以及高校学生的喜爱。
全国大学生电子设计竞赛每年都设有智能小车类的题目,由此可见国家对高校机器人研究工作的重视程度。
1.2课题的目的和意义
本题目设计的是具有自动避障功能的智能小车,其设计思想与一些日常生活迫切需要的机器人(如测距机器人,搜索机器人,管道探伤机器人)类似。
由于采用了超声波传感器,它不受光照强弱和能见度的影响,能耗低,灵敏度高,即使在较复杂的环境也可以工作。
智能小车系统的设计采用了模块化的设计方法,电路结构简单,调试方便,有很大的扩展空间,稍加改动便可应用于实际生产生活中,也可作为高校学生以及广大机器人爱好者学习研究使用。
1.3设计要求
1.小车可以检测到前方障碍物
2.小车可以自动躲避障碍物
3.小车能够显示距障碍物的距离
1.4主要技术指标
工作电压:
5V
工作电流:
30mA典型,50mA最大
工作频率:
38.5KHz
最大探测距离:
1.8m
最小探测距离:
3cm
输入触发器:
上升沿触发
回波脉冲:
正TTL高电平脉冲宽度
下一次测量的延时:
20ms
2.设计方案
2.1总体方案概述
本小车使用一台AT89S51单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,并且用数码管实时的显示出来,在小车与障碍物的距离小于安全距离(用软件设定)时,小车会发出“在距您车前方x(数码显示的实时距离)米的地方有一障碍物,请您注意避让”的语音提示,并且拐弯,以避开障碍物,同时会点亮相应侧边的发光二极管作为提示信号。
在避开障碍物后,小车会沿直线前进。
本系统设计的简易智能小车分为几个模块:
单片机控制系统、超声波路面检测系统、前进、转弯控制电机以及方向指示灯系统。
它们之间的相互关系如下图1所示。
2.2系统硬件电路设计方案
系统硬件电路的设计采用了模块化的设计方法,系统硬件电路由超声波避障模块,单片机最小系统模块,显示模块,电源模块,电机驱动以及声光报警模块,电源模块七部分组成,各模块即可组合联调也可单独使用。
如图2所示为智能小车硬件设计方框图。
电源电路
超声波发射电路
A
T
8
9
S
5
1
单
片
机
距离显示电路
电机驱动电路
超声波接收电路
图2智能小车硬件设计方框图
2.3电机模块
P1_0控制右边的伺服电机,P1_1控制左边的伺服电机,如下图3。
图3电机引脚连接图
控制电机运动转速的是高电平持续的时间。
高电平持续时间为1.5ms(零速度点)时,电机静止(标定以后),如图4。
图4电机转速为零的控制信号时序图
注:
标定方法:
通过发送一个校准信号到伺服电机,连续旋转伺服电机的零位信号为1.5ms。
如果电机还没有进行零点标定,如图3所示,用螺丝刀轻轻调节马达上的电位器,直到马达停止转动。
图5伺服电机的标定
高电平持续时间为1.3ms时,电机顺时针全速旋转,如图6。
图61.3ms的控制脉冲序列使电机逆时针全速旋转
高电平持续时间1.7ms时,电机逆时针速旋转,如图7。
图71.7ms的控制脉冲序列使电机顺时针全速旋转
高电平持续时间越靠近零速度点,速度越小,远离零点越大速度越大。
通过控制脉冲序列,可以实现小车的加速、减速、原地转弯、绕轴旋转、左转、右转等一系列的运行动作。
2.4超声波模块
VCC接+5V,GND接VSS,SIG接P15,如图8。
图8超声波模块
超声波是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生震动产生,在碰到杂质或分界面会产生显著反射形成反射回波,超声波传感器就是根据超声波在物体界面上反射的反射、散射特性检测物体的存在与否。
超声波模块可以提供无接触的测量,从3厘米到1.8米的距离测量,可以用来辨别障碍物。
图9超声波模块时序工作图
如图9所示,从SIG管脚输出触发脉冲Tout后,模块自动发射8个40kHz的超声波,紧接着把SIG置高电平,直到收到回声后才把SIG置低,如果超时,则模块自动复位。
模块工作频率:
38.5KHz,即工作周期约26ms,而整个模块实现一次测量的时间围为tout+tholdoff+tin,约为0.8ms到19.3ms。
距离distance=time*Cair/2,其中Cair为超声波在空气中的传播速度,由于受空气温度影响,Cair=331.5+0.6*Tc;SIG的脉冲宽度即为超声波发射和接收的时间差time,围115us到18.5ms。
将数据代入计算出distance的围恰好在3cm到1.8m,满足技术指标。
2.5整体效果图
图10整体效果图
3.设计思路
3.1学习熟悉基本模块驱动
(1)实现小车前进、绕轴旋转转等基础运行动作。
/*小车前进*/
voidforward()
{
intj;
for(j=0;j<20;j++)
{
re=1;
delay_nus(1300);
re=0;
delay_nus(20000);
le=1;
delay_nus(1700);
le=0;
delay_nus(20000);
}
}
/*小车原地右转90度*/
voidright90()
{
intj;
for(j=0;j<17;j++)
{
re=1;
delay_nus(1640);
re=0;
delay_nus(20000);
le=1;
delay_nus(1700);
le=0;
delay_nus(20000);
}
}
/*小车原地左转90度*/
voidleft90()
{
intj;
for(j=0;j<17;j++)
{
re=1;
delay_nus(1300);
re=0;
delay_nus(20000);
le=1;
delay_nus(1360);
le=0;
delay_nus(20000);
}
}
/*小车原地转180度*/
voidright180()
{
intj;
for(j=0;j<30;j++)
{
re=1;
delay_nus(1300);
re=0;
delay_nus(20000);
le=1;
delay_nus(1360);
le=0;
delay_nus(20000);
}
}
(2)超声波传感器驱动的测距子程序。
voidgetx(unsignedchara)
{
TH0=TL0=0;
if(a)
{
Sin=0;
Sin=1;
delay_nus(10);
Sin=0;
}
while(Sin);
while(!
Sin);
TR0=1;
while(Sin);
TR0=0;
LTime=TL0;
HTime=TH0;
Time=HTime*256+LTime;
Dis=Time/(2*29);
}
3.2总体方案
采用状态机模型,定义state=1为前行状态,state=2为左转状态,两状态转换条件为distance满足一定壁障围,所以测距程序宜嵌入两状态中编写,如图9。
另外测距后进行显示,可以嵌入测距程序。
图11整体方案--状态机模型
3.3电机驱动与测距的结合方法
考虑到电机是靠高电平驱动的,低电平的时间对于驱动电机是无用的,可以用定时器控制低电平时间,让测距程序插入电机驱动程序的低电平时间(取代延时函数),从而节约了单片机等待时间,使单片机在这段低电平时间执行完测距程序后可以执行其他程序(在最后扩展显示模块程序时,确实发现了这样做的方便之处)。
这里超声波模块实现一次测距的时间围约为0.8ms到19.3ms,所以不妨设置定时器定时30ms。
测距程序插入电机驱动程序的另一好处是可实现小角度动态旋转壁障,而不是旋转固定角度。
另外,定时器控制固定的低电平时间有利于小车的稳定运行。
因为若不这样(即低电平时间=固定的延时+不确定的测距时间),在壁障距离以外时,小车则会因为障碍物的越来越近而速度越来越快,无法输出稳定的速度。
具体时序图如下(这里能体现一个周期的运行):
图12电机驱动与测距结合时序图
是
否
是
否
初始化
驱动电机
利用定时器中断每30ms发送一个触发信号
收到回波信号
计算障碍物距离
障碍物距离小于10cm
驱动电机转向
图13程序流程图
3.4系统软件流程图
本设计系统软件采用模块化结构,由主程序﹑定时子程序、电工及控制子程序(前进、原地左转、原地右转)、测距子程序构成。
主程序流程图如图13所示。
其中:
避障中断服务子程序完成对超声波探测器产生的外部中断进行处理,如果超出预定的危险距离就左转进行避障。
3.5存在的问题及解决办法
程序编写完毕后,小车无法启动,经最终排查认为,小车电机需要先输入多个脉冲来帮助小车启动,我将这段程序称为过渡段。
添加过渡段后,拿起小车,轮子能按规定动作运行,但一放到地上,就出现无法运行或运行一小段就停止的现象,这说明电机负载能力有限,应有意识增大电机高电平时间,增加驱动力。
另外,四个阶段的衔接过程都出现过轮子突然停止转动的情况,其中在前进与向左转状态切换时最易出现该情况。
可能是电机在不同转向和转速的突然变化,外加小车的重量作为负载,导致电机无常运行。
指导方法是尽量在每个阶段让轮子的速度变化不很明显,平滑过渡。
经过多次调试,修改数据,得到较好的壁障效果。
修改数据如表1
表1调试数据表
状态state
运行阶段
过渡段脉冲个数i
脉冲高电平时间
脉冲间隔时间/ms
左轮
右轮
1:
前进
过渡段
5
1600
1400
运行段
30ms
1600
1400
2:
左转
过渡段
50
1450
1450
运行段
30ms
1450
1450
注:
过渡段脉冲间隔为20ms
4.设计结果及质量评价
小车在比较平坦的地面运行良好。
根据具体实际情况,数据表中的一些数据可以适当修改:
左转过渡段脉冲个数和两轮转速共同决定旋转的最小角度(数学公式不予推导)。
理论上希望两个过渡段脉冲个数越少越好,这样可以提高小车行进过程中的探测分辨率;但是实际上过渡段脉冲个数减少到一定程度将导致小车难以启动。
所以这两点需要根据情况折中考虑。
注意每个阶段向下一阶段转换的过程尽量保证车轮转动情况改变不是很大,否则可能导致程序运行过程中轮子突然停止。
考虑到仅仅是壁障需要,我将程序仅设置了左转,转角可在小车运行时自行调整,这样避免了右转程序的编写。
但是如果遇到了狭窄的道路,由于小车长度尺寸和宽度尺寸的限制,小车大角度左转可能难以进行。
所以改进方案就是编写一段小车左右探测而且角度可自行调节的智能程序。
最后阶段将调试好的小车从平滑的瓷砖地面换成寻迹赛道地面(泡沫感),在小车状态转换时出现了轮子突然停止现象,可见小车电机高电平时间还要考虑运行的地面条件。
5.原件清单
序号
元件名称
元件
数量
参数
1
AT89S51单片机
U1
1
——
2
电源插座
J1
1
PWR6V
3
电阻
R1~R2
2
10kΩ
4
晶振
Y1
1
11.0592MHz
5
电机接口
P1,P2
2
排针
6
超声波模块接口
P5
1
排针
7
扬声器接口
P4
1
排针
6.应用前景
本智能小车系统最诱人的前景就是可用于未来的智能汽车上了。
当驾驶员因疏忽或打瞌睡时这样的智能汽车的设计就能体现出它的作用。
如果汽车偏离车道或距障碍物小于安全距离时,汽车就会发出报警,提醒驾驶员注意,如果驾驶员没有及时作出反应,汽车就会自动减速或停靠于路边。
这样的小车还可以用于月球探测等的无人探月车,帮助我们传达月球上更多的信息,让我们更加的了解月球,为将来登月做好充分准备。
这样的小车在科学考察探测车上也有广阔的应用前景。
在科学考察中,有许多很危险且人们无法涉足的地方,这时,智能科学考察车就能够派上用场,在它上面装上摄像机,代替人们进行许多无法进行的工作。
7.心得体会
在大学的学习生活中,课程设计是不可缺少的一部分。
在课程设计期间可以把在学校学到的专业知识应用到实际当中。
在理论与实践相结合的时候,能够更快更好的体会到理论的精髓所在,体会到理论与实践的区别。
从而巩固自己所学的知识,增强发现问题、分析问题、解决问题的能力。
从而做到理论与实际的融会贯通。
课程设计是学生大学学习很重要的实践环节。
课程设计是每一个大学毕业生必的必修课,它不仅让我们学到了很多在课堂上根本就学不到的知识,还使我们开阔了视野,增长了见识,为我们以后更好把所学的知识运用到实际工作中打下坚实的基础。
通过生产课程设计使我更深入地接触专业知识。
课程设计对我们来说不是一个陌生的词语,但与以往的认识课程设计不同的是,这次是真正地用自己的双手来将课本上学到的知识付诸于实践,用自己的耳朵去聆听课堂上学不到的东西,用自己的嘴去询问老师不懂的问题。
这对于我们——即将步入社会的大三学生来说是至关重要、不可或缺的一个环节。
通过这次课程设计,通过实践,使我学到了很多实践知识。
所谓实践是检验真理的唯一标准,要想把一件事情做好,光是看理论知识是远远不够的,自己动手往往能达到事半功倍的效果,这些往往是我们在学校很少有机会接触,或者很少注意的,但又是十分重要基础的知识。
我坚信此次的认识课程设计,所获得的实践经验对我终身有益,在我今后的学习中以至于今后的工作中都将不断的得到验证,我会不断的理解和体会课程设计中所得到的知识,在未来的学习和工作中,利用他们或是学习或是创造,充分展示自我的个人价值和人生价值,为实现自我的理想和光明的前程努力。
附录一参考文献
[1]超声波说明书28015-PING-v1.6,详见.parallax.
[2]毅刚、喜元、宇单片机原理及应用(第二版)高等教育2009
附录二程序代码及注释
#include
sbitre=P1^0;
sbitle=P1^1;
sbitSin=P1^5;
unsignedintDis;
unsignedintTime;
unsignedintHTime;
unsignedintLTime;
//计时器初始化程序
voidIO_init()
{
EA=1;//开中断
TMOD&=0xf1;//选择计数器计数方式为1
TMOD|=0x01;
TH0=TL0=0;
}
//延迟函数
voiddelay_nus(unsignedinti)
{
i=i/10;
while(--i);
}
//小车前进程序
voidforward()
{
intj;
for(j=0;j<20;j++)
{
re=1;
delay_nus(1300);
re=0;
delay_nus(20000);
le=1;
delay_nus(1700);
le=0;
delay_nus(20000);
}
}
//小车右转九十度
voidright90()
{
intj;
for(j=0;j<17;j++)
{
re=1;
delay_nus(1640);
re=0;
delay_nus(20000);
le=1;
delay_nus(1700);
le=0;
delay_nus(20000);
}
}
//小车左转九十度
voidleft90()
{
intj;
for(j=0;j<17;j++)
{
re=1;
delay_nus(1300);
re=0;
delay_nus(20000);
le=1;
delay_nus(1360);
le=0;
delay_nus(20000);
}
}
//小车转180度
voidright180()
{
intj;
for(j=0;j<30;j++)
{
re=1;
delay_nus(1300);
re=0;
delay_nus(20000);
le=1;
delay_nus(1360);
le=0;
delay_nus(20000);
}
}
voidgetx(unsignedchara)
{
TH0=TL0=0;//将计数置零以免造成计数误差
if(a)//发射超声波
{
Sin=0;
Sin=1;
delay_nus(10);
Sin=0;
}
while(Sin);
while(!
Sin);
TR0=1;//开启计数器
while(Sin);//等待接收超声波信号,接收到同时将SIG信号置低电位
TR0=0;//测量高电平时间
LTime=TL0;
HTime=TH0;
Time=HTime*256+LTime;//根据高电平时间计算小车与障碍物距离
Dis=Time/(2*29);
}
voidmain()
{
IO_init();?
、//对计数器进行初始化
while
(1)
{
getx
(1);//测距
//对距离进行判断,大于十厘米继续前进
if(Dis>=10)
{
forward();
}
//小于十厘米,则进行小车转弯处理,直至避开障碍物
else
{
left90();
getx
(1);
if(Dis>=10)
{
forward();
}
else
{
right180();
getx
(1);
if(Dis>=10)
{
forward();
}
else
{
right90();
}
}
}
}
}