在智能控制和机器人技术中,距离感知是一项至关重要的功能。HC-SR04超声波传感器以其高精度、稳定性和非接触式测距的优点,广泛应用于障碍检测、物体躲避和水位监测等领域。本项目利用树莓派Pico控制超声波传感器,实现距离测量,并通过LED灯直观显示测量结果。
一、项目目标
通过树莓派Pico板读取HC-SR04超声波传感器的距离值,实时计算物体与传感器的距离,并通过4个LED灯模拟距离的远近。
二、所需元件
- 树莓派Pico开发板 × 1
- HC-SR04超声波传感器 × 1
- LED灯 × 4
- 220Ω电阻 × 4
- 杜邦线 若干
- 面包板 × 1
- USB数据线 × 1
点我获取套件
三、HC-SR04超声波传感器原理
1. 工作原理
HC-SR04通过发射超声波脉冲,并测量其反射回波的时间来计算与物体之间的距离。其内部包含超声波发射器和接收器:
- Trig引脚:触发器,用于发射超声波。
- Echo引脚:接收器,用于接收反射的超声波。
- 测距公式: 距离=回波持续时间×声速2\text{距离} = \frac{\text{回波持续时间} \times \text{声速}}{2}距离=2回波持续时间×声速 简化为: 距离(cm)=回波脉冲宽度(μs)58\text{距离(cm)} = \frac{\text{回波脉冲宽度}(\mu s)}{58}距离(cm)=58回波脉冲宽度(μs)
2. 特性与优点
- 测量范围:2cm~400cm
- 高精度:±3mm
- 不受阳光或黑色材料的影响
四、硬件接线
1. HC-SR04与树莓派Pico连接
- VCC → Pico
3.3V
- GND → Pico
GND
- Trig → Pico
GPIO27
- Echo → Pico
GPIO26
2. LED与树莓派Pico连接
- LED1正极 → Pico
GPIO19
(通过220Ω电阻) - LED2正极 → Pico
GPIO18
(通过220Ω电阻) - LED3正极 → Pico
GPIO17
(通过220Ω电阻) - LED4正极 → Pico
GPIO16
(通过220Ω电阻) - LED负极 → 公共GND
五、代码实现
以下代码分两部分:距离测量与LED显示。
1. 基本距离测量代码
const int TrigPin = 27; // 定义Trig引脚 const int EchoPin = 26; // 定义Echo引脚void setup() {pinMode(TrigPin, OUTPUT); // 设置Trig引脚为输出pinMode(EchoPin, INPUT); // 设置Echo引脚为输入Serial.begin(115200); // 初始化串口通信 }void loop() {digitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWrite(TrigPin, HIGH); // 发出10μs的高电平信号delayMicroseconds(10);digitalWrite(TrigPin, LOW);long duration = pulseIn(EchoPin, HIGH); // 读取回波时间int distance = duration / 58; // 将时间转换为距离Serial.print("Distance: ");Serial.print(distance);Serial.println(" cm");delay(100); }
2. 超声波控制LED代码
const int TrigPin = 27; const int EchoPin = 26; const int PIN_LED1 = 19; const int PIN_LED2 = 18; const int PIN_LED3 = 17; const int PIN_LED4 = 16;void setup() {pinMode(TrigPin, OUTPUT);pinMode(EchoPin, INPUT);pinMode(PIN_LED1, OUTPUT);pinMode(PIN_LED2, OUTPUT);pinMode(PIN_LED3, OUTPUT);pinMode(PIN_LED4, OUTPUT);Serial.begin(115200); }void loop() {digitalWrite(TrigPin, LOW);delayMicroseconds(2);digitalWrite(TrigPin, HIGH);delayMicroseconds(10);digitalWrite(TrigPin, LOW);long duration = pulseIn(EchoPin, HIGH);int distance = duration / 58;Serial.print("Distance: ");Serial.print(distance);Serial.println(" cm");digitalWrite(PIN_LED1, distance <= 7 ? HIGH : LOW);digitalWrite(PIN_LED2, distance <= 14 ? HIGH : LOW);digitalWrite(PIN_LED3, distance <= 21 ? HIGH : LOW);digitalWrite(PIN_LED4, distance <= 28 ? HIGH : LOW);delay(100); }
六、实验现象
-
距离测量:
- 在串口监视器中实时打印物体距离,单位为厘米。
-
LED状态指示:
- 当距离小于7cm时,LED1点亮。
- 当距离小于14cm时,LED1和LED2点亮。
- 当距离小于21cm时,LED1、LED2和LED3点亮。
- 当距离小于28cm时,所有LED点亮。
七、扩展应用
-
智能停车系统:
- 利用超声波传感器实现车位距离测量,LED用于显示停车进程。
-
水位监测:
- 通过超声波传感器监测水位高度,结合蜂鸣器提示用户水位状态。
-
障碍检测:
- 应用于机器人导航中,通过实时测距避开障碍物。
八、总结
本项目通过树莓派Pico和HC-SR04超声波传感器实现了基本的测距功能,并结合LED灯实现了直观的距离指示。项目结构简单、成本低廉,非常适合嵌入式开发入门学习。通过对代码和硬件的理解,用户可以进一步扩展,实现更多复杂的功能