Submit

10 / 20

测距仪

测量超声波回波时间,在 OLED 上显示厘米数。

运行此实验 →
ESP32 教学电路插图,显示模组、引脚和本课实验元件

实验目标

移动障碍物,对照回波时间、数字与条形图。

工作原理

测量超声波回波时间,在 OLED 上显示厘米数。 声波先到障碍物再返回,距离只取单程传播。 此处为配套教学模型,硬件示例基于经典 ESP32 与 Arduino-ESP32 3.x;网络、声波、负载和机械运动均为简化演示。

动手试一试

  1. 打开此实验
  2. 移动障碍物,对照回波时间、数字与条形图。

接线

  • 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);
}

检查理解

为什么往返时间要除以二?

查看答案

声波先到障碍物再返回,距离只取单程传播。

参考资料

Arduino-ESP32 ↗ · GPIO 参考 ↗

MAKE A THOUGHTFUL CHOICE

Your shortlist, side by side.

Pricing models are indicative. Check each official website for current plans and limits.