超声波传感器HC-SR04 + Arduino计算

Ultrasonic Sensor HC-SR04 + Arduino Calculation?

本文关键字:计算 Arduino HC-SR04 超声波传感器      更新时间:2023-10-16

我使用以下代码:

int trigPin = 7;
int echoPin = 8;
void setup() {
  Serial.begin(9600);
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
}
void loop() {
  int duration;
  int distance;
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin,LOW);
  duration = pulseIn (echoPin,HIGH);
  distance = (duration/2)/29.1;
  Serial.print("distance = ");
  Serial.println (distance);
  delay(500);
}

我理解在这种情况下我们发送1000µsec脉冲的概念,我们等待反射信号。但是我不明白为什么在这个代码中,只有反射信号的脉冲宽度被用于计算。

我搜索了一下,他们说反射的脉冲宽度与行进的距离成正比。有人能解释一下这是怎么发生的吗(它背后的物理原理),还有29.1是从哪里来的?

我读了这个文档,但是我仍然不理解脉冲宽度的概念。

提前感谢!

就像Chris在评论中提到的那样,输入引脚在发送和接收之间的时间内呈高电平。我不确定它在传输后或传输过程中是否会在一定时间内达到HIGH,但您可能能够在数据表中找到它。

29.1从何而来?

这是声音通过空气的速度…你可以用它把时间换算成厘米。你必须把它除以2,因为它是双向的。

回顾:

  1. Arduino发送脉冲到SR04(1000微秒):digitalWrite(trigPin,HIGH);, delayMicroseconds(1000);, &digitalWrite(trigPin,LOW);
  2. SR04发出ping信号并将信号引脚更改为HIGH
  3. ping命中一个对象,反弹回来,并返回到SR04
  4. SR04将引脚设置回LOW

Arduino测量信号引脚的长度为HIGH:

duration = pulseIn (echoPin,HIGH);