智能避障小车课程设计.docx
《智能避障小车课程设计.docx》由会员分享,可在线阅读,更多相关《智能避障小车课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
智能避障小车课程设计
智能避障小车课程设计(总18页)
光机电一体化课程设计
题目:
智能超声波避障小车
院别:
机电学院
专业:
机械电子工程(师范)
姓名:
路小娃
学号:
同组人员:
谢嘉玲欧嘉兴
指导教师:
杨永
日期:
2016年6月16日
智能超声波避障小车
摘要
本设计主要有三个模块包括信号检测模块、主控模块、电机驱动模块。
信号检测模块采用超声波测距模块,用以对有无障进行检测。
主控电路采用宏晶公司的8051核心的STC89C52单片机为控制芯片。
电机驱动模块采用意法半导体的L298N专用电机驱动芯片,单片控制与传统分立元件电路相比,使整个系统有很好的稳定性。
信号检测模块将采集到的路况信号传入STC89C52单片机,经单片机处理过后对L298N发出指令进行相应的调整。
我们设计的小车已经实现基本的避障功能。
关键词:
智能避障小车,STC89C52单片机,L298N驱动芯片,信号检测模块,避障
1课程设计内容
1.1项目研究的背景及意义
智能作为现代社会的新产物,是以后的发展方向,他可以按照预先设定的模式在一个特定的环境里自动的运作,无需人为管理,便可以完成预期所要达到的或是更高的目标。
本设计主要体现多功能小车的智能模式,设计中的理论方案、分析方法及特色与创新点等可以为自动运输机器人、采矿勘探机器人、家用自动清洁机器人等自动半自动机器人的设计与普及有一定的参考意义。
同时小车可以作为玩具的发展对象,为中国玩具市场技术含量的缺乏进行一定的弥补,实现经济收益,形成商业价值。
超声波作为智能车避障的一种重要手段,以其避障实现方便,计算简单,易于做到实时控制,测量精度也能达到实用的要求,在未来汽车智能化进程中必将得到广泛应用。
我国作为一个世界大国,在高科技领域也必须占据一席之地,未来汽车的智能化是汽车产业发展必然的,在这种情况下研究超声波在智能车避障上的应用具有深远意义,这将对我国未来智能汽车的研究在世界高科技领域占据领先地位具有重要作用。
本智能小车系统最诱人的前景就是可用于未来的智能汽车上了,当驾驶员因疏忽或打瞌睡时这样的智能汽车的设计就能体现出它的作用。
如果汽车偏离车道或距障碍物小于安全距离时,汽车就会发出警报,提醒驾驶员注意,如果驾驶员没有及时作出反应,汽车就会自动减速或停靠于路边。
这样的小车还可以用于月球探测等的无人探月车,帮助我们传达月球上更多的信息,让我们更加的了解月球,为将来登月做好充分准备。
这样的小车在科学考察探测车上也有广阔的应用前景,在科学考察中,有很多危险且人们无法涉足的地方,这时,智能科学考察车就能够派上用场,在它上面装上摄像机,代替人们进行许多无法进行的工作。
1.2应用场合和功能:
应用场合:
智能小车是一种能够通过编程手段完成特定任务的小型化机器人,它具有制作成本低廉,电路结构简单,程序调试方便等优点。
由于具有很强的趣味性,智能小车深受广大机器人爱好者以及高校学生的喜爱。
同时在玩具的应用上深受小朋友的青睐。
功能:
本小车使用STC12C5A60S2单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,当小车与障碍物的距离大于30cm时,小车会沿直线前进,当小车与障碍物的距离小于30cm时,小车转弯以避开障碍物。
在避开障碍物后,小车会沿直线前进。
1.3项目主要研究内容
本设计题目为智能避障小车设计,主要研究小车的避障功能,小车遇到障碍物时,当距离障碍物大于30cm,驱动电机工作,小车正常前进,当小于30cm时,舵机会接受到单片机的信号,小车采取相应的避障措施。
这里探测装置必不可少,因为超声波在距离检测方面的较准确定位。
所以采用超声波传感器作为探测装置,由于超声波遇到障碍物时发生像光一样的反射和散射,在经过多次发射之后再回到超声波检测端口会产生较严重的路程差,从而影响对距离的检测进而影响对障碍物的较准确定位。
通过软件内部校准优化消除外部物理条件造成的误差从而达到对障碍物的较准确定位。
2总体方案论述
2.1总体方案
计划小车使用STC12C5A60S2单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,当小车与障碍物的距离大于危险距离时,小车会沿直线前进,当小车与障碍物的距离小于危险距离时,小车转弯以避开障碍物。
在避开障碍物后,小车会沿直线前进。
2.2总体功能及性能指标
1.通过测距传感器来获取小车距离障碍物的距离。
2.当小车与障碍物的距离大于30cm时,小车会沿直线前进,当小车与障碍物的距离小于30cm时,小车转弯以避开障碍物。
2.2.2总体电路原理图
图二总体电路原理图
2.3系统方案的比较与确定
1.方案一
(1)设计超声波模块测距,STC12C5A60S2单片机作为主控模块;
(2)设定报警阈值(设定30CM,可用键盘调整阈值),小车通过舵机工作来实现转弯避障;
(3)利用STC12C5A60S2的P1口AD转换功能,超声波模块测量距离。
2.方案二
(1)红外测距器的系统设计,STC12C5A60S2单片机作为主控模块;
(2)用动态扫描法实现LED数字显示,红外驱动信号用单片机的定时器完成;
(3)单片机使用P1.0端口输出超声波转化器所需的40KHz方波信号ISD1820语音播放距离,并用LED数字显示显示其距离值。
我们小组考虑到,超声波测距方向性好,耐脏污,可以在较差环境下使用,价格中等,检测距离远。
红外测距的优点是便宜,易制,安全,缺点是精度低、抗干扰能力差、方向性差、测试距离近。
激光测距精度高,但是成本较高,制作难度高,对人体安全有影响,且受外界环境影响较大。
三者经过相互比较,从经济和我们所学的知识考虑。
所以我们最终选择方案一。
2.4最终实物图
3硬件电路的设计
3.1硬件系统的基本结构
该智能车系统可分为四个主要模块:
单片机主控核心模块,传感器避障模块,电机驱动模块和显示模块。
其主要组成构图如下:
3.1.1障碍物测距系统:
方案一:
超声波视觉
优点:
价格合理,夜间不受影响。
易于多目标测量和分类,分辨率好。
缺点:
测量范围小,对天气变化敏感。
不能直接测量距离,算法复杂,处理速度慢。
方案二:
红外测距
优点:
便宜,易制,安全,速度快。
缺点:
精度低,距离近,方向性差,容易受光干扰
探测障碍的最简单的方法是使用超声波传感器,它是利用向目标发射超声波脉冲,计算其往返时间来判定距离的。
算法简单,价格合理。
所以我们选择超声波传感器。
超声波测距原理:
首先利用单片机输出一个40kHz的触发信号,把触发信号通过TRIG管脚输入到超声波测距模块,再由超声波测距模块的发射器向某一方向发射超声波,在发射时刻的同时单片机通过软件开始计时,超声波在空气中传播,途中碰到障碍物返回,超声波测距模块的接收器收到反射波后通过产生一个回应信号并通过ECHO脚反馈给单片机,此时单片机就立即停止计时。
时序图如图1所示。
由于超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离,即:
S=VT/2,通过单片机来算出距离。
图3.1:
超声波测距原理
3.1.2驱动模块:
方案一:
采用ULN2003驱动,它是由7组达林顿晶体管阵列和相应的电阻网络以及钳位二极管网络构成,具有同时驱动7组负载的能力,一般用于高速大功率驱动电路。
所以我们不采用这个方案。
方案二:
采用由双极性管组成的H桥电路(L298N)。
用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。
这种电路由于工作在管子的饱和截止模式下,则效率非常高;H桥电路保证了可以简单地实现转速和方向的控制,电子开关的速度很快,稳定性也很高。
而且它有更强的驱动能力。
L298N有过电流保护功能,当出现电机卡死时,可以保护电路和电机等。
L298N有过电流保护功能,当出现电机卡死时,可以保护电路和电机
等。
所以我们选择L298N。
下图为L298内部图:
图3.3:
L298内部原理图
L298各引脚功能,如下表。
引脚
功能
1、15
SEN1、SEN2
分别为两个H桥的电流反馈脚,不用时可以接地
2、3
1Y1、1Y2
输出端,与对应输入端(IN1、IN2)同逻辑
4
VS
驱动电压,最小值需比输入的低电平电压高2.5V
5、7
IN1、IN2
输入端,TTL电平兼容
6、11
EN1、EN2
使能端,低电平禁止输出
8
GND
地
9
VSS
逻辑电源,4.5~7V
10、12
IN3、IN4
输入端,TTL电平兼容
13、14
2Y1、2Y2
输出端,与对应输入端(IN3、IN4)同逻辑
表3-3-1封装引脚及功能
驱动电机的运行,I/O端口状态与电机制动对照表,如下。
IN1
IN2
IN3
IN4
EN1
EN2
转速
1
0
1
0
1
1
正转
0
1
0
1
1
1
反转
1
1
1
1
1
1
停止
0
0
0
0
1
1
停止
X
X
X
X
0
0
停止
表3-3-2I/O端口状态与电机制动对照表
3.1.3电源模块:
我们选择采用8.4v的独立的稳压电源。
优点:
稳定可靠,且有各种成熟电路可供选用;
缺点:
电源需要经LM2940转换成5v的独立的稳压电源。
综合电源模块的缺优点,和电路的实际需求,我们采用了两个变压电源模块,一块给小车的电机驱动供电,一块给小车的芯片供电,这样弥补了单个独立电源供电出现电力不足的情况。
4.程序
4.1程序流程图
本设计系统软件采用模块化结构,由主程序﹑定时子程序、电机驱动子程序﹑中断子程序、显示子程序﹑算法子程序构成。
主程序流程图如图2所示。
其中:
避障中断服务子程序完成对超声波探测器产生的外部中断进行处理,如果超出预定的危险距离就左转进行避障。
在定时中断服务子程序,完成定时与里程的计算。
主程序流程图如图13所示。
图13程序流程图
5系统软硬件调试
5.1硬件调试
超声波距仪的制作为了使信号稳定,最好给输入电源加上一个滤波电路,会增加误差,但总体来说不影响结果。
在本次设计中,主控模块是非常重要的部分,它不仅是本次设计的核心,在本次硬件调试中也遇到了问题,接上电源的时候,显示屏不亮,没有任何显示,于是我做了如下的工作:
(1)检查电源是否通电;
(2)编程使P1为低电平,检查到P1输出为低;
(3)检查P0口未接上拉电阻。
5.2软件调试
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。
根据所设计的电路参数和程序,测距仪能测的范围为20cm~150cm,测距仪最大误差不超过0.5cm。
系统调试完后对各个距离进行多次测量,与预定值进行比较,对测量误差进行多次实验分析,不断调节器件和修改程序使其达到实际使用的测量要求。
5.3调试中遇到的问题
在焊接过程中一些地方出现虚焊等接触不良的问题,导致显示不稳定有闪烁。
接线过程中用插针接线容易导致接线松动,没接到或者接触不良。
环境问题:
超声波在空气介质的传播过程中会有很大的衰减,其衰减遵循指数规律。
一般情况下能测150cm,但是空气介质发生改变,如尘埃过多,导致红外线强度降低,测量发生误差,且测量距离变小。
周围有其他辐射源,并且强度很大时会影响测量结果。
结论
对所设计的电路进行测量、校准发现其测量范围在20cm—150cm内的平面物体做了多次测量发现,其最大误差为0.5cm,且重复性好。
该测距仪稳定性比较高、灵敏度比较高。
但是在检测过程中会有一些不便的地方:
1.测量时在超声波测距仪和目标物体之间周没有其它可阻挡的物体,由于是根据反射能量法,且发射功率有限,反射回来的声波能量容易过低而无法采集,测距仪无法测量150cm外的物体。
2.必须在干净清新的空气环境下测量,空气中一旦尘埃过多,会最终影响计算距离的值。
3.不能够实现不同温度下的测距功能。
4.因为超声波是将空气作为媒介所以受电磁干扰比较大。
由上述的分析知,如果能够干净清新的空气环境,稳定的温度下,无其它电磁干扰,阻挡的物体,能够获得较高的测量精度。
参考文献
[1]毋茂盛,《单片机原理与开发》,高等教育出版社
[2]计时鸣,《机电一体化控制技术与系统》,西安电子科技大学出版社
[3]张曙光,《c语言程序设计》,人民邮电出版社
[4]彭伟,《单片机C语言程序设计实训—基于8051+Proteus仿真》电子工业出版社
附录
附录一相关程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*DeclareSFRassociatedwiththePCA*/
sfrCCON=0xD8;//PCAcontrolregister
sbitCCF0=CCON^0;//PCAmodule-0interruptflag
sbitCCF1=CCON^1;//PCAmodule-1interruptflag
sbitCR=CCON^6;//PCAtimerruncontrolbit
sbitCF=CCON^7;//PCAtimeroverflowflag
sfrCMOD=0xD9;//PCAmoderegister
sfrCL=0xE9;//PCAbasetimerLOW
sfrCH=0xF9;//PCAbasetimerHIGH
sfrCCAPM0=0xDA;//PCAmodule-0moderegister
sfrCCAP0L=0xEA;//PCAmodule-0captureregisterLOW
sfrCCAP0H=0xFA;//PCAmodule-0captureregisterHIGH
sfrCCAPM1=0xDB;//PCAmodule-1moderegister
sfrCCAP1L=0xEB;//PCAmodule-1captureregisterLOW
sfrCCAP1H=0xFB;//PCAmodule-1captureregisterHIGH
sfrPCAPWM0=0xf2;
sfrPCAPWM1=0xf3;
sbitRX=P1^0;
sbitTX=P1^1;
sbitpwm=P2^7;
sbitINPUT1=P2^0;//p1^3
sbitINPUT2=P2^1;
sbitINPUT3=P2^2;//p1^4
sbitINPUT4=P2^3;
sbitENA=P2^4;
sbitENB=P2^5;
unsignedcharjd=0,count=0,joflag=0;//角度标识
unsignedinttime=0;
unsignedinttimer=0;
floatS=0;
bitflag=0;
/********************************************************/
voidConut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100;//算出来是CM
//if(flag==1)//超出测量
//{
//flag=0;
//printf("-----\n");
//}
//
//printf("S=%f\n",S);
}
/********************************************************/
voidDelay1ms()//@11.0592MHz
{
unsignedchari,j;
_nop_();
i=11;
j=190;
do
{
while(--j);
}while(--i);
}
voiddelayms(unsignedintxms)
{
intxnum=0;
for(;xnum{
Delay1ms();
}
}
voidDelay5us()//@11.0592MHz
{
unsignedchari;
_nop_();
_nop_();
_nop_();
i=10;
while(--i);
}
voiddelayus5x(unsignedintxus)
{
while(xus--)
{
Delay5us();
}
}
/********************************************************/
voidStartModule()//T1中断用来800MS启动模块
{
TX=1;//800MS启动一次模块
Delay5us();
Delay5us();
Delay5us();
Delay5us();
TX=0;
}
/****************************
/*描述:
PWM初始化函数
/*功能:
程序开始执行部分
/*输入:
左右两个轮子的速度
****************************/
voidPWM_INIT()
{
CCON=0;
CL=0;
CH=0;
CMOD=0X00;//0x02
CCAP0H=CCAP0L=0XFF;
CCAPM0=0X42;
CCAP1H=CCAP1L=0XFF;
CCAPM1=0X42;
CR=1;
}
/****************************
/*描述:
PWM调速函数
/*功能:
程序开始执行部分
/*输入:
左右两个轮子的速度
****************************/
voidmoto(intleft_speed,intright_speed)
{
if(left_speed>=255)left_speed=255;
if(right_speed>=255)right_speed=255;
CCAP0H=CCAP0L=(255-left_speed);
CCAP1H=CCAP1L=(255-right_speed);
}
voiddianji()
{
INPUT1=1;
INPUT2=0;
INPUT3=1;
INPUT4=0;
ENA=1;
ENB=1;
}
voidstop()
{
INPUT1=1;
INPUT2=0;
INPUT3=1;
INPUT4=0;
ENA=0;
ENB=0;
}
//voidduoji()
//{
//
//TH0=0xff;//重新赋值
//TL0=0x19;
//
//if(count//pwm=1;//确实小于,PWM输出高电平
//else
//pwm=0;//大于则输出低电平
//
//count=(count+1);//0.5ms次数加1
//count=count%80;//次数始终保持为40即保持周期为20ms
//
//}
voidjiaodu(unsignedcharnum)
{
unsignedintjdcount=0;
for(;jdcount<400;jdcount++)
{
if(jdcount<=num)pwm=1;
elsepwm=0;
delayus5x(10);
}
}
voidcheck()
{
if(S<40)//检测到障碍物
{
if(joflag%2)//0
{
jiaodu
(2);
}
else
{
jiaodu(35);
}
joflag++;
joflag%=200;
delayms(1200);
jiaodu(21);
}
else
jiaodu(21);
delayms(100);
}
/********************************************************/
voidmain(void)
{
unsignedchariii=0;
TMOD=0x21;//设T0为方式1,GATE=1;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;
ET0=1;//允许T0中断
TR1=1;//开启定时器
TI=1;
EA=1;//开启总中断
dianji();
PWM_INIT();
moto(130,130);
for(;;)
{
StartModule();//setcsb
while(!
RX);//当RX为零时等待
TR0=1;//开启计数
while(RX);//当RX为1计数并等待
TR0=0;//关闭计数
Conut();//计算
//duoji();
EA=0;
check();
EA=1;
delayms(500);//100MS
}
}
/********************************************************/
voidzd0()interrupt1//T0中断用来计数器溢出,超过测距范围
{
flag=1;//中断溢出标志
}
附录二使用元器件一览表
序号
名称
型号
规格
数量
备注
1
单片机芯片
STC型
STC12C5A60S2
1个
主控单元
2
超声波模块
1个
测距
3
稳压芯片
LM型
LM2940
4个
稳压
4
晶振
12MHz
产生时钟
频率
6
电容
陶瓷型
普通型
100μF
20PF
7
排阻
普通型
103
1个
上拉电阻
8
驱动
L289n
1个
附录三心得
心得
我们组的设计题目是“智能避障小车”,我们都没有做过避障小车,一开始不知从何下手,后来找了班里做同个题目的大神咨询,请教了实验室的师兄,理出思路,先是通过上网,看书查找有关资料,开会提出大概构造和预期效果,再比较各类方案,敲出最终方案,定出初步模型,并购买相应材料开始焊电路板。
然后组长根据组员的能力和特长分工,比如焊接硬件电