|
在本篇文章中,我们将主要介绍超声波传感器HC-SR04的工作原理和一些功能,并分享一个Arduino项目示例,您可以参考该示例集成到项目中。我们提供了如何连接超声波传感器的原理图,以及与Arduino开发板一起使用的示例代码。
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. 然后发射器(回声引脚)接收该信号。
信号发送和接收之间的时间可以告知我们到物体的距离。这个是可以实现的,因为我们知道声音在空气中传播的速度。
传感器引脚图
● VCC:+ 5VDC ● Trig:触发(输入) ● Echo:回声(输出) ● GND:GND
Arduino与HC-SR04传感器的连接方式 这款传感器非常酷并且在Arduino创客之中广受欢迎。所以,这里我们提供一个例子展示如何基于Arduino开发板使用HC-SR04超声波传感器。在该示例中,超声波传感器读取与物体的距离并将其写入到串口监视器中。
该示例主要是为了让您了解该传感器的工作原理。然后,您可以在自己的项目中使用该示例。
注意:使用NewPing的Arduino库,可以让您在使用该传感器时更容易些。
所需的组件 ● Arduino UNO开发板 ● 超声波传感器(HC-SR04) ● 面包板 ● 跳线
原理图 按照下意图将HC-SR04超声波传感器连接到Arduino开发板。
下表显示了两者之间的连接方式: 超声波传感器HC-SR04 | Arduino开发板 | VCC | 5V | Trig | Pin 11 | Echo | Pin 12 | GND | GND |
代码 将以下代码上传到Arduino IDE。 首先,分别为Trig和echo引脚创建变量,命名为trigPin和echoPin。trig引脚连接到数字引脚11,echo引脚连接到数字引脚12: - int trigPin = 11;
- int echoPin = 12;
复制代码您还需要创建三个long类型的变量:duration、cm和inch。变量duration保存了信号发射和接收之间的时间。 变量cm将以厘米为单位保存距离,而变量inch将以英寸为单位保存距离。 - long duration, cm, inches;
复制代码在setup()中,我们以波特率9600初始化串口,并将trig引脚设置为输出,将echo引脚设置为输入。 - //Serial Port begin
- Serial.begin (9600);
- //Define inputs and outputs
- pinMode(trigPin, OUTPUT);
- pinMode(echoPin, INPUT);
复制代码在loop()中,我们通过发送一个10微秒的HIGH脉冲来触发传感器。但是,在此之前,我们给出一个短的低电平脉冲,以确保我们得到一个干净的高脉冲: - digitalWrite(trigPin, LOW);
- delayMicroseconds(5);
- digitalWrite(trigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(trigPin, LOW);
复制代码然后,我们读取来自传感器的信号 - 一个HIGH脉冲,其持续时间是从发送信号到接收回波到物体的微秒时间。 - 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,因为我们必须考虑声波被发送,遇到物体,然后返回传感器。 - cm = (duration/2) / 29.1;
- inches = (duration/2) / 74;
复制代码最后,我们在串口监视器中打印结果: - Serial.print(inches);
- Serial.print("in, ");
- Serial.print(cm);
- Serial.print("cm");
- Serial.println();
复制代码
使用NewPing的代码 您也可以使用NewPing库。在这里下载库。安装NewPin库后,您可以上传下面提供的代码。 使用NewPing库获取物体的距离要简单得多。
首先包含NewPing库: 然后,定义trigger和echo引脚。trigger引脚连接到Arduino数字引脚11,echo连接到引脚12。您还需要定义MAX_DISTANCE变量才能使用该库。 - #define TRIGGER_PIN 11
- #define ECHO_PIN 12
- #define MAX_DISTANCE 200
复制代码接下来,创建一个名为sonar的NewPing实例: - NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
复制代码在setup()中,以波特率9600初始化串行通信。 最后,在loop()中,为了得到距离,您只需要使用声纳对象的ping_cm()方法。该方法将给你以厘米为单位的距离。 - 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开发板配合使用。如果您遇到任何问题,请随时在下面进行回复。 |