超音波モジュール
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();
//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();