[牛人杂谈] 单片机超声波测距原理

[复制链接]
 楼主| xuanhuanzi 发表于 2025-5-28 16:17 | 显示全部楼层 |阅读模式
单片机超声波测距是一种常见的非接触式距离测量方法,其原理基于超声波在空气中的传播特性。以下是详细的工作原理和实现步骤:
1. 基本原理
超声波特性:超声波是频率高于20kHz的声波,在空气中以约340m/s的速度传播(常温下)。

测距公式:通过测量超声波从发射到接收的时间差(Δt),计算距离 D:

797036836c590a57fc.png
v:超声波速度(受温度影响,需校准)。

除以2:因超声波往返目标物,时间差为双程距离。


2. 系统组成
单片机(如STM32、51单片机、Arduino):控制时序、计算距离。

超声波模块(如HC-SR04):

发射器:发出40kHz的超声波脉冲。

接收器:检测反射回的超声波。

控制电路:处理信号并输出时间差。

显示模块(可选):如LCD、数码管显示距离。



3. 工作流程
触发信号:

单片机发送一个至少10μs的高电平脉冲到Trig引脚,触发模块发射8个40kHz的超声波脉冲。

超声波发射与反射:

超声波在空气中传播,遇到障碍物后反射。

回波接收:

模块的Echo引脚输出高电平,持续时间为超声波往返时间。

单片机检测Echo高电平持续时间(可通过外部中断或定时器捕获)。

距离计算:

例如,测得
Δt=1ms:


549856836c66f6cb33.png
4. 关键注意事项
温度补偿:声速随温度变化,修正公式:

v=331.4+0.6×T(T为摄氏温度)
测量范围:通常2cm~4m(HC-SR04),超出范围可能检测失败。

抗干扰:避免多个超声波模块同时工作,或添加消抖算法。

误差来源:

反射面角度(最好正对被测物)。

软质材料(如布料)可能吸收超声波。


 楼主| xuanhuanzi 发表于 2025-5-28 16:17 | 显示全部楼层
  1. const int trigPin = 2;
  2. const int echoPin = 3;

  3. void setup() {
  4.   Serial.begin(9600);
  5.   pinMode(trigPin, OUTPUT);
  6.   pinMode(echoPin, INPUT);
  7. }

  8. void loop() {
  9.   // 发送触发信号
  10.   digitalWrite(trigPin, LOW);
  11.   delayMicroseconds(2);
  12.   digitalWrite(trigPin, HIGH);
  13.   delayMicroseconds(10);
  14.   digitalWrite(trigPin, LOW);

  15.   // 测量回波时间
  16.   long duration = pulseIn(echoPin, HIGH);
  17.   // 计算距离(cm)
  18.   float distance = duration * 0.034 / 2;

  19.   Serial.print("Distance: ");
  20.   Serial.print(distance);
  21.   Serial.println(" cm");
  22.   delay(500);
  23. }


穷得响叮当侠 发表于 2025-6-4 09:11 | 显示全部楼层
这个原理解释得很清楚,超声波测距确实是一种简单有效的非接触式测量方法。不过,实际操作中,温度补偿和抗干扰措施也非常重要。
星辰伴梦 发表于 2025-6-4 21:43 | 显示全部楼层
非常详细!超声波测距的原理和实现步骤都讲得很清晰,特别是对于初学者来说,这样的解释很有帮助。
夏眠毁灭者 发表于 2025-7-23 15:20 | 显示全部楼层
单片机发射超声波并计时,遇障碍物反射回波,据时间差算距离。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

2307

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

183

主题

2307

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部