Raspberry Pi GPIO 教程(7)超声波传感器

本文介绍HC-SR04超声波传感器的原理和如何使用Raspberry Pi的GPIO来使用该传感器。

HC-SR04 超声波距离传感器可以报告最远 4米外的物体范围。当您试图防止机器人撞到墙壁时,这是一件好事。它们功率低(适用于电池供电的设备)、价格实惠、易于连接,并且非常受业余爱好者的欢迎。

什么是超声波?

超声波是一种高音调声波,其频率超出了人类听觉的可听范围。

人类可以听到每秒振动约 20 次(低沉的隆隆声)至每秒 20,000 次(高音调的哨声)的声波。然而,超声波的频率超过 20,000 Hz,因此人类听不见。

超声波频率范围频谱

Image

HC-SR04 硬件概述

HC-SR04 超声波距离传感器实际上由两个超声波换能器(Transducer)组成。一个用作发射器,将电信号转换为 40 KHz 超声波脉冲。另一个用作接收器,监听发射的脉冲。当接收器接收到这些脉冲时,它会产生一个输出脉冲,其宽度与前方物体的距离成正比。该传感器可提供 2 厘米至 400 厘米之间出色的非接触式范围检测,精度为 3 毫米。由于它采用 5 伏电压运行,因此可以直接连接到Raspberry Pi或其他5V的逻辑微控制器。技术规格:

操作电压DC 5V
操作电流15mA
操作评率40KHz
最大检测范围4m
最小检测范围2cm
精度3mm
量测角度15 degree
触发输入信号10µS TTL pulse
尺寸45 x 20 x 15mm

HC-SR04 超声波传感器引脚

Image

VCC 为 HC-SR04 超声波传感器供电。您可以将其连接到Raspberry Pi的 5V 输出。

Trig(触发)引脚用于触发超声波脉冲。通过将此引脚设置为高电平 10µs,传感器将启动超声波脉冲。

当超声波脉冲发射时,Echo 引脚变为高电平,并保持高电平直到传感器接收到回声,之后变为低电平。通过测量 Echo 引脚保持高电平的时间,可以计算出距离。GND 是接地引脚。可以将其连接到Raspberry Pi 的接地。

HC-SR04 超声波距离传感器如何工作?

当触发引脚设置为高电平 10µs 时,一切就开始了。作为响应,传感器以 40 kHz 的频率发射八个脉冲的超声波脉冲。这种 8 脉冲模式经过特殊设计,以便接收器能够区分发射脉冲和环境超声波噪声。

这八个超声波脉冲通过空气传播,远离发射器。同时,回声引脚变为高电平以启动回声信号。如果这些脉冲没有被反射回来,回波信号就会超时并在 38ms(38 毫秒)后变低。因此,38ms 的脉冲表示传感器范围内没有障碍物。

Image

如果这些脉冲被反射回来,回声引脚在收到信号后会立即变低。这会在回声引脚上产生一个脉冲,其宽度从 150 µs 到 25 ms 不等,具体取决于接收信号所需的时间。

Image

计算距离

接收脉冲的宽度用于计算与反射物体的距离。这可以使用我们在高中学到的简单的距离-速度-时间方程来计算。记住这个方程的一个简单方法是将字母放在三角形中。

Image

让我们举个例子来更清楚一点。假设我们在传感器前面有一个距离未知的物体,我们在回声引脚上接收到一个宽度为 500µs 的脉冲。现在让我们计算一下物体与传感器之间的距离。为此,我们将使用以下公式。

距离 = 速度 x 时间

这里我们有时间值,即 500 µs,我们知道速度。当然是声速!它是 340 m/s。要计算距离,我们需要将声速转换为 cm/µs。它是 0.034 cm/μs。有了这些信息,我们现在可以计算距离了!

距离 = 0.034 cm/µs x 500 µs

但我们还没有完成!请记住,回声脉冲表示信号发送和反射回来所需的时间。因此,要得到距离,您必须将结果除以二。

距离 = (0.034 cm/µs x 500 µs) / 2 = 8.5cm

接线

将 HC-SR04 连接到Pi 非常简单。将 VCC 引脚连接到 Pi的 5V 引脚,将 GND 引脚连接到接地引脚。现在将触发和回声引脚分别连接到GPIO引脚23和24。

Image

使用gpiozero库,输入以下代码:

from gpiozero import DistanceSensor
from time import sleep

# Initialize the HC-SR04 sensor
sensor = DistanceSensor(echo=24, trigger=23)

print("Ultrasonic sensor initialized. Measuring distance...")

try:
    while True:
        # Get distance in meters and convert to centimeters
        distance_mm = sensor.distance * 1000
        print(f"Distance: {distance_mm:.2f} mm")
        sleep(0.5)  # Delay between readings
except KeyboardInterrupt:
    print("\nMeasurement stopped by user.")
finally:
    sensor.close()
    print("Sensor resources released.")

运行结果示意(用手靠近远离传感器):

有哪些局限性?

HC-SR04 超声波传感器在精度和整体可用性方面确实非常出色,尤其是与其他低成本超声波传感器相比。这并不意味着 HC-SR04 传感器将会一直很好地工作。下图显示了 HC-SR04 的一些局限性:

  • 传感器与物体/障碍物之间的距离大于4米(13ft)。
Image
  • 物体的反射面角度较小,因此声音不会反射回传感器。
Image
  • 物体太小,无法将足够多的声音反射回传感器。另外,如果您的 HC-SR04 传感器安装在设备上较低位置,则可能接收到从地板反射的声音。
Image
  • 一些表面柔软、不规则的物体(例如毛绒动物)会吸收声音而不是反射声音,因此 HC-SR04 传感器可能难以检测到此类物体。
Image