超声波模块HC-SR04四针通用延时驱动

对距离要求精度不高的情况下,如何使用延时函数来粗略的获取距离呢?

本文意在让初学者学会使用超声波模块

一、模块简介

超声波模块我们在很多领域都能得到应用

HC-SR04模块使用很简单,我们使用它来制作一些小设备完全足够。
我们一般的思路就是使用定时器,这样是非常准确的。

1.基本参数

  • 使用电压:DC—5V
  • 静态电流:小于2mA
  • 电平输出:高5V
  • 电平输出:底0V
  • 感应角度:不大于15度
  • 探测距离:2cm-450cm
  • 测量精度:可达0.2cm

    2.时序

    3.管脚

管脚 说明
VCC 5V电源接口
GND 接地
Echo 信号输出
Trig 信号输入

二、驱动思路

简单的来说,就说我们只需要掌握

  • 如何触发模块
  • 触发后如何获取信息

    1.触发

    从时序中可以看到,Trig信号输入引脚只需要给10us高电平,就能够触发模块工作

    2.接收

    我们只需要等待Echo管脚的高电平,并从记录下高电平的时间即可。

    3.计算

    公式:距离=高电平时间*声速(340M/S)/2。

三、51代码函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void delay10us(void)   //误差 0us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=1;a>0;a--);
}

float count()//超声波函数
{
int s=0,n;
float distance;
Trig=1;//触发引脚拉高
delay10us();
Trig=0;//触发引脚拉低
while(Echo!=1)//等待响应
{
delay10us();
n++;
if(n==2000)//超出响应时间
return -1;
}
while(Exho==1)//得到响应
{
delay10us();
s++;//计数
}
distance=s*0.0034;
return distance;//返回值为cm
}

这里为什么使用10us延时,可能大家会有疑问,这个是取决于机器周期的,不能生成1us的延时函数。

四、END

延时看起来比较简单,但是实际上却有着一定误差,如果可以使用定时器那是最好的。

相信看完这个时序就能理解超声波模块的驱动方法了,
定时器驱动大同小异。