超声波传感器

图片

技术规格

尺寸 21*45mm
工作电压 DV 3V-5.5V
工作电流 5.3mA
工作温度 -40°C-85°C
输出方式 GPIO
感应角度 小于15度
探测距离 2cm-600cm
探测精度 0.1cm+1%

引脚

Vcc:接5V电源

Trig:发送超声波信号,设置输出引脚

Echo:接受超声波信号,设置输入引脚

Gnd:接地

测距原理

超声波测距采用回声探测法,即超声波发射器向某一方向发射超声波,在发射时刻的同时计时器开始计时,超声波在空气中传播,途中碰到障碍物面阻挡就立即反射回来,超声波接收器收到反射回的超声波就立即停止计时。超声波在空气中的传播速度为 340m/s,根据计时器记录的时间 t,就可以计算出发射点距障碍物面的距离 s,即:s=340t/2。

采用Trig引脚触发,给至少10us的高电平脉冲信号,有信号返回时,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间。距离=(高电平脉冲时间*340)/2。(声音在空气中传播速度为340m/s)。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int TrigPin = 12;	//	定义发射脚位
int EchoPin = 13; // 定义接收脚位
float cm; // 设置距离变量

void setup(){
Serial.begin(9600);
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
}

void loop(){
digitalWrite(TrigPin,LOW); // 用低高低电平发送脉冲给TrigPin引脚
delayMicroseconds(2); // 2微秒
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digtalWrite(TrigPin,LOW);

cm = pulseIn(EchoPin,HIGH)/58.0; // 读取脉冲宽度,换算成厘米
Serial.print(cm);
Serial.println("cm");
delay(1000);
}

pulseln()函数

pulseIn() :用于检测引脚输出的高低电平的脉冲宽度。

pulseIn(pin, value)

pulseIn(pin, value, timeout)

Pin— 需要读取脉冲的引脚

Value —需要读取的脉冲类型, HIGH 或 LOW

Timeout —超时时间,单位微秒,数据类型为无符号长整型。

pulseIn函数其实就是一个简单的测量脉冲宽度的函数,默认单位是us。也就是说pulseIn测出来的是超声波从发射到接收所经过的时间。

对于除数58也很好理解,声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。或者,我们作一下单位换算,34,300除以1,000,000厘米/微秒。即为:0.0343厘米/微秒,再换一个角度,1/(0.0343 厘米/微秒)即:29.15 微秒/厘米。这就意味着,每291.5微秒表示10CM的距离。1厘米就是29.15微秒。但是发送后到接收到回波,声音走过的是2倍的距离。
所以实际距离就是1厘米,对应58.3微秒。实际上整个测距过程是测的发出声波到收到回波的时间,你的程序里的第一个distance实际上是时间us。所以换成距离cm,要除以58。当然除以58.3可能更精确。所以我们可以用 pulseIn(EchoPin, HIGH) / 58.00获取测得的距离。