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

时间:2014-07-25 16:59:19

标签: c++ c arduino sensor

我正在使用此代码:

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微秒脉冲的概念,我们等待反射信号。但我不明白在这段代码中,只有反射信号的脉冲宽度用于计算。

我四处搜索,他们说反射的脉冲宽度与行进的距离成正比。有人可以解释一下这是如何发生的(背后的物理)以及29.1来自哪里?

我读过this documentation但我仍然不理解脉冲宽度概念。

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

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

  

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
  5. Arduino测量信号引脚为高电平的长度:

    duration = pulseIn (echoPin,HIGH);