目录一、超声波测距原理二、超声波测距模块介绍1.主控模块2.电源模块3.显示模块4.超声波模块5.扬声器模块三、超声波测距功能介绍四、超声波测距前景展望五、心得附:程序超声波测距(可报警)一、超声波测距原理超声波发射器定期发送超声波,遇到被测物体时发生反射,反射波经超声波接收器接收并转化为电信号,只要测出发送和接收的时间差t,即可测出超声测距装置到被测物体之间的距离S:S=c*t/2(式中c为超声波在空气中的传播速度,c=331.45*√(1+T/273.16)) 由此可见声速与温度的密切的关系。
在应用中,如果温度变化不大或者对测量要求不太高(例如汽车泊车定位系统),则可认为声速是不变的,否则,必须进行温度补偿。
超声波传感器是超声测距核心部件,传感器按其工作介质可分气相、液相和固相传感器;按其发射波束宽度可分为宽波束和窄波束传感器;按其工作频率又可分为40kHz, 5OkHz等不同等级。
超声波在空气传播过程中,由于空气吸收衰减和扩散损失,声强随着传播距离的增大而衰减,而超声波的衰减随频率增大而成指数增加。
本设计选用气相、窄波束、40kHz的超声波传感器。
二、超声波测距模块介绍该产品共有五个模块,其中主控模块、电源模块、显示模块、扬声器模块集成在开发板上,超声波模块是外接的。
1.主控模块主要部分是51单片机。
51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATLEM公司的AT89系列,它广泛应用于工业测控系统之中。
目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
需要注意的是52系列的单片机一般不具备自编程能力。
主要功能:·8位CPU·4kbytes 程序存储器(ROM) (52为8K)·256bytes的数据存储器(RAM) (52有384bytes的RAM)·32条I/O口线·111条指令,大部分为单字节指令·21个专用寄存器·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)·一个全双工串行通信口·外部数据存储器寻址空间为64kB·外部程序存储器寻址空间为64kB·逻辑操作位寻址功能·双列直插40PinDIP封装·单一+5V电源供电CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M。
2.电源模块发电机能把机械能转换成电能,干电池能把化学能转换成电能。
发电机、电池本身并不带电,它的两极分别有正负电荷,由正负电荷产生电压(电流是电荷在电压的作用下定向移动而形成的),电荷导体里本来就有,要产生电流只需要加上电压即可,当电池两极接上导体时为了产生电流而把正负电荷释放出去,当电荷散尽时,也就荷尽流(压)消了。
干电池等叫做电源。
通过变压器和整流器,把交流电变成直流电的装置叫做整流电源。
能提供信号的电子设备叫做信号源。
晶体三极管能把前面送来的信号加以放大,又把放大了的信号传送到后面的电路中去。
晶体三极管对后面的电路来说,也可以看做是信号源。
整流电源、信号源有时也叫做电源。
3.显示模块我们选用的是LED共阴极数码管,用于显示超声波至障碍物的距离,精度单位为cm。
此处也可以选用LCD12864液晶显示屏,这样可以更加精确的显示距离,以及单位、温度、湿度等参量。
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到字样了。
如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。
LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。
小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。
发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。
常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
led数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
颜色有红,绿,蓝,黄等几种。
led数码管广泛用于仪表,时钟,车站,家电等场合。
选用时要注意产品尺寸颜色,功耗,亮度,波长等。
下面将介绍常用LED数码管内部引脚图片每一笔划都是对应一个字母表示 DP是小数点.LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
4.超声波模块电气参数:5.扬声器模块扬声器特征:(1)扬声器有两个接线柱(两根引线),当单只扬声器使用时两根引脚不分正负极性,多只扬声器同时使用时两个引脚有极性之分。
(2)扬声器有一个纸盒,它的颜色通常为黑色,也有白色。
(3)扬声器的外形有圆形、方形和椭圆形等几大类。
(4)扬声器纸盆背面是磁铁,外磁式扬声器用金属螺丝刀去接触磁铁时会感觉到磁性的存在;内磁式扬声器中没有这种感觉,但是外壳内部确磁铁。
(5)扬声器装在机器面板上或音箱内。
三、超声波测距功能介绍本产品主要是运用超声波来检测周围障碍物与该超声波起始端之间的距离。
超声波模块的电气参数见上。
超声波的射程为2cm-400cm,当射程大于400cm时,将无法测距,此时数码管上显示为“---”。
另外当射程小于15cm时,将会由扬声器处发出警报(此处为该超声波测距的关键所在,用户可以自己设定报警射程)。
四、超声波测距前景展望1.用于智能机器人目前智能机器人正在火爆研发,不久的将来机器人必将广泛应用,我们这个超声波测距可以应用于机器人,当机器人遇到障碍物是可以自动报警。
2.用于高速公路上行驶的各种车辆目前各种交通事故总是在无情的上演着,其中一部分是由于天气原因或其他障碍物造成的车辆追尾事件。
我们的产品可利用超声波测距的,可以自己设定距离,当有障碍物在规定的范围内出现时,扬声器将会发出报警的声音,这个时候司机就可以根据当时情况及时做出反应,以避免车祸的发生。
类似于雷达。
3.用于个人飞行器目前新兴的个人飞行器已经有很多,未来个人飞行器可能更多的用于私人交通,而代替地面上行驶的车辆。
当个人飞行器在低空中飞行时,就可以利用我们的产品来检测前方是否有阻碍飞行的障碍物。
五、心得我们组从接到作业任务就开始准备,前前后后花了3个月左右。
作为我们组的组长及产品经理,作为组长我在这次项目中主要是分配、协调大家来配合完成好每一部分的工作。
作为产品经理,我经过很长时间的思考后选定了我们做的项目“超声波测距(带报警)”,之后去买材料,以及协助技术经理完成硬件和软件部分的制作,其中在软件方面,用了很长时间来编写程序,在这个编写程序的过程中我对C语言又有了深一层次的学习。
在这次项目的整个制作过程中我学到了很多,真正的把理论应用于实践后有一种极大的成就感。
其中也遇到了很多困难,但是我们组在团队协作下都一一解决了,在此对我的组员表示感谢,谢谢大家能够团结协作共同把项目做好。
程序:/****************************************************************************** *****************************///接线:模块TRIG接P3.1 ECH0 接P3.2//数码管:共阳数码管P1接数据口,P2.2P2.1 P2.0接选通数码管//蜂鸣器:P1.6/****************************************************************************** *****************************/#include <reg52.H> //器件配置文件#include <intrins.h>#include <SPEAK.H>sbit RX=P3^1;sbit TX=P3^2;unsigned int time=0;unsigned int timer=0;unsigned char posit=0;unsigned long S=0;bit flag =0;unsigned char const discode[] ={ ~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0xBF,~0xff/*-*/};unsigned char const positon[3]={ 0x01,0x02,0x03};unsigned char disbuff[4] ={ 0,0,0,0,};/********************************************************/void Display(void) //扫描数码管{if(posit==0){P0=(discode[disbuff[posit]])&0x7f;}else{P0=discode[disbuff[posit]];}P2=positon[posit];if(++posit>=3)posit=0;}/********************************************************/void Conut(void){time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/100; //算出来是CMif((S>=700)||flag==1) //超出测量范围显示“-”{flag=0;disbuff[0]=10; //“-”disbuff[1]=10; //“-”disbuff[2]=10; //“-”}else if (S<=15){disbuff[0]=S%1000/100;disbuff[1]=S%1000%100/10;disbuff[2]=S%1000%10 %10;speak();}else{disbuff[0]=S%1000/100;disbuff[1]=S%1000%100/10;disbuff[2]=S%1000%10 %10;}}/********************************************************/void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围{flag=1; //中断溢出标志}/********************************************************/void zd3() interrupt 3 //T1中断用来扫描数码管和计800MS启动模块{TH1=0xf8;TL1=0x30;Display();timer++;if(timer>=400){timer=0;TX=1; //800MS 启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}}/*********************************************************/ void main( void ){TMOD=0x11; //设T0为方式1,GATE=1;TH0=0;TL0=0;TH1=0xf8; //2MS定时TL1=0x30;ET0=1; //允许T0中断ET1=1; //允许T1中断TR1=1; //开启定时器EA=1; //开启总中断while(1){while(!RX); //当RX为零时等待TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数Conut(); //计算}}#include <SPEAK.H>/******************************************************************//* 延时函数声明*//******************************************************************/ void delay(unsigned int cnt){while(--cnt);}/******************************************************************//* 主函数*//******************************************************************/ void speak(void){unsigned int i;unsigned int j=3;while(j--){for(i=0;i<200;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短{delay(80); //参数决定发声的频率,估算值,可以自行更改参数并SPK=!SPK;}SPK=1; //喇叭停止工作,间歇的时间,可更改delay(20000);}}。