10 / 20
测距仪
测量超声波回波时间,在 OLED 上显示厘米数。
运行此实验 →实验目标
移动障碍物,对照回波时间、数字与条形图。
工作原理
测量超声波回波时间,在 OLED 上显示厘米数。 声波先到障碍物再返回,距离只取单程传播。 此处为配套教学模型,硬件示例基于经典 ESP32 与 Arduino-ESP32 3.x;网络、声波、负载和机械运动均为简化演示。
动手试一试
- 打开此实验
- 移动障碍物,对照回波时间、数字与条形图。
接线
- GPIO 5 / 19 — 触发/兼容 3.3V 的回波
- GPIO 21 / 22 — OLED 数据/时钟 · 3V3/GND
示例代码
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
// Use a 3.3V-compatible HC-SR04P. A 5V ECHO needs a divider.
void setup() {
Serial.begin(115200);
pinMode(5, OUTPUT); pinMode(19, INPUT);
Wire.begin(21, 22);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void loop() {
digitalWrite(5, LOW); delayMicroseconds(2);
digitalWrite(5, HIGH); delayMicroseconds(10);
digitalWrite(5, LOW);
unsigned long echo = pulseIn(19, HIGH, 30000);
float cm = echo ? echo / 58.0f : -1;
display.clearDisplay(); display.setTextColor(SSD1306_WHITE);
display.setTextSize(2); display.setCursor(0, 0);
if (cm < 0) display.print("No echo"); else { display.print(cm, 1); display.print(" cm"); }
display.display(); Serial.println(cm);
delay(100);
}检查理解
为什么往返时间要除以二?
查看答案
声波先到障碍物再返回,距离只取单程传播。