HC-SR04超声波测距实验
一、实验原理
(一)超声波及HC-SR04模块介绍
超声波是一种频率高于 20000Hz 的声波,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等,应用于许多不同的领域:
- 检测物体和测量距离:超声波设备用于检测物体和测量距离。
- 医学领域:超声成像或超声检查常用于医学。
- 无损检测:在产品和结构的无损检测中,超声波用于检测不可见的缺陷。
- 工业应用:超声波用于清洁、混合和加速化学过程。
- 动物定位:蝙蝠和鼠海豚等动物使用超声波来定位猎物和障碍物。
HC-SR04是一款广泛使用的非接触式超声波传感器,它能够测量一个物体的距离而无需物理接触。其工作原理是发射一个超声波脉冲,然后听取该脉冲的回声。通过计算声波被发射和接收的时间差,可以计算出距离。HC-SR04 在机器人、障碍物避让系统、自动化工程等领域有很多应用。它因成本低、易于使用和相对准确而受到许多开发者和爱好者的青睐。
以下是 HC-SR04 超声波传感器的一些关键特性:
- 工作电压:一般为 5V 直流电。
- 工作频率:大约 40kHz。
- 测量范围:从 2cm 到 400cm,有较好的准确性。
- 接口:四个引脚(VCC, TRIG, ECHO, GND)。
- 分辨率:约 0.3cm。
(二)超声波模块工作原理
在使用 HC-SR04 时,首先向 TRIG 引脚发送至少 10 微秒的高电平脉冲,以启动超声波脉冲的发射。然后模块自动发射 8 个 40kHz 的超声波,并检测是否有回声。如果回声被检测到,ECHO 引脚输出一个高电平脉冲,脉冲的持续时间与声波往返传感器与物体的时间成正比。通过测量这个时间,可以根据声速计算出传感器到物体的距离。
超声波传感器使用声纳来确定与物体的距离。我们使用的超声波模块由 2 个超声波探头组成:
T
:表示 Transmitter(发射)
,负责发送超声波信号;
R
:表示 Receiver(接收)
,负责接收回响信号。
注意:如果在使用过程中,对其中任意一个探头进行遮挡,都会使超声波无法正常测量距离。
模块底部有四个引脚:
VCC
:5V 供电引脚;
GND
:接地;
TRIG
:控制信号输入;
ECHO
:回响信号输出。
以上时序图表示超声波模块的基本工作原理:
- 采用 IO 口
TRIG
触发测距,给一个 10us 的高电平信号;
- 模块自动发送 8 个 40kHz 的方波,自动检测是否有信号返回;
- 有信号返回,通过 IO 口
ECHO
输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离的计算公式如下:
测试距离 = (高电平时间 × 声速(340m/s)) / 2
回响信号的脉冲宽度与所测的距离成正比。通过发射信号到收到的回响信号时间间隔,可以计算得到距离。
二、硬件电路设计
(一)物料清单(BOM 表)
材料名称 | 数量 |
NanoE 单片机 | 1 |
杜邦线(跳线) | 若干 |
面包板 | 1 |
超声波模块 | 1 |
(二)模块与开发板接线
将 HC-SR04 超声波传感器与NanoE连接。HC-SR04 模块通常有四个引脚:VCC、Trig(触发器)、Echo(回声)、和 GND。
超声波传感器模块引脚 | Arduino NanoE 引脚 |
VCC | 3.3V 或 5V |
Trig | D5 |
Echo | D8 |
GND | GND |
注意:HC-SR04 的 Echo 引脚输出的是 5V 信号。如果其他单片机无法直接输入 5V,你可能需要使用电平转换器,以避免损坏单片机。
三、软件程序设计
该程序的功能是通过超声波模块测算距离并打印在窗口。
(一)代码实现
- 打开工具,确保波特率设置为115200,其他设置参考下图。
#include <Arduino.h>
// 定义Trig和Echo引脚
const int trigPin = 5;
const int echoPin = 8;
// 定义声速 cm/us
const float speedOfSound = 0.0343;
void setup() {
// 初始化串口通信
Serial.begin(115200);
// 设置Trig引脚为输出,Echo引脚为输入
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// 清除Trig引脚状态
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// 产生一个10微秒的高电平脉冲到Trig引脚
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取Echo引脚,返回声波往返时间(微秒),设置超时时间为30000微秒(30ms)
long duration = pulseIn(echoPin, HIGH, 30000);
// 如果返回时间为 0,表示超声波模块无法检测到反射的回波
if (duration == 0) {
Serial.println("Out of range"); // 如果超出检测范围,打印提示信息
} else {
// 计算距离
float distance = duration * speedOfSound / 2; // 距离 = 时间 * 声速 / 2
// 打印距离
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
// 每秒测量一次
delay(1000);
}
1. 代码编译成功并上传后,在工具中查找,或直接点击页面右上方小图标,打开内置的串口监视器;
2. 在其窗口设置波特率为115200,并点击切换自动滚动,通过串口监视器窗口观察打印距离变化;
3. 这样我们就实现了利用HC-SR04实现超声波模块测算距离。