108个传感器之-超声波传感器(33)

108个传感器之-超声波传感器(33)

介绍

该模块能测量 2cm3m 之间的距离。最小精度约为 3mm,原理是模拟蝙蝠的超声波信号传递方式。当将信号(降边缘)应用于扳机输入时,传感器开始距离测量。结果是作为PWM TTL信号以回波输出输出。

超声波距离传感器对于障碍物检测,距离测量,水平指标和各种工业应用特别有用。由于其高精度和快速响应时间(测量之间的最小时间为 50µs),传感器可以实时可靠地工作。

该模块具有通用性,为需要准确距离测量的项目提供了简单有效的解决方案。

Technical Specifications
Measurable distance 2 cm - 300 cm
Measurement resolution 3 mm
Min. time between measurements 50 µs

原理

该模块显示了如何使用超声波扬声器和麦克风来测量与物体的距离而无需接触的距离。原理是基于以下事实:在恒定温度下,空气中的声速几乎保持恒定:20°C 下为 343.2 m/s

由此,可以将距离测量转换为时间测量,然后通过对应公式计算距离。

img

当触发时,超声波传感器发出的超声波噪声最大为 200µs。超声波传感器发出40 kHz信号。这意味着在传感器发出超声波噪声的200µs内发出了8个周期(边缘变化)。为了从到达40 kHz信号的这8个周期,如下所示。

1
2
3
4
5
6
一秒钟的时间数= 40000
时间= 1s
单个时期的持续时间:1S / 40000 = 25µS **
超声声音的最大长度 = 200US
单个周期的持续时间 = 25
超声声音中的时期数:200µs / 25µs = 8

该原理保持简单,PCB上的传感器发出了超声波声,然后从对象反射并由PCB上的麦克风拾取。使用超声是因为它超出了人耳的听力范围(约20Hz-22kHz)。

当在“触发输入引脚”接收10μs长的启动信号(ActiveHigh)时,超声信号的传输启动。传输后,在“回声输出信号引脚”(ActiveHigh)上激活信号。如果现在在麦克风上再次拾取反射信号,则在检测后再次停用回声信号。可以测量和转换为距离之间的激活和停用回声信号之间的时间,因为这也对应于 超声信号覆盖扬声器 - >反射壁之间的距离 - >麦克风之间的距离。然后通过近似恒定的空气速度来进行转换 - 然后距离是行进距离的一半。

计算逻辑

引脚连接

Arduino Sensor
5 V +V
GND GND
Pin 2 Echo
Pin 3 Trigger

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <Arduino.h>

// 定义Trig和Echo引脚
#define Trig 3
#define Echo 2
#define Bee 4

void setup() {
// 初始化串口通信
Serial.begin( );
pinMode(Bee, OUTPUT);
// 设置Trig引脚为输出模式
pinMode(Trig, OUTPUT);
// 设置Echo引脚为输入模式
pinMode(Echo, INPUT);
}

void loop() {
// 给Trig引脚发送一个低电平,持续至少2微秒
digitalWrite(Trig, LOW);
delayMicroseconds(2);
// 给Trig引脚发送一个高电平,持续10微秒,触发超声波发射
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
// 将Trig引脚设置为低电平
digitalWrite(Trig, LOW);

// 读取Echo引脚的高电平持续时间(单位:微秒)
long duration = pulseIn(Echo, HIGH);
// 计算距离(单位:厘米),声速约为340m/s,因此需要除以2(往返距离)
float distance = (duration / 2) / 29.1;

// 根据距离调整蜂鸣器频率
if (distance < 30) { // 如果距离小于30厘米
tone(Bee, 1000 - distance * 10); // 距离越近,频率越高
} else {
noTone(Bee); // 距离大于或等于30厘米,蜂鸣器不发声
}

// 在串口监视器中输出距离
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");

// 等待一段时间再次测量
delay(100);
}

如果代码正常运行的话,终端就会提示类似以下代码:

1
2
3
Distance: 41.31 cm
Distance: 41.31 cm
Distance: 41.31 cm

小结

待完善…

参考

dev 的艺术空间

108个传感器之-超声波传感器(33)

http://blog.jzxer.cn/20250104/20250104-ultra/

作者

dev

发布于

2025-01-04

更新于

2025-01-04

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×