xuanhuanzi 发表于 2025-5-28 16:17

单片机超声波测距原理

单片机超声波测距是一种常见的非接触式距离测量方法,其原理基于超声波在空气中的传播特性。以下是详细的工作原理和实现步骤:
1. 基本原理
超声波特性:超声波是频率高于20kHz的声波,在空气中以约340m/s的速度传播(常温下)。

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


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

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


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

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

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

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

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

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



3. 工作流程
触发信号:

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

超声波发射与反射:

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

回波接收:

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

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

距离计算:

例如,测得
Δt=1ms:



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

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

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

误差来源:

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

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


xuanhuanzi 发表于 2025-5-28 16:17

const int trigPin = 2;
const int echoPin = 3;

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

void loop() {
// 发送触发信号
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

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

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

页: [1]
查看完整版本: 单片机超声波测距原理