一、主要参数
1:使用电压:DC—5V
2:静态电流:小于2mA
3:电平输出:高5V
4:电平输出:低0V
5:感应角度:不大于15度
6:探测距离:2cm-450cm
7:高精度 可达0.2cm
二、工作原理
1.采用IO口TRIG触发测距,给至少10us的高电平信号来启动模块。
2.模块自动发送8个40khz的方波,自动检测是否有信号返回。
3.如果有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。通过公式计算测试距离=(高电平时间*声速(340M/S))/2。
三、运用超声波模块测距
1.代码展示(C51单片机驱动超声波模块)
#include <reg52.h>
#include <stdio.h>
sbit TRIG = P2^7; //单片机2.7针脚对应 trig
sbit ECHO = P2^6; / /单片机2.6针脚对应 echo
#define uint unsigned int
char buf[32];
float S;
void Mydelay(uint i)//i*10us 延时
{
uint z = 922;
i = z*i;
while(i != 0){i--;}
}
void delay(uint z)//1ms 延时
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void senddelay(unsigned long time){
int i = 0;
int j = 0;
for(i = 0;i<100;i++){
for(j = 0;j<time;j++);
}
}
void init()//初始化函数
{
TMOD=0X01; //设 T0 为方式 1, GATE=1;
TH0=0;
TL0=0;
EA=1; //开启总中断
ET0=1; //允许 T0 中断
TR0=0;
TRIG = 0;
}
void initUart()
{
EA = 1;
ES = 1;
SCON = 0x40;
TH2 = 0xFF;
TL2 = 0xFD;
RCAP2H = 0xFF;
RCAP2L = 0xFD;
T2CON = 0x34;
}
void StartModule() //启动模块
{
TRIG = 1;
Mydelay(2);//20us的延时保证高电平持续时间足够来启动模块
TRIG = 0;
}
void Conut(void) //计算距离
{
uint time;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100;
}
void sendsingle(char single){
SBUF = single;
while(TI != 1);
TI = 0;
}
void sendMes(char *p)
{
while( *p != '\0'){
sendsingle(*p);
p++;
}
senddelay(100);
}
void main(){
initUart();
init();
while(1){
StartModule();
while(!ECHO); //当 ECHO 为零时等待
TR0=1; //开启计数
while(ECHO); //当 ECHO为 1 计数并等待
TR0=0; //关闭计数
Conut(); //计算
TH0=0; //计数器复位准备下一次计数
TL0=0;
// sendMes("Welcome\n");
sprintf(buf,"S=%f\r\n",S);
sendMes(buf);
delay(80);
}
}
2.结果展示
通过串口接收到超声波模块返回的信息。