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

标签 c++ c arduino sensors

我正在使用此代码:

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?

这是声音通过空气的速度...您可以用它来将时间转换为厘米。您必须将其除以二,因为它有两种方式。

回顾:

  1. Arduino 向 SR04 发送脉冲(1000 微秒): digitalWrite(trigPin,HIGH);, delayMicroseconds(1000);, &digitalWrite(trigPin,LOW);
  2. SR04 发出 ping 信号并将信号引脚更改为高电平
  3. ping 命中一个物体,反弹回来,然后返回 SR04
  4. SR04 将引脚设置回低电平

Arduino 测量信号引脚为高电平的长度:

duration = pulseIn (echoPin,HIGH); 

关于c++ - 超声波传感器HC-SR04 + Arduino计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24960780/

相关文章:

c++ - 使用 NUnit 在 VS 2010 中调试 native /托管 C++

c - 是否有任何 C 库为 GNU/Linux 实现 C11 线程?

c++ - 在不设置环境变量的情况下在 Windows 7 中运行 MinGW gcc 编译器

c - 估算微 Controller 的计算预算 (Arduino)

c++ - CMake add_executable 在另一个目录

c++ 将 vector<Inherited*> 转换为 vector<abstract*>

c++ - Boost Karma,重新排序结构元素

无法使用表存储在 Azure 云辅助角色中加载文件或程序集 Microsoft.Data.OData Version=5.2.0.0 错误

android - 在 Android 上将 USB 波特率从 9600 更改为 115200

node.js - Arduino 使用 NodeJS 读取串行监视器并在 React 网页中输出