超声波测距模块
简介
超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。
超声波测距模块:
超声波测距模块有好多种类型,目前比较常用的有URM37超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款了,另外还有比较常用的国外的几款SRF系列的超声波模块,目前的超声波模块精度能到1cm。
用51单片机对模块进行简单使用
将以下代码烧录51单片机中(Trig接入p1.0,Echo接入p1.1)
sbit Trig= P1^0;
sbit Echo= P1^1;```
unsigned int time=0;
void delay()//输出间隔
{
int i;
int j;
for(i=0;i<200;i++)
for(j=0;j<1000;j++);
}
void send(char byte)//输出字符
{
SBUF=byte;
while(TI!=1);
TI=0;
}
void hstring(char *j)//输出字符
{
while(*j!= '\0')
{
send(*j);
j++;
}
}
void inituaer()//初始化串口
{
SCON=0x50;
//SCON |=0x1<<6;
//SCON |=0x1<<4;
T2CON |=0x1<<4;
T2CON |=0x1<<5;
TH2=0xFF;
TL2=0xFD;
RCAP2H=0xFF;
RCAP2L=0xFD;
TR2=1;
IE |=0x1<<4;
IE |=0x1<<7;
}
void CSB_Rstart()//声波发出
{
TH0=0;
TL0=0;
TR0=1;
}
void delay10us()//10微秒的缓冲
{
TMOD |=0x1;
TH0 =0xff;
TL0 =0xf6;
TR0 =1;
while(!TF0);
TF0=0;
}
void CSB_End()//声波返回
{
TR0=0;
}
void CSB_Init()
{
Trig=0;
Trig=1;
delay10us();
Trig=0;
}
int getBoTime()//计算时间
{
unsigned int time;
time = TH0<<8 | TL0;
return time;
}
float getDis(unsigned int time)//用时间换算距离
{
float dist;
dist=(float)time*0.017;
return dist;
}
int main()
{
float dis;
int i=0;
int j=0;
char buf[24]={'\0'};
inituaer();
while(1)
{
CSB_Init();
while(Echo!=1);
CSB_Rstart();
while(Echo!=0);
CSB_End();
time = getBoTime();
dis=getDis(time);
sprintf(buf,"dis=%fcm",dis);
hstring(buf);
delay();
}
return 0;
}
烧录后即可在stc-isp打开串口进行查看