使用HC-SR04超声波距离传感器为您的下一个Arduino项目提供强大的功能,该传感器可以检测最远13英尺范围外的物体。当你试图拯救你的机器人免于撞墙时,这是一件好事。
它们功耗低(适用于电池供电的设备)、价格合理、易于连接,非常受电子爱好者欢迎。
什么是超声波? 超声波是一种高频声波,其频率超过人类听觉的可听范围。
人类可以听到每秒振动约20次(低沉的隆隆声)到每秒20,000次(高音哨声)的声波。然而,超声波的频率超过20,000 Hz,因此人类听不见。
HC-SR04传感器硬件概述 HC-SR04超声波距离传感器实际上由两个超声波换能器组成。一个充当发射器,将电信号转换为40 KHz的超声波脉冲。另一个充当接收器并监听传输的脉冲。
当接收器接收到这些脉冲时,它会产生一个输出脉冲,其宽度与前面物体的距离成正比。该传感器在2厘米至400 厘米(~13 英尺)之间提供出色的非接触式范围检测,精度为3毫米。
由于它的工作电压为5V,因此可以直接连接到Arduino或任何其他5V逻辑微控制器。
以下是详细的规格参数: ● 工作电压:DC 5V ● 工作电流:15mA ● 工作频率:40KHz ● 最大范围:4m ● 最小范围: 2cm ● 测距精度: 3mm ● 测量角度:15度 ● 触发输入信号: 10µS TTL 脉冲 ● 尺寸: 45 x 20 x 15mm
HC-SR04 超声波传感器引脚排列 让我们来看看它的引脚排列。
VCC 为HC-SR04超声波传感器供电。您可以将其连接到Arduino的5V输出。 Trig 引脚用于触发超声波脉冲。通过将此引脚设置为高电平10µs,传感器启动超声波脉冲串。 Echo 回波引脚,发射超声波脉冲串时,回波引脚变为高电平并保持高电平,直到传感器接收到回波,之后变为低电平。通过测量 Echo 引脚保持高电平的时间,可以计算出距离。 GND 是接地引脚。将其连接到Arduino的接地端。
HC-SR04超声波测距传感器如何工作? 当触发引脚设置为高电平10µs时,这一切都开始了。作为响应,传感器以40kHz发射8个脉冲的超声波脉冲串。这种8脉冲模式是专门设计的,以便接收器可以将发射的脉冲与环境超声波噪声区分开来。这8个超声波脉冲穿过空气远离发射器。同时,回波引脚变为高电平以启动回波信号。
如果这些脉冲没有被反射回来,则回波信号超时并在38毫秒后变低。因此,38ms的脉冲表明传感器范围内没有障碍物。
如果这些脉冲被反射回来,一旦接收到信号,回波引脚就会输出地电平。这会在回波引脚上产生一个脉冲,其宽度从150µs到25ms 不等,具体取决于接收信号所用的时间。
计算距离 接收到的脉冲宽度用于计算与反射物体的距离。这可以使用我们在高中学习的简单距离-速度-时间方程来计算。记住方程式的一种简单方法是将字母放在三角形中。
让我们举个例子来更清楚地说明。假设我们在传感器前面有一个未知距离的物体,我们在回波引脚上接收到一个500µs宽度的脉冲。现在让我们计算物体离传感器的距离。为此,我们将使用以下等式。 距离 = 速度 x 时间
这里我们有时间值,即500µs,我们知道速度。当然是音速!它是340米/秒。为了计算距离,我们需要将声速转换为厘米/微秒。它是0.034厘米/微秒。有了这些信息,我们现在可以计算距离! 距离 = 0.034 cm/µs x 500 µs
但我们还没有完成!请记住,回波脉冲表示信号发送和反射回来所需的时间。因此,要获得距离,您必须将结果除以二。 距离 = (0.034 cm/µs x 500 µs) / 2 距离 = 8.5 厘米
现在我们知道物体距离传感器8.5厘米。
将HC-SR04传感器连接到Arduino 现在我们已经完全了解了HC-SR04超声波传感器的工作原理,我们可以开始将它连接到Arduino!
将HC-SR04连接到Arduino非常简单。首先将传感器放在面包板上。将VCC引脚连接到Arduino的5V引脚,将GND引脚连接到接地引脚。现在将Trig和Echo引脚分别连接到数字引脚#9 和#10。
完成后,您应该有一些类似于下图所示的内容。
安装库文件 手动触发超声波传感器并测量接收到的信号脉冲宽度需要做很多工作,但幸运的是,我们可以使用许多库。其中比较流行的库是NewPing库。这是我们将在示例中使用的库。
NewPing库非常先进。它一次最多支持15个超声波传感器,可以直接以厘米、英寸或时间段为单位输出。
该库不包含在 Arduino IDE 中,因此您需要先安装它。要安装库,请导航至 Sketch > Include Libraries > Manage Libraries... 等待库管理器下载库索引并更新已安装库的列表。
通过输入“newping”过滤您的搜索。单击第一个条目,然后选择安装。
Arduino示例代码 这是一个简单的草图,它使用串口监视器显示以厘米为单位的距离。在我们开始对其进行详细分析之前,请先尝试一下这个草图。 - // Include NewPing Library
- #include "NewPing.h"
- // Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
- #define TRIGGER_PIN 9
- #define ECHO_PIN 10
- // Maximum distance we want to ping for (in centimeters).
- #define MAX_DISTANCE 400
- // NewPing setup of pins and maximum distance.
- NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
- void setup() {
- Serial.begin(9600);
- }
- void loop() {
- Serial.print("Distance = ");
- Serial.print(sonar.ping_cm());
- Serial.println(" cm");
- delay(500);
- }
复制代码
上传草图后,打开串口监视器,将波特率设置为9600 bps。尝试将传感器指向您周围的物体。您应该看到测量的距离开始输出。
代码说明 首先包含新安装的NewPing库。 然后定义HC-SR04模块的Trig和Echo引脚连接到的Arduino引脚。我们还定义了一个名为MAX_DISTANCE的常量。它将设置一个最大距离,超过该距离的脉冲认为是没有物体。MAX_DISTANCE当前设置为 400 [默认 = 500cm]。 - #define TRIGGER_PIN 9
- #define ECHO_PIN 10
- #define MAX_DISTANCE 400
复制代码在此之后,创建了一个NewPing 库实例sonar。 - NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
复制代码
在setup()函数中,我们初始化与计算机的串口通信。 - void setup() {
- Serial.begin(9600);
- }
复制代码
在loop()函数中,我们只需调用ping_cm()函数并在串口监视器上打印结果。此函数发送ping并返回以厘米为单位的距离。 - void loop() {
- Serial.print("Distance = ");
- Serial.print(sonar.ping_cm());
- Serial.println(" cm");
- delay(500);
- }
复制代码
NewPing库中的其他有用函数 有一些有用的函数可以用于NewPing对象。
● 上面的代码返回以厘米为单位距离。如果您希望结果以英寸为单位,请使用 sonar.ping_in() 函数。 - Serial.print(sonar.ping_in());
复制代码● 上面的草图只有一厘米的分辨率。如果您想获得十进制形式的结果,您可以在持续时间模式而不是距离模式下使用NewPing。您需要将下面这行代码: - Serial.print(sonar.ping_cm());
复制代码线更改为: - Serial.print((sonar.ping() / 2) * 0.0343);
复制代码● NewPing库中有一个名为ping_median(iterations) 的方法可以提高HC-SR04的准确性。该函数进行多次测量而不是一次测量,并丢弃超出范围的读数,然后平均剩余读数。默认情况下,它只需要5个读数,但您可以指定任意数量。 - int iterations = 5;
- Serial.print((sonar.ping_median(iterations) / 2) * 0.0343);
复制代码
|