风筝
发表于: 2018-12-4 22:17:12 | 显示全部楼层

在本篇文章中,我们将主要介绍超声波传感器HC-SR04的工作原理和一些功能,并分享一个Arduino项目示例,您可以参考该示例集成到项目中。我们提供了如何连接超声波传感器的原理图,以及与Arduino开发板一起使用的示例代码。

ultrasonic-sensor-with-arduino-tutorial.jpg


HC-SR04超声波传感器简介

HC-SR04超声波传感器使用声纳来确定物体的距离,工作原理类似与蝙蝠。它提供出色的非接触范围检测,高精度和稳定的读数,以及易于使用的封装。


测量范围从2厘米到400厘米或1英寸到13英尺。它的工作过程不受太阳光或黑色材料的影响(虽然布料之类的声学软材料很难检测)。它配有超声波发射器和接收器模块。


主要特征

●    电源:+ 5V DC

●    静态电流:<2mA

●    工作电流:15mA

●    有效角度:<15°

●    测距:2厘米 -  400厘米/ 1英寸 -  13英尺

●    分辨率:0.3厘米

●    测量角度:30度

●    触发输入脉冲宽度:10uS

●    尺寸:45mm x 20mm x 15mm


它是如何工作的?

超声波传感器使用声纳来确定到物体的距离。以下是其工作过程:

1.    发射器(触发引脚)发送信号:一段高频声音。

2.    当信号遇到一个物体时,它会被反射;

3.    然后发射器(回声引脚)接收该信号。

How-ultrasonic-sensor-works.jpg

信号发送和接收之间的时间可以告知我们到物体的距离。这个是可以实现的,因为我们知道声音在空气中传播的速度。


传感器引脚图

ultra.png

●    VCC:+ 5VDC

●    Trig:触发(输入)

●    Echo:回声(输出)

●    GND:GND


Arduino与HC-SR04传感器的连接方式

这款传感器非常酷并且在Arduino创客之中广受欢迎。所以,这里我们提供一个例子展示如何基于Arduino开发板使用HC-SR04超声波传感器。在该示例中,超声波传感器读取与物体的距离并将其写入到串口监视器中。


该示例主要是为了让您了解该传感器的工作原理。然后,您可以在自己的项目中使用该示例。


注意:使用NewPing的Arduino库,可以让您在使用该传感器时更容易些。


所需的组件

●    Arduino UNO开发板

●    超声波传感器(HC-SR04)

●    面包板

●    跳线


原理图

按照下意图将HC-SR04超声波传感器连接到Arduino开发板。

ultrasonic-sensor-with-arduino-hc-sr04.jpg

下表显示了两者之间的连接方式:

超声波传感器HC-SR04
Arduino开发板
VCC
5V
Trig
Pin 11
Echo
Pin 12
GND
GND

代码

将以下代码上传到Arduino IDE。

首先,分别为Trig和echo引脚创建变量,命名为trigPinechoPin。trig引脚连接到数字引脚11,echo引脚连接到数字引脚12:

  1. int trigPin = 11;
  2. int echoPin = 12;
复制代码

您还需要创建三个long类型的变量:durationcminch。变量duration保存了信号发射和接收之间的时间。 变量cm将以厘米为单位保存距离,而变量inch将以英寸为单位保存距离。

  1. long duration, cm, inches;
复制代码

setup()中,我们以波特率9600初始化串口,并将trig引脚设置为输出,将echo引脚设置为输入。

  1. //Serial Port begin
  2. Serial.begin (9600);
  3. //Define inputs and outputs
  4. pinMode(trigPin, OUTPUT);
  5. pinMode(echoPin, INPUT);
复制代码

loop()中,我们通过发送一个10微秒的HIGH脉冲来触发传感器。但是,在此之前,我们给出一个短的低电平脉冲,以确保我们得到一个干净的高脉冲:

  1. digitalWrite(trigPin, LOW);
  2. delayMicroseconds(5);
  3. digitalWrite(trigPin, HIGH);
  4. delayMicroseconds(10);
  5. digitalWrite(trigPin, LOW);
复制代码

然后,我们读取来自传感器的信号 - 一个HIGH脉冲,其持续时间是从发送信号到接收回波到物体的微秒时间。

  1. duration = pulseIn(echoPin, HIGH);
复制代码

最后,我们只需要将持续时间转换为距离。我们可以使用以下公式计算距离:

距离=(传播时间/ 2)x声速

声速为:343m / s = 0.0343cm / uS = 1 / 29.1cm / uS

或以英寸为单位:13503.9in / s = 0.0135in / uS = 1 / 74in / uS

我们需要将传播时间除以2,因为我们必须考虑声波被发送,遇到物体,然后返回传感器。

  1. cm = (duration/2) / 29.1;
  2. inches = (duration/2) / 74;
复制代码

最后,我们在串口监视器中打印结果:

  1. Serial.print(inches);
  2. Serial.print("in, ");
  3. Serial.print(cm);
  4. Serial.print("cm");
  5. Serial.println();
复制代码

使用NewPing的代码

您也可以使用NewPing库。在这里下载库。安装NewPin库后,您可以上传下面提供的代码。

使用NewPing库获取物体的距离要简单得多。


首先包含NewPing库:

  1. #include <NewPing.h>
复制代码

然后,定义trigger和echo引脚。trigger引脚连接到Arduino数字引脚11,echo连接到引脚12。您还需要定义MAX_DISTANCE变量才能使用该库。

  1. #define TRIGGER_PIN 11
  2. #define ECHO_PIN 12
  3. #define MAX_DISTANCE 200
复制代码

接下来,创建一个名为sonar的NewPing实例:

  1. NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
复制代码

setup()中,以波特率9600初始化串行通信。

  1. Serial.begin(9600);
复制代码

最后,在loop()中,为了得到距离,您只需要使用声纳对象的ping_cm()方法。该方法将给你以厘米为单位的距离。

  1. unsigned int distance = sonar.ping_cm();
复制代码

如果你想得到以英寸为单位的距离,你可以使用sonar.ping_in()代替。


故障排除

注意“如果HC-SR04没有收到回波,则输出永远不会变低。 Devantec和Parallax传感器分别在36ms和28ms后超时。如果您使用上面的Pulsin然后没有返回echo,程序将挂起1秒,这是Pulsin的默认超时。您需要使用timeout参数。

http://arduino.cc/en/Reference/PulseIn

HC-SR04测量范围几乎不到10英尺,总路径长度为20英尺,路径时间约为20毫秒,因此将超时设置为大于25英尺或30毫秒的时间。


如果你在E和T之间放一个电阻,比如2.2k,那么您只需连接到T,你可以从一个Arduino引脚使用HC-SR04。查找超声波传感器的单引脚操作。

此外,如果你使用带有PicAxe的HC-SR04,你需要将时钟速度提高到至少8MHz,否则他们看不到回声脉冲的开始,所以脉冲永远不会启动。 HC-SR04与BS2配合良好。“


在本篇文章中,我们向您展示了HC-SR04超声波传感器的工作原理,以及如何将其与Arduino开发板配合使用。如果您遇到任何问题,请随时在下面进行回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-21 21:22 , Processed in 0.042728 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表