首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超声波传感器HC-SR04 + Arduino计算?

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

Stack Overflow用户
提问于 2014-07-25 16:59:18
回答 1查看 1.7K关注 0票数 0

我用的是这个代码:

代码语言:javascript
复制
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是从哪里来的?

我读过这份文件,但我仍然不理解脉宽的概念。

事先非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-26 12:53:33

就像Chris在评论中提到的那样,输入引脚在发送和接收之间的时间很高。我不太确定在传输之后或传输期间,它是否会持续很高,但是您可能会在数据表上找到它。

29.1是从哪里来的?

那是空气中的声速..。你可以用它把时间转换成厘米。你必须把它除以二,因为它有两条路。

概述:

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

Arduino测量信号引脚的长度很高:

代码语言:javascript
复制
duration = pulseIn (echoPin,HIGH); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24960780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档