- 机器人等级考试
Arduino超声波传感器(HC-SR04)入门
- 2025-5-31 18:10:50 @
Arduino超声波传感器(HC-SR04)入门教程
超声波传感器是一种常用的距离检测设备,通过发射超声波并接收回波来计算目标物体的距离。本教程将带你学习如何使用Arduino控制HC-SR04超声波传感器,实现简单的距离测量。
1. 所需材料
- Arduino开发板(如UNO)
- HC-SR04超声波传感器模块
- 面包板与跳线
- LED(可选,用于距离指示)
2. HC-SR04传感器介绍
HC-SR04是一款低成本、高精度的超声波测距模块,测量范围为2cm-400cm,精度可达3mm。
引脚说明:
- VCC:接5V电源
- GND:接地
- Trig:触发引脚(接收Arduino的信号)
- Echo:回响引脚(向Arduino返回信号)
3. 电路连接
Arduino HC-SR04
+5V ───────── VCC
GND ───────── GND
D2 ───────── Trig
D3 ───────── Echo
注意:
- 确保所有连接牢固,避免松动
- 电源需稳定,波动可能导致测量误差
4. 基础代码实现
下面是一个简单的程序,用于读取超声波传感器的距离并通过串口输出:
// 超声波传感器基础代码
const int trigPin = 2; // 触发引脚
const int echoPin = 3; // 回响引脚
void setup() {
Serial.begin(9600); // 初始化串口通信
pinMode(trigPin, OUTPUT); // 设置触发引脚为输出模式
pinMode(echoPin, INPUT); // 设置回响引脚为输入模式
}
void loop() {
long duration, distance;
// 发送触发信号(10微秒高电平)
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取回响信号持续时间(微秒)
duration = pulseIn(echoPin, HIGH);
// 计算距离(厘米)
// 声速 = 340m/s = 0.034cm/μs
// 距离 = 时间 * 声速 / 2(往返)
distance = duration * 0.034 / 2;
// 输出结果到串口监视器
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500); // 延时500毫秒,避免数据更新过快
}
5. 代码解释
-
引脚定义:
trigPin
:连接传感器的触发引脚(发送信号)echoPin
:连接传感器的回响引脚(接收信号)
-
setup()
函数:- 初始化串口通信,用于输出测量结果
- 设置引脚模式
-
loop()
函数:- 触发测量:通过发送10微秒的高电平脉冲触发传感器
- 读取时间:使用
pulseIn()
函数测量回响信号的持续时间 - 计算距离:将时间转换为距离(厘米)
- 输出结果:通过串口监视器显示测量结果
6. 距离指示LED示例
下面的代码增加了LED指示功能,根据距离远近点亮不同颜色的LED:
const int trigPin = 2;
const int echoPin = 3;
const int redLED = 9; // 近距离红灯
const int yellowLED = 10; // 中距离黄灯
const int greenLED = 11; // 远距离绿灯
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
}
void loop() {
long duration, distance;
// 触发测量
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取回响时间
duration = pulseIn(echoPin, HIGH);
// 计算距离
distance = duration * 0.034 / 2;
// 根据距离控制LED
if (distance < 10) { // 近距离(<10cm)
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
} else if (distance < 30) { // 中距离(10-30cm)
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
} else { // 远距离(>30cm)
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
}
// 输出结果
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(200);
}
7. 常见问题及解决方法
-
测量结果不稳定:
- 检查电源是否稳定(建议使用外部电源)
- 避免传感器附近有强电磁干扰
- 添加软件滤波(如多次测量取平均值)
-
测量距离不准确:
- 确认计算公式正确(声速在不同环境下会有差异)
- 避免测量过近或过远的物体(超出传感器范围)
- 确保被测物体表面平整且垂直于传感器
-
传感器无响应:
- 检查引脚连接是否正确
- 确认传感器供电正常(5V)
- 尝试更换Arduino引脚或重启开发板
8. 扩展应用
超声波传感器可用于多种项目,例如:
- 智能垃圾桶(自动开盖)
- 机器人避障系统
- 液位检测装置
- 自动门控制系统
总结
通过本教程,你学会了:
- HC-SR04超声波传感器的基本工作原理
- Arduino与传感器的电路连接
- 使用
pulseIn()
函数测量时间 - 距离计算的基本公式
- 如何添加LED指示功能
这是一个基础的入门教程,你可以根据自己的需求扩展功能,如添加LCD显示、蓝牙数据传输等更复杂的应用。
2 条评论
-
admin SU @ 2025-6-2 18:23:03
这段代码使用超声波传感器(如HC-SR04)来测量距离,并通过串口监视器输出测量结果。下面是添加了详细注释的代码:
// 全局变量:存储测量到的距离值 double dis; /* 超声波测距函数 * 功能:使用超声波传感器测量前方障碍物的距离 * 返回值:测量到的距离(单位:厘米) */ float checkdistance_2_3() { // 触发超声波传感器:发送低电平脉冲2微秒 digitalWrite(2, LOW); delayMicroseconds(2); // 发送10微秒的高电平触发脉冲 digitalWrite(2, HIGH); delayMicroseconds(10); // 结束触发,恢复低电平 digitalWrite(2, LOW); // 读取回声时间(高电平持续时间),并将其转换为距离(厘米) // 公式:距离(cm) = 声波飞行时间(μs) / 58 float distance = pulseIn(3, HIGH) / 58.00; // 延时10毫秒,避免频繁测量造成干扰 delay(10); return distance; } /* 初始化函数 * 功能:配置引脚模式和初始化串口通信 */ void setup() { // 初始化距离变量 dis = 0; // 配置引脚2为输出(触发信号) pinMode(2, OUTPUT); // 配置引脚3为输入(接收回声) pinMode(3, INPUT); // 初始化串口通信,波特率9600bps Serial.begin(9600); } /* 主循环函数 * 功能:循环执行距离测量并输出结果 */ void loop() { // 调用测距函数获取当前距离 dis = checkdistance_2_3(); // 通过串口输出测量结果 Serial.println(dis); // 循环执行(默认无延时,持续测量) }
代码说明:
-
硬件连接:
- 超声波传感器的Trig引脚连接到Arduino的数字引脚2
- 超声波传感器的Echo引脚连接到Arduino的数字引脚3
-
工作原理:
- 通过向Trig引脚发送触发脉冲启动测量
- 传感器发送超声波并在Echo引脚输出高电平
- 使用
pulseIn()
函数测量高电平持续时间(即声波往返时间) - 根据声波在空气中的传播速度(约340m/s)计算距离
-
距离计算公式:
- 声波飞行时间(μs) / 2 = 单程时间
- 单程时间 × 声速(340m/s) = 距离
- 简化后:距离(cm) = 声波飞行时间(μs) / 58
-
注意事项:
- 测量范围通常为2cm至400cm
- 测量精度受环境影响(如温度、障碍物表面材质等)
- 频繁测量时建议添加适当延时,避免干扰
如果需要调整测量频率或增加其他功能(如距离阈值判断),可以在
loop()
函数中进行扩展。 -
-
2025-6-2 13:48:23@
double dis; float checkdistance_2_3() { digitalWrite(2, LOW); delayMicroseconds(2); digitalWrite(2, HIGH); delayMicroseconds(10); digitalWrite(2, LOW); float distance = pulseIn(3, HIGH) / 58.00; delay(10); return distance; } void setup(){ dis = 0; pinMode(2, OUTPUT); pinMode(3, INPUT); Serial.begin(9600); } void loop(){ dis = checkdistance_2_3(); Serial.println(dis); }
- 1