超声波测距
超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。
超声波测距模块类型
URM37超声波传感器默认是232接口,可以调为TTL接口,
URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款
SRF系列的超声波模块,目前的超声波模块精度能到1cm
超声波模块思想
1.串口可用
2.超声波
超声波初始化
让超声波开始工作
测量距离
//ultrasonic.c
#include<stdio.h>
#include<reg52.h>
#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\n");
dis = CSB_GetOnce();
sprintf(arr,"BoDis=%fcm \r\n",dis);
sendstring(arr);
delay(600);
}
return 0;
}
void UART_Routine(void) interrupt 4
{
if (RI == 1)
{
RI = 0;
}
if(TI == 1);
}
//ultr.c
#include<reg52.h>
#include<stdio.h>
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<reg52.h>
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();