超音波モジュール

19416 ワード

超音波距離測定


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

超音波測距モジュールタイプ


URM 37超音波センサのデフォルトは232インタフェースで、TTLインタフェースに調整することができて、URM 05大電力超音波センサのテスト距離は10メートルまで、現在のところテスト距離が比較的遠いSRFシリーズの超音波モジュールで、現在の超音波モジュールの精度は1 cmまで

超音波モジュール思想


1.シリアルポート使用可能
2.超音波
超音波初期化超音波動作測定距離
//ultrasonic.c 
#include
#include
#include"ultr.h"
sbit Echo = P1^0;
sbit Trig = P1^1; 
int main()
{
 	float dis;
	char arr[30] = {'\0'};
	Trig = 0;
	init_115200();
	init_CSB();
	while(1)
	{
		sendstring("Welcome CSB!\r
"
); dis = CSB_GetOnce(); sprintf(arr,"BoDis=%fcm \r
"
,dis); sendstring(arr); delay(600); } return 0; } void UART_Routine(void) interrupt 4 { if (RI == 1) { RI = 0; } if(TI == 1); }

//ultr.c
#include
#include
sbit Echo = P1^0;
sbit Trig = P1^1; 
void delay(unsigned int time)
{
	int i;
	int j;
	for(i=0;i<100;i++)
	for(j=0;j<time;j++);
}
void init_CSB()
{
	TMOD = 0x01;
	TH0 = 0xDC;
	TL0 = 0x00;
	EA = 1;
	ET0 = 1;
}
void send(char a)
{
	SBUF = a;
	while(TI!=1);
	TI = 0;
}
void sendstring(char *pstr)
{
	while(*pstr != '\0')
	{
		send(*pstr);
		pstr++;
	}
}
void init_115200()
{
	SCON = 0x50;
	T2CON = 0x01<<4 | 0x01<<5;
	TH2 = 1;
	TL2 = 1;
	TR2 = 1;           
	RCAP2H = 0xFF;
	RCAP2L = 0xFD;
	EA = 1;
	ES = 1;
}
void delay10us()
{	
	TMOD |= 0x1;
	TH0 = 0xFF;		//12*1000/11059200=1us
	TL0 = 0xF6;		//65536-10=x   x=65526=FFF6
	TR0 = 1;
	while (!TF0);
	TF0 = 0;
}
void startCSB()
{
	Trig = 0;	//Trig 10us 
	Trig = 1;
	delay10us();
	Trig = 0;
	return;
}
void startTime()
{
	TH0 = 0;  	 // 0 
	TL0 = 0;
	TR0 = 1; 	 // 
}
void endTime()
{
	TR0 = 0;	// 
}
float BoDis()
{
	float dis;
	unsigned int time;
	time = TH0*256+TL0;
	//time=TH0<<8|TL0;
	dis = (float)time * 0.017;		//dis=(folat)time*340/2*100/1000000
	return dis;
}
float CSB_GetOnce()
{
	startCSB();
	while(Echo != 1);
	startTime();
	while(Echo != 0);
	endTime();
 	return BoDis();
}

//ultr.h
#include
void delay(unsigned int time);
void init_CSB();
void send(char a);
void sendstring(char *pstr);
void init_115200();
void delay10us();
void startCSB();
void startTime();
void endTime();
float BoDis();
float CSB_GetOnce();