智能避障小车课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广东技术师范学院
光机电一体化课程设计
题目:智能超声波避障小车
院别:机电学院
专业:机械电子工程(师范)
姓名:路小娃
学号:2013095444026
同组人员:谢嘉玲欧嘉兴
指导教师:杨永
日期: 2016年6月16日
智能超声波避障小车
摘要
本设计主要有三个模块包括信号检测模块、主控模块、电机驱动模块。
信号检测模块采用超声波测距模块,用以对有无障进行检测。
主控电路采用宏晶公司的8051核心的STC89C52单片机为控制芯片。
电机驱动模块采用意法半导体的L298N专用电机驱动芯片,单片控制与传统分立元件电路相比,使整个系统有很好的稳定性.信号检测模块将采集到的路况信号传入STC89C52单片机,经单片机处理过后对L298N发出指令进行相应的调整.我们设计的小车已经实现基本的避障功能。
关键词:智能避障小车,STC89C52单片机,L298N驱动芯片,信号检测模块,避障
目录
摘要 (2)
目录 (2)
1课程设计内容 (4)
1。
1项目研究的背景及意义 (4)
1.2应用场合和功能: (4)
1.3项目主要研究内容 (4)
2总体方案论述 (6)
2.1总体方案 (6)
2。
2总体功能及性能指标 (6)
2。
2.1总体功能 (6)
2.2。
2总体电路原理图 (6)
2.3系统方案的比较与确定 (7)
2.3。
1系统方案的比较 (7)
2.3。
2系统方案的确定 (7)
2。
4最终实物图 (8)
3硬件电路的设计 (9)
3。
1硬件系统的基本结构 (9)
3。
1。
1障碍物测距系统: (9)
3.1。
2驱动模块: (10)
3。
1.3电源模块: (12)
4.程序 (13)
4。
1 程序流程图 (13)
5系统软硬件调试 (14)
5.1 硬件调试 (14)
5.2软件调试 (14)
5.3 调试中遇到的问题 (14)
结论 (14)
参考文献 (15)
附录 (16)
附录一相关程序 (16)
附录二使用元器件一览表 (23)
附录三心得 (24)
1课程设计内容
1.1项目研究的背景及意义
智能作为现代社会的新产物,是以后的发展方向,他可以按照预先设定的模式在一个特定的环境里自动的运作,无需人为管理,便可以完成预期所要达到的或是更高的目标。
本设计主要体现多功能小车的智能模式,设计中的理论方案、分析方法及特色与创新点等可以为自动运输机器人、采矿勘探机器人、家用自动清洁机器人等自动半自动机器人的设计与普及有一定的参考意义.同时小车可以作为玩具的发展对象,为中国玩具市场技术含量的缺乏进行一定的弥补,实现经济收益,形成商业价值。
超声波作为智能车避障的一种重要手段,以其避障实现方便,计算简单, 易于做到实时控制,测量精度也能达到实用的要求,在未来汽车智能化进程中必将得到广泛应用。
我国作为一个世界大国,在高科技领域也必须占据一席之地,未来汽车的智能化是汽车产业发展必然的,在这种情况下研究超声波在智能车避障上的应用具有深远意义,这将对我国未来智能汽车的研究在世界高科技领域占据领先地位具有重要作用。
本智能小车系统最诱人的前景就是可用于未来的智能汽车上了,当驾驶员因疏忽或打瞌睡时这样的智能汽车的设计就能体现出它的作用。
如果汽车偏离车道或距障碍物小于安全距离时,汽车就会发出警报,提醒驾驶员注意,如果驾驶员没有及时作出反应,汽车就会自动减速或停靠于路边。
这样的小车还可以用于月球探测等的无人探月车,帮助我们传达月球上更多的信息,让我们更加的了解月球,为将来登月做好充分准备。
这样的小车在科学考察探测车上也有广阔的应用前景,在科学考察中,有很多危险且人们无法涉足的地方,这时,智能科学考察车就能够派上用场,在它上面装上摄像机,代替人们进行许多无法进行的工作。
1。
2应用场合和功能:
应用场合:智能小车是一种能够通过编程手段完成特定任务的小型化机器人,它具有制作成本低廉,电路结构简单,程序调试方便等优点。
由于具有很强的趣味性,智能小车深受广大机器人爱好者以及高校学生的喜爱。
同时在玩具的应用上深受小朋友的青睐。
功能:本小车使用STC12C5A60S2单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,当小车与障碍物的距离大于30cm时,小车会沿直线前进,当小车与障碍物的距离小于30cm时,小车转弯以避开障碍物.在避开障碍物后,小车会沿直线前进.
1。
3项目主要研究内容
本设计题目为智能避障小车设计,主要研究小车的避障功能,小车遇到障碍物时,当距离障碍物大于30cm,驱动电机工作,小车正常前进,当小于30cm时,舵机会接受到单片机的信号,小车采取相应的避障措施.这里探测装置必不可少,因为超声波在距离检测方面的较准确定位.所以采用超声波传感器作为探测装置,由于超声波遇到障碍物时发生像光一样的反射和散射,在经过多
次发射之后再回到超声波检测端口会产生较严重的路程差,从而影响对距离的检测进而影响对障碍物的较准确定位。
通过软件内部校准优化消除外部物理条件造成的误差从而达到对障碍物的较准确定位.
2总体方案论述
2.1总体方案
计划小车使用STC12C5A60S2单片机作为主控芯片,它通过超声波测距来获取小车距离障碍物的距离,当小车与障碍物的距离大于危险距离时,小车会沿直线前进,当小车与障碍物的距离小于危险距离时,小车转弯以避开障碍物。
在避开障碍物后,小车会沿直线前进。
2。
2总体功能及性能指标
2。
2。
1总体功能
1。
通过测距传感器来获取小车距离障碍物的距离。
2。
当小车与障碍物的距离大于30cm时,小车会沿直线前进,当小车与障碍物的距离小于30cm 时,小车转弯以避开障碍物。
2.2。
2总体电路原理图
图二总体电路原理图
2。
3系统方案的比较与确定
2.3.1系统方案的比较
1.方案一
(1)设计超声波模块测距,STC12C5A60S2单片机作为主控模块;
(2)设定报警阈值(设定30CM,可用键盘调整阈值),小车通过舵机工作来实现转弯避障;
(3)利用STC12C5A60S2的P1口AD转换功能,超声波模块测量距离。
2。
方案二
(1)红外测距器的系统设计,STC12C5A60S2单片机作为主控模块;
(2)用动态扫描法实现LED数字显示,红外驱动信号用单片机的定时器完成;
(3)单片机使用P1.0端口输出超声波转化器所需的40KHz方波信号ISD1820语音播放距离,并用LED数字显示显示其距离值.
2.3.2系统方案的确定
我们小组考虑到,超声波测距方向性好,耐脏污,可以在较差环境下使用,价格中等,检测距离远.红外测距的优点是便宜,易制,安全,缺点是精度低、抗干扰能力差、方向性差、测试距离近。
激光测距精度高,但是成本较高,制作难度高,对人体安全有影响,且受外界环境影响较大。
三者经过相互比较,从经济和我们所学的知识考虑。
所以我们最终选择方案一。
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端口状态与电机制动对照表,如下。
表3—3-2 I/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 〈reg52.h〉
#include <intrins。
h>
#include 〈STDIO.H>
#define uchar unsigned char
#define uint unsigned int
/*Declare SFR associated with the PCA */
sfr CCON = 0xD8; //PCA control register
sbit CCF0 = CCON^0; //PCA module-0 interrupt flag
sbit CCF1 = CCON^1; //PCA module—1 interrupt flag
sbit CR = CCON^6;//PCA timer run control bit
sbit CF = CCON^7; //PCA timer overflow flag
sfr CMOD = 0xD9; //PCA mode register
sfr CL = 0xE9;//PCA base timer LOW
sfr CH = 0xF9;//PCA base timer HIGH
sfr CCAPM0 = 0xDA;//PCA module-0 mode register
sfr CCAP0L = 0xEA;//PCA module—0 capture register LOW sfr CCAP0H = 0xFA; //PCA module—0 capture register HIGH sfr CCAPM1 = 0xDB;//PCA module-1 mode register
sfr CCAP1L = 0xEB; //PCA module—1 capture register LOW sfr CCAP1H = 0xFB;//PCA module-1 capture register HIGH sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
sbit RX=P1^0;
sbit TX=P1^1;
sbit pwm =P2^7 ;
sbit INPUT1=P2^0;//p1^3
sbit INPUT2=P2^1;
sbit INPUT3=P2^2; //p1^4
sbit INPUT4=P2^3;
sbit ENA=P2^4;
sbit ENB=P2^5;
unsigned char jd=0,count=0,joflag=0; //角度标识
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag =0;
/********************************************************/
void Conut(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);
}
/********************************************************/
void Delay1ms()//@11。
0592MHz
{
unsigned char i,j;
_nop_();
i = 11;
j = 190;
do
{
while (—-j);
} while (——i);
}
void delayms(unsigned int xms)
{
int xnum=0;
for(;xnum〈xms;xnum++)
{
Delay1ms();
}
}
void Delay5us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 10;
while (—-i);
}
void delayus5x(unsigned int xus)
{
while(xus—-)
{
Delay5us();
}
}
/********************************************************/
void StartModule()//T1中断用来800MS启动模块
{
TX=1;//800MS 启动一次模块
Delay5us();
Delay5us();
Delay5us();
Delay5us();
TX=0;
}
/****************************
/*描述:PWM初始化函数
/*功能:程序开始执行部分
/*输入:左右两个轮子的速度
****************************/
void PWM_INIT()
{
CCON = 0;
CL=0;
CH=0;
CMOD=0X00;//0x02
CCAP0H = CCAP0L = 0XFF;
CCAPM0 = 0X42;
CCAP1H = CCAP1L = 0XFF;
CCAPM1 = 0X42;
CR=1;
}
/**************************** /*描述:PWM调速函数
/*功能:程序开始执行部分
/*输入:左右两个轮子的速度
****************************/ void moto(int left_speed,int right_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);
}
void dianji()
{
INPUT1=1;
INPUT2=0;
INPUT3=1;
INPUT4=0;
ENA=1;
ENB=1;
}
void stop()
{
INPUT1=1;
INPUT2=0;
INPUT3=1;
INPUT4=0;
ENA=0;
ENB=0;
}
//void duoji()
//{
//
// TH0 = 0xff;//重新赋值
// TL0 = 0x19;
//
// if(count<jd) //判断0.5ms次数是否小于角度标识
// pwm=1;//确实小于,PWM输出高电平
// else
// pwm=0;//大于则输出低电平
//
// count=(count+1);//0.5ms次数加1
// count=count%80; //次数始终保持为40 即保持周期为20ms //
//}
void jiaodu(unsigned char num)
{
unsigned int jdcount=0;
for(;jdcount〈400;jdcount++)
{
if(jdcount〈=num)pwm=1;
else pwm=0;
delayus5x(10);
}
}
void check()
{
if(S〈40) //检测到障碍物
{
if(joflag%2) //0
{
jiaodu(2);
}
else
{
jiaodu(35);
}
joflag++;
joflag%=200;
delayms(1200);
jiaodu(21);
}
else
jiaodu(21);
delayms(100);
}
/********************************************************/ void main(void)
{
unsigned char iii=0;
TMOD=0x21; //设T0为方式1,GA TE=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(); //set csb
while(!RX);//当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0;//关闭计数
Conut(); //计算
// duoji();
EA=0;
check();
EA=1;
delayms(500);//100MS
}
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围{
flag=1; //中断溢出标志
}
附录二使用元器件一览表
附录三心得
心得
我们组的设计题目是“智能避障小车”,我们都没有做过避障小车,一开始不知从何下手,后来找了班里做同个题目的大神咨询,请教了实验室的师兄,理出思路,先是通过上网,看书查找有关资料,开会提出大概构造和预期效果,再比较各类方案,敲出最终方案,定出初步模型,并购买相应材料开始焊电路板。
然后组长根据组员的能力和特长分工,比如焊接硬件电路、整理文档、编写程序和画电路图等。
通过一番整理和修改后,用Protel在电脑上进行电路排版,排布成功后准备焊接电路板。
焊接后检测电路和进行程序调试.虽然在过程中我们出现不少问题但大家开动思路,查阅资料,求助大神后积极动手,最终还是成功解决。
通过这次课程设计,不仅增强了我们的动手能力,提高和巩固了单片机方面的知识和动手操作能力,认识到把理论应用到实践中去是多么重要,还凝聚了团队合作精神。
而且意识到学习机械电子技术的重要性,它可以将我们学习到的知识转化成科技生产力,从而造福于社会,加强我们国家的现代化步伐.更进一步地说,只有学好理论知识,提升自己的科研能力,才有可能成为一名真正的高素质人才。
做任何事情都需要沉住气,稳住心,才能一步一个脚印完成。