YFROBOT创客社区

标题: Arduino使用3线控制HC-SR04超声波 [打印本页]

作者: UNO    时间: 2022-6-8 09:03
标题: Arduino使用3线控制HC-SR04超声波
本帖最后由 UNO 于 2023-1-4 08:26 编辑

使用HC-SR04 超声波距离传感器为您的下一个Arduino项目提供强大的能力,该传感器可以报告最远4米外的物体范围。如果您想避免您的机器人撞墙,这是非常好的信息!它们功耗低(适用于电池供电的设备)、价格便宜、易于交互,并且在爱好者中非常受欢迎。作为奖励,它甚至看起来很酷,就像你最新的机器人发明的眼睛!

[attach]2496[/attach]

HC-SR04硬件概述
HC-SR04超声波距离传感器的核心是由两个超声波换能器组成。一个充当发射器,将电信号转换为40KHz超声波脉冲。接收器侦听传输的脉冲。如果它接收到它们,它会产生一个输出脉冲,其宽度可用于确定脉冲行进的距离。
该传感器体积小,易于在任何机器人项目中使用,并提供2厘米至400厘米(约1英寸至13英尺)之间的出色非接触式范围检测,精度为3毫米。由于它的工作电压为5伏,因此可以直接连接到Arduino或任何其他5V逻辑微控制器。

HC-SR04超声波传感器引脚
[attach]2497[/attach]
VCC:是HC-SR04超声波距离传感器的电源,我们连接Arduino上的5V引脚。
Trig:用于触发超声波脉冲。
Echo:当接收到反射信号时,引脚会产生一个脉冲。脉冲的长度与检测到发射信号所花费的时间成正比。
GND: 连接到Arduino的地。


HC-SR04超声波测距传感器如何工作?
当一个持续时间至少为10μS(10微秒)的脉冲被施加到触发引脚时,一切就开始了。作为响应,传感器以40KHz的频率发射8个脉冲的声波。这种8脉冲模式使设备的“超声波特征”独一无二,使接收器能够将发射的模式与环境超声波噪声区分开来。
八个超声波脉冲穿过空气远离发射器。同时,Echo引脚变为高电平以开始形成回声信号的开始。
如果这些脉冲没有被反射回来,那么Echo信号将在38毫秒后超时并返回低电平。因此,38毫秒的脉冲表明传感器范围内没有障碍物。
[attach]2498[/attach]
如果这些脉冲被反射回来,则一旦接收到信号,Echo 引脚就会变低。这会产生一个脉冲,其宽度在15μS到25mS 之间变化,具体取决于接收信号所花费的时间。
[attach]2499[/attach]
然后使用接收到的脉冲宽度来计算到反射物体的距离。这可以使用我们在高中时学到的简单的距离-速度-时间方程来计算。如果你忘记了,记住距离、速度和时间等式的一种简单方法是将字母放入三角形中。
[attach]2500[/attach]

让我们举一个例子来更清楚地说明。假设我们在传感器前面有一个未知距离的物体,并且我们在 Echo 引脚上接收到一个宽度为 500 μS 的脉冲。现在让我们计算物体离传感器的距离。我们将使用下面的等式。
Distance = Speed x Time

在这里,我们有时间的值,即500μs,我们知道速度。我们有什么速度?当然是音速!其340米/秒。为了计算距离,我们必须将声速转换为cm/μs。快速谷歌搜索“以厘米/微秒为单位的声速”会说它是0.034厘米/微秒。你可以做数学,但搜索它更容易。无论如何,有了这些信息,我们可以计算距离!
Distance = 0.034 cm/μs x 500 μs

但这还没有完成!请记住,脉冲表示信号发送和反射回来所花费的时间,因此要获得距离,您需要将结果分成两半。
Distance = (0.034 cm/μs x 500 μs) / 2
Distance = 8.5 cm
所以,现在我们知道物体距离传感器8.5厘米。

将HC-SR04连接到Arduino UNO
3线模式是您只需要一个连接到单个Arduino数字I/O引脚而不是两个。在3线模式下,单个I/O引脚既用作输入又用作输出,因为从来没有同时使用输入和输出的时间。通过消除一个I/O引脚,我们可将其用于其他用途。当使用像ATtiny85这样的I/O引脚数量有限的芯片时,它也很有用。
以下是使用3线模式将HC-SR04传感器连接到Arduino的方法。
[attach]2501[/attach]

端口可根据自己的需求改动。

Arduino代码–使用NewPing库
我们将使用一个特殊的库,而不是手动触发超声波传感器并测量接收到的信号脉冲宽度。有很多可用的,最通用的是一个叫做“ NewPing ”的。
NewPing库说明与使用:https://playground.arduino.cc/Code/NewPing/
[AppleScript] 纯文本查看 复制代码
#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     9
#define MAX_DISTANCE 200  // 检测最大值 max=400cm

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(50);
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm());
  Serial.println("cm");
}

串口输出:
[attach]2502[/attach]

有什么限制?
HC-SR04超声波测距传感器在精度和整体实用性方面确实非常出色,尤其是与其他低成本的测距传感器相比。这并不意味着HC-SR04 传感器能够测量“一切”。HC-SR04不适合测量以下几种情况:

·传感器与物体/障碍物之间的距离超过检测距离。
·物体的反射表面角度较浅,因此声音不会反射回传感器。
·物体太小,无法将足够的声音反射回传感器。此外,如果HC-SR04安装在设备较低位置,您可能会检测到从地板反射的距离。
·在对传感器进行试验时,我们发现一些具有柔软、不规则表面的物体(例如毛绒玩具)会吸收而不是反射声音,因此HC-SR04传感器可能难以检测到。

温度对距离测量的影响
尽管HC-SR04对于我们的大多数项目(例如入侵者检测或接近警报)都相当准确;但有时您可能想要设计一种在户外或异常炎热或寒冷环境中使用的设备。如果是这种情况,您可能需要考虑空气中的声速随温度、气压和湿度变化的事实。
由于声速会影响我们的 HC-SR04 距离计算,这可能会影响我们的读数。如果温度(°C) 和湿度已知,请考虑以下公式:
Speed of sound m/s = 331.4 + (0.606 * Temp) + (0.0124 * Humidity)











欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1