一款超声波测距模块运用程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一款超声波测距模块运用程序

本模块性能稳定,使用方便,测度距离精确。能和

国外的SRF05,SRF02等超声波测距模块相媲美,且价格

实惠,是你采购超声波器件的理想选择。模块高精度,

盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!测量范围在2cm~500cm,测量精度3mm,测量

时与被测物体无直接接触,能够清晰稳定地显示测量结果。由于超声波指向性强,能量消耗缓慢,在介质中传

播的距离较远,因而超声波经常用于距离的测量,如测

距仪和物位测量仪等都可以通过超声波来实现。

超声波测距器,可以应用于汽车倒车、建筑施工工

地以及一些工业现场的位置监控,也可用于液位、井深、管道长度的测量,用于机器人控制、小车躲避障碍等场

合中。小车上安装此模块配合舵机使用能控制得更方便。利用超声波检测往往比较迅速、方便、计算简单、易于

做到实时控制,并且在测量精度方面能达到工业实用的

要求。因此在移动机器人的研制上也得到了广泛的应用。模块性能

1:使用电压:DC5V;

2:静态电流:小于2mA;

3:输出信号:电平信号,高电平5V,低电平为0V;

4:感应角度:不大于15度;

5:探测距离:2cm-500cm

6: 高精度:可达0.3cm

超声波测距模块工作原理:

(1)采用单片机IO触发测距,给至少10us的高电平信号;

(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

(3)有信号返回,通过echo输出一高电平,高电平

持续的时间就是超声波从发射到返回的时间。

用户通过从trig脚输入40kHz的方波信号,即用户从单片机的IO口连续发出高低电平,产生方波,方波的个数一般为10个左右;然后就可以在接收端等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就

可以读定时器的值,高电平的时间就是此次测距的时间,

根据以下公式计算测量距离:

测试距离=(高电平时间*声速(340m/s))/2;

注意事项

1、超声波发射头向外发射60度角的超声束,因此,在

探头与被测物体之间不能有其他障碍物。

2、超声波模块测得的是被测物体与探头之间的垂直距离,测量时要保持探头正对被测物体。

3、超声波测量会受环境风速、温度等的影响。

4、模块应先插好在电路板上再通电,避免产生高电平的误动作,如果产生了,重新通电方可解决。

可能出现的问题

1、由于超声波会受到被测物体不平整、反射角度、环境风速温度以及多次反射的影响,可能会带来测量数据误

差增大。

2、由于超声波有测量盲区的固有特性,因此,如果近距离测量时,当测量位置发生变化而接收到的数据不变时,说明进入了测量盲区。

3、模块在测量远处物体时,如果没有测量数据返回,可能是超出测量范围,或是测量角度不对。可以适当调整

测量角度。

************************************************* **********************************/

/*模块高精度,盲区2cm,测量范围在2cm~500cm,测量精度3mm*/

#include;

#include;

#define uint unsigned int

#define uchar unsigned char

unsigned char code

WE0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f,0x80};//0x40-不带点

//unsigned char code

WE1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0x f0,0xef,0x80}; //0-9 带点

unsigned char temp[3];

sbit RX=P3^4; //接受端,ECHO

sbit TX=P3^5; //控制端,TRIG

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

bit flag=0;

uint time=0;

uint s=0;

void delay(int xms)//延时大概x毫秒

{

int i,j;

for(i=xms;i>;0;i--)

for(j=110;j>;0;j--);

}

void start() //给至少10us的高电平,启动模块

{

TX=1;

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

_nop_();

_nop_();

TX=0;

}

uchar count()

{

time=TH0*256+TL0;

TH0=0;

TL0=0; //清零

s=(time*1.7)/100;//厘米

return s;

}

void dispros()//数据分割

{

temp[0]=s%1000/100;//百位

temp[1]=s%1000%100/10; //十位

temp[2]=s%100%100%10; //个位

}

void display() //显示函数

{

uchar i;

if(s>;=500||s<=2||flag==1) //进入盲区,溢出

相关文档
最新文档