超音波測距モジュール
1765 ワード
超音波測距モジュール
概要
超音波測距モジュールは距離を測定するための製品であり,超音波の送信と受信により,時間差と音伝搬速度を用いてモジュールから前方障害物までの距離を算出する.超音波測距モジュール:超音波測距モジュールには多くの種類があり、現在比較的よく使われているURM 37超音波センサのデフォルトは232インターフェースで、TTLインターフェースに調整することができ、URM 05大電力超音波センサの試験距離は10メートルまでで、現在のところ試験距離が比較的遠いものと言える.また、比較的よく使われている国外のいくつかのSRFシリーズの超音波モジュールもあり、現在の超音波モジュールの精度は1 cmまでである.
モジュールを51チップマシンで簡単に使用
以下のコードを51チップマシンに記録する(Trigアクセスp 1.0,Echoアクセスp 1.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でシリアルポートを開いて表示できます
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;
}