超声波倒车报警器.docx
- 文档编号:4000975
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:37
- 大小:322.36KB
超声波倒车报警器.docx
《超声波倒车报警器.docx》由会员分享,可在线阅读,更多相关《超声波倒车报警器.docx(37页珍藏版)》请在冰豆网上搜索。
超声波倒车报警器
超声波倒车报警器
第一章课题任务
设计一个车用超声波倒车报警器,实现距离的检测,可自定义报警距离和车的宽度,在车尾与障碍物距离小于设定值时驱动蜂鸣器和发光二极管报警。
第二章方案设计与论证
2.1整体设计思路
2.1.1超声波介绍
声波是物体机械振动状态通过媒质向四面八方传播。
声音的传播速度与介质的种类、温度有关,一般说来,介质的密度越高传播的速度越大;温度越高传播的速度越大。
超声波是指振动频率大于20KHz以上的声波,我们的耳朵只能分辨频率为二十至二万赫的声音,人在自然环境下无法听到和感受到的超声波。
超声波发生器可以分为两大类;一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、电动型等;机械方式有加尔统笛、夜哨和气流旋笛等,它们所产生的超声波的频率,功率和声波特性各不相同,因而用途也各不相同。
目前在近距离测量方面较为常用的是压电式超声波换能器。
2.1.2超声波测距原理
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波常用于距离的测量。
利用超声波检测距离,设计比较方便,技术处理也较简单,并且在测量精度方面也能达到日常使用的要求。
利用超声波测量距离的原理可简单描述为:
超声波定期发送超声波,遭遇障碍物时发生反射,发射波经由接收器接收并转化为电信号,这样只要测出发送和接收的时间差,然后按照下式即可求出距离:
S=CΔt/2(2-1)
式中,C为超声波在空气中的传播速度。
0℃时为331m/s,25℃时为347m/s,其与环境温度T(℃)的关系如下式:
C=331.4+0.61×T(2-2)
由此可见,声速与温度密切相关。
在应用中,如果温度变化不大,并且无特殊精度要求,可认为声速是基本不变的,否则,必须进行温度补偿。
2.2系统整体方案设计
根据设计要求并综合考虑各方面因素,决定采用STC89C52RC单片机作为主控器,用LCD1602实现实时距离显示。
测距方面,选用HC-SR04超声波测距模块,测量距离2cm-450cm,探测精度0.3cm以下,供电电压5V,可与单片机共用同一电源。
数字温度传感器DS18B20对温度实时监测,超声波测距仪系统设计框图如图2-1所示。
图2-1
需要说明的是,由于缺少+12V电源,暂时采用5VUSB口供电。
超声波测距模块可以完成超声波的产生和接受。
单片机只需给出10uS的高电平触发信号,模块即发出8个40kHz超声波脉冲,然后单片机等待模块输出信号回响,回响电平时间即为超声波传播所用时间。
图2-2
由于超声波也是一种声波,其声速C与温度有关,表2-1中列出了几种不同温度下的声速。
在使用时,如果温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
表2-1
温度(℃)
-30
-20
-10
0
10
20
30
100
声速(m/s)
313
319
325
323
338
344
349
386
可以看出,声速随温度变化很大,从零下20摄氏度到三十摄氏度,可以产生分米级的测量误差,这是不允许的,故加入温度补偿功能。
2.3方案比较与选择
方案一单个固定的超声波测距模块:
倒车时,车尾和障碍物不一定是平行的(如图2-3所示),可能存在一定夹角。
单个超声波模块的测距结果不可能反映实际距离D。
方案二采用步进电机带动单个超声波模块作扇形扫描:
测距时间长,控制复杂,难度大,耗电多。
方案三使用双测距模块:
可靠且易于安装,抗干扰能力强,两个模块交替工作,避免干扰,用单片机的运算补偿夹角的影响,测距时间短。
(如图2-3所示)
图2-3
综上所述,采用方案三作为测距方案
第三章电路设计
3.1电源模块
图3-1
电源模块如图3-1所示,采用LM7805三端集成稳压芯片,输入电压范围8-25V,输出电压5V左右。
输入端加一个瞬态抑制二极管SMDA12防止浪涌脉冲损坏电路。
二极管IN4007可以起到抑制反向电压的作用。
3.2超声波模块(接口电路)
超声波模块接口电路如图3-2所示
图3-2
双超声波模块的TRIG引脚分别连接到单片机的P1.0、P1.1引脚,ECHO引脚连接到单片机的P3.2、P3.3引脚,控制外部中断。
3.3LCD1602显示模块
显示电路如图3-3所示,单片机的P0作为8位数据、指令端口,P2.6输出使能信号,P2.7输出数据/命令选择信号。
因为单片机不从1602读取任何数据,所以1602读写选择端RW接地。
当P2.6为高电平,P2.7为高电平时,1602读入8位数据码;当P2.6为高电平,P2.7为低电平是,1602读入8位指令码。
此外,调节电位器RV1可改变LCD对比度。
另有背光电源接口,图中未画出。
图3-3
3.4DS18B20模块
DS18B20的特性:
1.独特的单线接口仅需一个端口引脚进行通讯。
2.简单的多点分布引用。
3.无需外部器件。
4.可通过数据线供电。
5.零待机功耗。
6.测温范围-55+125摄氏度,以0.5摄氏度递增。
7.温度数字量转换时间200ms(典型值)。
说明:
DS1820数字温度计以12位数字量的形式反映器件的温度值DS1820通过一个单线接口发送或接收信息,由此在中央微处理器和DS1820之间仅需一条连接线(加上地线)。
用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。
因为每个DS1820都有一个独特的片序列号,所以多只DS1820可以同时连在一根单线总线上,这样就可以把温度传感器放在许多不同的地方。
这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。
DS18B20的引脚图如图3-4所示。
图3-4
DS18B20电路连接图如图3-5所示,DS18B20数据输出端必须接上拉电阻,阻值为4.7K。
图3-5
第四章软件设计
超声波测距仪的软件设计主要由主程序、超声波测距程序、1602显示程序、温度测量程序,键盘扫描程序、车宽设置程序组成。
程序使用C51编写,具有简便易读可移植的特点。
4.1主程序
主程序流程图如图所示,主程序首先是对系统环境初始化,设置TRIG引脚为低电平、设置LCD1602工作模式,调用车宽设置子程序,等待用户输入车宽。
随即进入主循环。
在主循环中读取温度值,计算当前声速。
接着发出距离测量命令,获得两个距离值,接着利用已知参数计算实际距离,并判断有效性。
若两个距离值相差大于20cm,则认为距离值无效,并停止报警。
若距离值有效且小于所设定的报警距离,则使P3.6口为低电平,蜂鸣器响,二极管发光报警。
其程序流程图如图4-1所示。
图4-1
其源程序如下:
voidmain(){
Trig1=0;
Trig2=0;
lcd_init();//lcd初始化
width_set();//输入车宽
displayword(c);
rate=(width/2-1)/2;//计算参数
while
(1){//主循环
tmprchange();//启动温度转换
getspeed();//获得温度并计算声速
measure1();//超声波测距1
measure2();//超声波测距2
keyscan();//键盘扫描
if(distance1>distance2){//计算实际距离
distance=distance2-(distance1-distance2)*rate;
}else{
distance=distance1-(distance2-distance1)*rate;
}
if(abs(distance1-distance2)<2||distance1==30||distance2==30){//判断距离有效性
if(distance warn=0; }else{ warn=1; } }else{ warn=1; } displaynum(distance1);//显示距离、温度 displaynum2(distance2); displaynum3(tmp); } } 4.2超声波测距程序 超声波接收程序主要是利用外中断检测返回超声波信号,一旦接收到返回超声波信号(即INT引脚出现高电平),立即启动定时器,并延时14ms。 若14ms内回波电平由高变低,则触发中断,关闭计时器,保存计时器值,并将测距成功标志字赋值1。 如果14ms后还未收到结束信号,则测距不成功。 其程序流程图如图4-2所示。 图4-2 其距源程序如下: voidmeasure1()//测距1 { uinttime; Trig1=0; TMOD=0x01;//设置T0为计时器工作方式1 EA=0;//关中断 Trig1=1;//发出声波 delay12us(); Trig1=0; succeed_flag=0; EA=1;//开中断, TH0=0; TL0=0; while(Echo1==0);//等待回波电平 EX0=1; TR0=1;//计时开始 delay(14);//等待电平跳变 TR0=0; EX0=0; if(succeed_flag==1){//测距成功,计算距离 time=timeH*256+timeL; distance1=time*speed; } if(succeed_flag==0){//测距不成功,距离值为3m distance1=30; } } voidmeasure2()//测距2,同上 { uinttime; Trig2=0; TMOD=0x10; EA=0; Trig2=1; delay12us(); Trig2=0; succeed_flag=0; EA=1; TH1=0; TL1=0; while(Echo2==0); EX1=1; TR1=1; delay(14); TR1=0; EX1=0; if(succeed_flag==1){ time=timeH*256+timeL; distance2=time*speed; } if(succeed_flag==0){ distance2=30; } } voidtimerstop1()interrupt0//外中断0,控制T0 { EX0=0; timeH=TH0; timeL=TL0; succeed_flag=1; } voidtimerstop2()interrupt2//外中断1,控制T1 { EX1=0; timeH=TH1; timeL=TL1; succeed_flag=1; } 需要说明的是,主程序中已经设置相关语句用于检测距离值的有效性,3m为无效数据。 4.31602显示程序 设计使用的1602液晶为5V电压驱动,可显示两行,每行16个字符。 1602的写操作时序如图4-3所示: 图4-3 程序流程如图4-4所示 图4-4 时序图中的延时,因厂家而定,一般在纳秒级。 因为单片机时序为微秒级,故程序中可不作延时,但稳定性的角度考虑,仍作简短延时。 1602显示源程序如下: voidwrite_com(ucharcom){ lcdrs=0;//写入指令 P0=com; delay(5);//短暂延时 lcden=1; delay(5); lcden=0; } voidwrite_dat(ucharcom){ lcdrs=1;//写入数据 P0=com; delay(5); lcden=1; delay(5); lcden=0; } voidlcd_init(){ lcden=0; write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c);//开显示,不现实光标 write_com(0x06);//写一个字符后地址加一 write_com(0x01);//显示清零,指针清零 } voiddisplaynum(uchartemp){ write_com(0x80+0x40);//显示位置第二行 write_dat(temp/10+0x30);//数字变换为ASCII码 write_dat(0x2e); write_dat(temp%10+0x30); } voiddisplaynum2(uchartemp){ write_com(0x80+0x44); write_dat(temp/10+0x30); write_dat(0x2e); write_dat(temp%10+0x30); } voiddisplaynum3(uchartemp){ write_com(0x80+0x48); write_dat(temp/10+0x30); write_dat(temp%10+0x30); } voiddisplayword(uchar*temp){ write_com(0x80);//显示位置第一行 while(*temp! =0){ write_dat(*temp); temp++; } } 说明: write_com子程序用于向1602写入指令(rs=0),write_dat子程序用于向1602写入数据(rs=1)。 lcd_init子程序通过向lcd1602写入一系列指令来完成初始化工作。 其余子程序分别在不同位置显示数字或字母。 需要注意的是,数字需要经过ASCII译码方可正确显示,LCD1602内部RAM缓冲区如图4-5所示。 图4-5 向0x00-0x0F和0x40-0x4F区域写入显示数据可立即显示在LCD1602的第一、第二行上,写入到其他地址则需要通过移屏指令移入可显示区域。 本设计只使用前者。 4.4温度测量程序 温度检测子程序的主要功能是读出RAM中的2字节温度数据,并计算声速。 其程序流程图如图4-6所示 图4-6 温度检测源程序如下: voiddswrite(uchardat) { uinti; ucharj; bittestb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0; i=8;while(i>0)i--; DS=1; i++;i++; } } } uchardsread(void) { uchari,j,dat; dat=0; for(i=1;i<=8;i++) { j=dsreadbit(); dat=(j<<7)|(dat>>1); } return(dat); } bitdsreadbit(void) { uinti; bitdat; DS=0;i++; DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return(dat); } voiddsreset(void) { uinti; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } voidtmprchange(void) { dsreset(); delay (1); dswrite(0xcc); dswrite(0x44); } voidgetspeed(void) { uinttemp; floattempr; uchara,b; dsreset();//初始化 delay (1); dswrite(0xcc);//跳过ROM dswrite(0xbe);//读温度命令 a=dsread();//读低八位 b=dsread();//读高八位 temp=b; temp<<=8; temp=temp|a;//高低八位合并 if(b>127){//判断温度正负,并作相应处理 temp=~temp+1; tempr=temp*0.0625; speed=(((331.4-tempr*0.61)/)*10)/2; }else{ temp=temp; tempr=temp*0.0625; speed=(((331.4+tempr*0.61)/)*10)/2; } tmp=tempr; } DS18B20的内部高速暂存RAM共有9字节,其中第一字节为温度值低位,第二字节为温度值高位,命令0xBE可一次读出9字节的数据,但我们只需要前两个字节。 高速暂存RAM第一、二个字节格式如图4-7所示。 图4-7 DS18B20出厂时默认温度配置为12位,其中最高5位为符号位,在读数据时,一次读取16位,将低11位转化为十进制数再乘以0.0625便得到所需温度值。 前5位为1时,读取温度为负值,需要取反加1再乘以0.0625才可以得到我们需要的温度值。 第五章调试与测试 5.1硬件调试 按电路图焊接电路,检查通路,上电,发现单片机未工作,再次检查电路,发现EA、ALE引脚未接高电平。 连接EA、ALE引脚与电源,上电,单片机工作,但LCD显示屏无显示,调节对比度直至显示清晰字符。 用万用表检查各模块电压、电流,修改电路,直至各模块工作正常,硬件调试完毕。 5.2软件调试 软件采用Keil编程环境编写,检查源程序无误后,编译HEX文件,将HEX文件导入ISIS仿真环境,调试程序。 5.3系统调试 将编译好的HEX文件写入单片机,系统上电测试,逐个检查各模块工作情况。 5.4实际测试 系统调试完后,对测量误差和重复一致性进行多次实验分析,不断优化系统,使其达到实际使用的测量要求。 室温下进行测试(室温19℃),测量距离为0.2m-1.2m,测试作品的测量精度。 试验结果如表5-1所示。 表5-1 标准值/m 测距1/m 测距2/m 绝对误差1/m 绝对误差2/m 相对误差1 相对误差2 0.2 0.193 0.191 0.007 0.009 0.035 0.045 0.4 0.386 0.393 0.014 0.007 0.035 0.018 0.6 0.589 0.593 0.011 0.007 0.018 0.012 0.8 0.786 0.777 0.014 0.023 0.018 0.029 1.0 0.980 0.976 0.020 0.024 0.020 0.024 1.2 1.190 1.189 0.010 0.011 0.008 0.009 受电路结构限制,无法准确标定测距起点,为消除系统误差,再对数据进行一次处理。 处理结果如表5-2所示。 表5-2 标准值/m 测距1/m 测距2/m 差1 差2 绝对误差1/m 绝对误差2/m 相对误差1 相对误差2 0.2 0.193 0.191 0.193 0.202 -0.007 0.002 -0.035 0.010 0.4 0.386 0.393 0.203 0.200 0.003 0.000 0.015 0.000 0.6 0.589 0.593 0.197 0.184 -0.003 -0.016 -0.015 -0.080 0.8 0.786 0.777 0.194 0.199 -0.006 -0.001 -0.030 -0.005 1.0 0.980 0.976 0.210 0.213 0.010 0.013 0.050 0.065 1.2 1.190 1.189 综上,系统误差满足实际使用要求。 第六章总结 在一个月的时间里,通过自己努力的探索,不断的请教和修改,终于把作品制作成功,作品完全满足设计要求。 在这漫长的时间里,这个作品凝聚了我和搭档的智慧和汗水,也融入了所有坚定不移的信念。 在设计过程中,我们全局审视工作进展情况,结合总体进展进行相应的改善和布局,使得我们每次都有进一步的拓展;另一方面,我们还查找相关课题的信息和一些硬件材料的基本知识,了解最新的信息,结合本设计进行调整。 在遇到困难时,我们相互讨论,同时不断的请教指导老师和专家进行指导,使我们的设计更加顺利。 在这期间我们也遇到过很多困难,我们懊恼过,沮丧过甚至灰心,想到放弃,可是每一次困难都被我们征服,因为抱着一种执着的信念,对知识的渴求和设计的热爱! 经过这次创作,让我们充分的体验到团队精神的可贵,协作精神的伟大,让我们体会到理论和实践结合的困难和快乐,体会到用双手打造成果的艰辛,体会到创作的伟大,科技的伟大,也让我们充分感受到追求知识的坎坷,寻求真理的艰难,同时更加坚定了我们对知识的孜孜追求! 参考文献 [1]郭天祥.新概念51单片机C语言教程.北京: 电子工业出版社,2009. [2]胡汉才.单片机原理及接口技术.北京: 清华大学出版社,2010 [3]李建忠.单片机原理及应用.西安电子科技大学出版社,2002 [4]田绍贤.带温度补偿功能的超声波测距仪(软件部分)[D].南昌工程学院,2010. 附录 附录一总电路图 附录二源程序清单 //超声波倒车报警器 //2013.12.15 #include #include #defineucharunsignedchar #defineuintunsignedint sbitlcdrs=P2^7; sbitlcden=P2^6; sbitwarn=P3^6; sbitDS=P3^7; sbitTrig1=P1^0; sbitTrig2=P1^1; sbitEcho1=P3^2; sbitEcho2=P3^3; sbitkey1=P2^0; sbitkey2=P2^1; sbitkey3=P2^2; voidde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波 倒车 报警器