超音波測距モジュールの使用


超音波測距モジュールの使用


超音波距離測定モジュール:


超音波測距モジュールには多くの種類があり、現在よく使われているURM 37超音波センサのデフォルトは232インターフェースで、TTLインターフェースに調整することができ、URM 05大電力超音波センサのテスト距離は10メートルまでで、現在ではテスト距離が比較的遠いものと言える.また、比較的よく使われている国外のいくつかのSRFシリーズの超音波モジュールもあり、現在の超音波モジュールの精度は1 cmまで

動作原理:


超音波測距モジュールは距離を測定するための製品で、超音波を送信して受信することによって、時間差と音の伝播速度を利用して、モジュールから前方障害物までの距離を計算する.

具体的な使用とコード


1、ピンの定義
#include
#include
sbit Trig = P1^0;
sbit Echo = P1^1;

2、シリアルポートのボーレートを設定する
void init_115200()
{
	SCON = 0x50;
	T2CON |= 0X30;
	TH1 = 0xFF;
	TL1 = 0xFD;
	RCAP2H = 0XFF;
	RCAP2L = 0XFD;
	TR2 = 1;
	ES = 1;
	EA = 1;
	ET0=1;
}

3、送信時間の設定
void Delay10us()
{
	TMOD |= 0x1;
	TH0 = 0xFF;
	TL0 = 0xF6;
	TR0 = 1;
	while(!TF0);
	TF0 = 0;
}

void CSB_Rstart()  // , 
{
	Trig=0;
	Trig=1;
	Delay10us();
	Trig=0;
}


4、取得時間と距離
int gettime()// 
{
	unsigned int time = 0;
	time = TH0<<8 | TL0;  //TH0*256+TL0
	return time;
}

float CSB_Getdis(unsigned int time)  //  
{
	float distance;
	distance = (float)time * 0.0017;
	TH0=0;
	TL0=0;// ·
	return distance;
}

void star()
{
	TH0 = 0;
	TL0 = 0;
	TR0 = 1;
}

void end()
{
	TR0 = 0;
}

 void CSB_GetOnce()  // 
{
	CSB_Rstart();
	while(!Echo);// Echo 
	star();
	while(Echo);// Echo 1 
	end();
}

5、測定距離をプリントアウトする
int main()
{
	unsigned int time = 0;
	float dis;
	char buf[24]={'\0'};
	init_115200();
	
	while(1)
	{  
		CSB_GetOnce();
		time = gettime();
		dis = CSB_Getdis(time);
		sprintf(buf,"dis=%fcm\r
",dis); delay(); upt(buf); } return 0; }

いんさつかんすう
void shuchu(char c)
 {
	SBUF = c;
	while(TI==0);
	TI = 0;	   
}

void upt(char *p)
 {
 	while(*p != '\0'){
	shuchu(*p);
	p++;
	}
 }


ちえんかんすう
void delay()
{
	int i;
	int j;
	for(i=0;i<100;i++)
		for(j = 0;j<2000;j++);
}