超音波測距モジュールの使用
超音波測距モジュールの使用
超音波距離測定モジュール:
超音波測距モジュールには多くの種類があり、現在よく使われている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++);
}
#include
#include
sbit Trig = P1^0;
sbit Echo = P1^1;
void init_115200()
{
SCON = 0x50;
T2CON |= 0X30;
TH1 = 0xFF;
TL1 = 0xFD;
RCAP2H = 0XFF;
RCAP2L = 0XFD;
TR2 = 1;
ES = 1;
EA = 1;
ET0=1;
}
void Delay10us()
{
TMOD |= 0x1;
TH0 = 0xFF;
TL0 = 0xF6;
TR0 = 1;
while(!TF0);
TF0 = 0;
}
void CSB_Rstart() // ,
{
Trig=0;
Trig=1;
Delay10us();
Trig=0;
}
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();
}
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++);
}