亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

HC-SR04 超声波测距传感器 Arduino 完整教程

本教程将讲解 HC-SR04 超声波传感器 的工作原理及其与 Arduino 的配合使用。这是 Arduino 项目中最流行的测距/避障传感器。

我已用它制作多个项目,可参考:

  • Arduino 雷达(声纳)
  • 测距仪与数字水平仪
  • 安防报警系统
  • Arduino 六足蚂蚁机器人

可观看视频或阅读图文教程。内容含规格、引脚、接线、代码及进阶应用。

HC-SR04 硬件概览

HC-SR04 是一款低成本、易用的测距传感器,量程 2cm–400cm(约 1 英寸–13 英尺)。

模块包含两个超声换能器:发射器 发射 40kHz 超声脉冲,接收器 接收反射波。原理类似潜艇声纳。

HC-SR04 超声波测距传感器 Arduino 完整教程

主要规格

工作电压5V DC
工作电流15mA
工作频率40kHz
最小量程2cm / 1英寸
最大量程400cm / 13英尺
精度3mm
测量角度<15°
尺寸45 × 20 × 15mm

HC-SR04 引脚定义

HC-SR04 超声波测距传感器 Arduino 完整教程

4 引脚:

  • VCC、GND → Arduino 5V、GND
  • Trig(触发)、Echo(回波) → 任意 Arduino 数字引脚

Trig 发送超声脉冲,Echo 接收反射信号。

HC-SR04 工作原理

发射 40kHz 超声波,遇障碍物反射返回。根据飞行时间与声速计算距离。

HC-SR04 超声波测距传感器 Arduino 完整教程
  1. Trig 拉高 ≥10μs,发射 8 个周期超声脉冲
  2. 脉冲发出瞬间 Echo 变高,开始计时
  3. 若无反射,Echo 38ms 后超时拉低;若有反射,Echo 提前拉低
  4. Echo 高电平持续时间 = 声波往返时间
HC-SR04 超声波测距传感器 Arduino 完整教程

距离公式:距离 = (声速 × 时间) / 2

  • 声速 ≈ 340 m/s = 34 cm/ms = 0.034 cm/μs
  • 除以 2 因声波往返
HC-SR04 超声波测距传感器 Arduino 完整教程

例:Echo 高 2ms → 距离 = (34 cm/ms × 2ms) / 2 = 34cm(注:原文示例 1.5ms 得 25.5cm,此处修正)

Arduino 用 pulseIn(echoPin, HIGH) 读取高电平持续时间(μs)。

HC-SR04 与 Arduino 接线

HC-SR04 超声波测距传感器 Arduino 完整教程

VCC/GND 接 5V/GND,Trig/Echo 接任意数字 I/O 引脚。

所需元件

  • HC-SR04 超声波传感器
  • Arduino 开发板
  • 面包板与跳线

基础测距代码

/* HC-SR04 超声波传感器 Arduino 教程 by Dejan Nedelkovski, www.HowToMechatronics.com */
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  // 发送 10μs 触发脉冲
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // 读取回波时间
  duration = pulseIn(echoPin, HIGH);

  // 计算距离 (cm)
  distance = duration * 0.034 / 2;

  // 串口输出
  Serial.print("Distance: ");
  Serial.println(distance);
}

代码详解

  1. 定义 Trig/Echo 引脚、duration(长整型存储 μs)、distance(整型存储 cm)
  2. setup():配置引脚模式,启动串口 9600 波特率
  3. loop():
    • 先拉低 Trig 2μs 确保干净
    • 拉高 Trig 10μs 触发测距
    • pulseIn(echoPin, HIGH) 返回高电平脉冲宽度(μs)
    • 距离 = duration × 0.034 / 2
    • 串口打印结果

LCD 显示测距结果

结合 16×2 LCD 直观显示距离(cm 与 inch)。

HC-SR04 超声波测距传感器 Arduino 完整教程
HC-SR04 超声波测距传感器 Arduino 完整教程
/* HC-SR04 + LCD 显示 by Dejan Nedelkovski, www.HowToMechatronics.com */
#include 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);

const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;

void setup() {
  lcd.begin(16, 2);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2; // 0.034/2.54

  lcd.setCursor(0, 0);
  lcd.print("Distance: ");
  lcd.print(distanceCm);
  lcd.print(" cm");
  delay(10);

  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
}

使用 NewPing 库简化编程

NewPing 库封装了触发、计时、计算,单行代码获取距离,并提供中值滤波提高精度。

#include 
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400 // 最大测量距离 cm

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

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

void loop() {
  delay(50); // 约 20 次/秒,最小间隔 29ms
  int distance = sonar.ping_cm(); // 获取 cm 距离,0 表示超量程
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}

进阶:sonar.ping_median(10) 取 10 次测量中值(返回 μs),抗干扰更强。详见 NewPing Wiki。

结合 DHT22 温湿度传感器提高精度

声速随温湿度变化:20°C 时约 340m/s,-20°C 时约 315m/s。公式:

声速 = 331.4 + 0.6 × 温度 + 0.0124 × 相对湿度 (m/s)

HC-SR04 超声波测距传感器 Arduino 完整教程

温度补偿代码

/* 温度补偿测距 by Dejan, How To Mechatronics */
#include 
#include "dht.h" // RobTillaart/DHTlib

#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
#define DHT22_PIN 5

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT;

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

void loop() {
  delay(100);
  int chk = DHT.read22(DHT22_PIN);
  float temp = DHT.temperature;
  float hum = DHT.humidity;

  float speedOfSound = 331.4 + 0.6 * temp + 0.0124 * hum; // m/s
  unsigned long duration = sonar.ping_median(10); // μs
  float distance = (speedOfSound * (duration / 1000000.0)) / 2 * 100; // cm

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}

流程:读温湿度 → 计算实时声速 → 获取中值滤波后的飞行时间 → 换算距离。

HC-SR04 尺寸与 3D 模型

提供 3D 模型下载(Thangs):

HC-SR04 超声波测距传感器 Arduino 完整教程

尺寸图(不同厂家略有差异):

HC-SR04 超声波测距传感器 Arduino 完整教程

结语

HC-SR04 是非接触测距、存在检测、液位/位置监测的理想选择。文首已列举相关项目,更多创意应用:

  • 非接触感应垃圾桶
  • 手势智能灯光控制
  • 微型声学悬浮
  • 避障机器人

希望本教程对您有帮助。欢迎评论区提问,别忘了查看我的 30+ Arduino 项目合集!

制造工艺

  1. 树莓派 3 接 HC‑SR04 超声波测距传感器完全指南
  2. 树莓派连接 HC-SR04 超声波传感器实战指南
  3. DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
  4. FlickMote:基于手势的智能家居红外遥控器
  5. 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
  6. 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
  7. 使用 Arduino UNO 和 SR04 超声波传感器构建超声波测距仪
  8. Arduino 超声波水位/温度监测系统:LCD 显示 + 多级声光报警
  9. MKR1000 接入 Azure IoT:DHT22 温湿度实时上云监控
  10. Arduino Nano + TPA81 热堆阵列 + 8×PIR 传感器构建手势/动作检测器
  11. HC-SR04超声波传感器:工作原理与关键应用
  12. Arduino传感器:类型、应用与实战项目