树莓派3 + HC-SR04超声波测距模块

超声波测距的原理很简单,高中物理题不是做过很多次了么 :D

树莓派3 + HC-SR04超声波测距模块_第1张图片
超声波测距原理


可以看到,知道时间间隔就能得到距离 L。

那么 HC-SR04 是怎么测距的呢?又怎么使用树莓派控制它? 


HC-SR04 介绍

HC-SR04 模块可以测量 3cm - 4m 的距离,精确度可以达到 3mm。这个模块包括 超声波发射器、超声波接收器和控制电路三部分。有 4 个引脚。


树莓派3 + HC-SR04超声波测距模块_第2张图片
HC-SR04 实物图


树莓派3 + HC-SR04超声波测距模块_第3张图片
HC-SR04参数表

接线方式

4 个引脚由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成。

Vcc 和 Gnd 接 5v DC 电源,但不推荐用独立电源给它供电,应使用树莓派或单片机的 GPIO 口输出 5v 和 Gnd 给它供电。不然会影响这个模块的运行。

Trig 引脚用来接收来自树莓派的控制信号。接任意 GPIO 口。

Echo 引脚用来发送测距结果给树莓派。接任意 GPIO 口。

(注意 Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此需要加一个分压电路)


HC-SR04 的测距过程


1. 树莓派向 Trig 脚发送一个持续 10us 的脉冲信号。

2. HC-SR04 接收到树莓派发送的脉冲信号,开始发送超声波 (start sending ultrasoun),并把 Echo置为高电平。    然后准备接收返回的超声波。

3. 当 HC-SR04 接收到返回的超声波 (receive returned ultrasound) 时,把 Echo 置为低电平。


从上述过程可以看出, Echo 高电平持续的时间就是超声波从发射到返回所经过的时间间隔 ~

请对照下图,


树莓派3 + HC-SR04超声波测距模块_第4张图片

电路图与 python 程序


树莓派3 + HC-SR04超声波测距模块_第5张图片
电路图

接线跟前文所说的一样。 GPIO 2 脚接 Trig , GPIO 3 脚接 Echo 。树莓派的 +5v 和 Gnd 与 HC-SR04 的 Vcc 和 Gnd 相连。还有一个分压电路,一端接 Echo ,另一端接 Gnd。

 1k 和 2k 电阻组成了一个分压电路,使 GPIO 3 脚的电压降到了 3.3v 左右。


python 程序

初始化相关引脚:


树莓派3 + HC-SR04超声波测距模块_第6张图片

2 脚连 Trig ,设为输出模式; 3 脚连 Echo,设为输入模式。

然后向 Trig 引脚输入 10us 的脉冲:


树莓派3 + HC-SR04超声波测距模块_第7张图片

time.sleep()  接收的参数单位为 s ,于是把10 us 转换为 0.00001 s 。

接收到这个脉冲后,HC-SR04 发射出超声波,同时把 Echo 置为高电平。在发射之前,Echo 一直为低电平。

据此编写程序,记录超声波发射时的时间。

树莓派3 + HC-SR04超声波测距模块_第8张图片

然后记录超声波返回时的时间。


树莓派3 + HC-SR04超声波测距模块_第9张图片

这样就获得了我们需要的数据 pulse_start 和 pulse_end ,可以算出距离了~

测得距离(单位:m)  =  (pulse_end - pulse_start) * 声波速度 / 2 

声波速度取 343m/s 。

然后再把测得的距离转换为 cm。

测得距离(单位:cm) = (pulse_end - pulse_start) * 声波速度 / 2 * 100 

                             =  (pulse_end - pulse_start) * 17150 



树莓派3 + HC-SR04超声波测距模块_第10张图片

上面的代码片段都是截图,完整的文本程序地址 : github.com/mozjiang/my_raspi/blob/master/ultrasonic_test.py

你可能感兴趣的:(树莓派3 + HC-SR04超声波测距模块)