超声波传感器HC-SR04 + Arduino计算
Ultrasonic Sensor HC-SR04 + Arduino Calculation?
我使用以下代码:
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,因为它是双向的。
回顾:
- Arduino发送脉冲到SR04(1000微秒):
digitalWrite(trigPin,HIGH);
,delayMicroseconds(1000);
, &digitalWrite(trigPin,LOW);
。 - SR04发出ping信号并将信号引脚更改为HIGH
- ping命中一个对象,反弹回来,并返回到SR04
- SR04将引脚设置回LOW
Arduino测量信号引脚的长度为HIGH:
duration = pulseIn (echoPin,HIGH);
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- Arduino C++计算触发点
- Arduino:在库中计算出的打印值
- Arduino计算错误 - 不应该时给出负值
- 超声波传感器HC-SR04 + Arduino计算
- Arduino CRC计算和串行读取