我正在使用此代码:
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但我还是不明白脉冲宽度的概念。
非常感谢!
最佳答案
就像克里斯在评论中提到的那样,输入引脚在发送和接收之间的时间内处于高电平。我不确定它是否在传输后或传输过程中的一段时间内保持高电平,但您也许可以在数据表上找到它。
where does the 29.1 come from?
这是声音通过空气的速度...您可以用它来将时间转换为厘米。您必须将其除以二,因为它有两种方式。
回顾:
- Arduino 向 SR04 发送脉冲(1000 微秒):
digitalWrite(trigPin,HIGH);
,delayMicroseconds(1000);
, &digitalWrite(trigPin,LOW);
。 - SR04 发出 ping 信号并将信号引脚更改为高电平
- ping 命中一个物体,反弹回来,然后返回 SR04
- SR04 将引脚设置回低电平
Arduino 测量信号引脚为高电平的长度:
duration = pulseIn (echoPin,HIGH);
关于c++ - 超声波传感器HC-SR04 + Arduino计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24960780/