簡體   English   中英

超聲波傳感器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微秒脈沖並等待反射信號的概念。 但是我不明白在這段代碼中如何僅將反射信號的脈沖寬度用於計算。

我四處搜尋,他們說反射的脈沖寬度與行進的距離成正比。 有人可以解釋這是如何發生的(其背后的物理原理)以及29.1的來源嗎?

我閱讀了本文檔,但我仍然不了解脈沖寬度的概念。

提前謝謝了!

就像克里斯在評論中提到的那樣,輸入引腳在發送和接收之間的時間內變為高電平。 我不確定傳輸后或傳輸過程中它是否在一定時間內變高,但是您可能能夠在數據表上找到它。

29.1來自哪里?

那就是空氣中的聲音速度...您可以使用它將時間轉換為厘米。 您必須將其一分為二,因為它有兩種方式。

概括:

  1. Arduino向SR04發送脈沖(1000微秒): digitalWrite(trigPin,HIGH); delayMicroseconds(1000); ,& digitalWrite(trigPin,LOW);
  2. SR04發出ping信號並將信號引腳更改為HIGH
  3. ping會碰到一個對象,然后彈回,然后返回SR04
  4. SR04將引腳設置回低電平

Arduino以此來測量信號引腳為高電平的長度:

duration = pulseIn (echoPin,HIGH); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM