Menu
CoddyTech

超声波回波时间

本课属于 Coddy Arduino 学习旅程的“显示器与传感器”单元。第 18 课,共 24 课。

HC-SR04 测量距离的方式像蝙蝠:它会发出一种人耳听不到的短促声音,并测量回声所用的时间。物体越远,回声返回所需的时间就越长。

它有两个信号引脚。在 TRIG 上发送一个短暂的 HIGH 脉冲,就会让它发出声音。然后 ECHO 变为 HIGH,并一直保持 HIGH,直到回声返回,因此这个 HIGH 脉冲的持续时间就是声音传播所用的时间。

delayMicroseconds() 以百万分之一秒为单位等待,时间足够短,可以用于 10 微秒的触发脉冲。pulseIn(pin, HIGH) 会等待引脚变为 HIGH,并返回它保持 HIGH 的微秒数。如果 1 秒内没有收到脉冲,它就会停止等待并返回 0。

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);     // 触发脉冲
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);

回声可能持续长达 38000 微秒,超过了 int 的存储范围,所以要用 long 保存它。

challenge icon

挑战

中等

TRIG 接在引脚 9 上,ECHO 接在引脚 10 上。在 loop() 中:

  • 在 TRIG 上发送一个持续 10 微秒的 HIGH 脉冲
  • 使用 pulseIn(echoPin, HIGH) 测量回波
  • 使用 Serial.println() 输出时间

按“开始”,在电路板上将物体移近或移远,然后按“检查”。

亲手试试

const int trigPin = 9;
const int echoPin = 10;

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

void loop() {
  // 在 TRIG 上发送一个持续 10 微秒的脉冲
  // 用 pulseIn() 测量回波时间并打印出来
  delay(200);
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

显示器与传感器中的所有课

自己练习: Arduino 在线编辑器