超声波测距模块

超声波测距模块

简介

超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。
超声波测距模块:
超声波测距模块有好多种类型,目前比较常用的有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打开串口进行查看

你可能感兴趣的:(超声波测距模块)