2016年5月23日 星期一

利用超音波感測器測距

HC-SR04 是一個超音波感測器,它可以探測2cm-400cm的距離,精度為 0.3 cm,感應角度為 15 度。HC-SR04左邊那顆被標示為 T 的是發射器,會發出 40 kHz 的超音波,右邊那顆被標示為 R 的是接收器,可接收反射回來的超音波。



HC-SR04共有 4 支接腳,從左至右分別為 VccTrigEcho GND除了VccGND 外,實驗中我們利用ArduinoPIN 12來提供給Trig信號(10 微秒的 5V 高電位)當對HC-SR04 Trig輸入信號後,就會觸發超音波的發射,接著 Echo 腳位就會處於 5V 高電位狀態;如果接收到反射回來的超音波號, Echo 腳位就變成 0V 低電位狀態:


HC-SR04
Arduino
Vcc
+5V
Trig
可接PIN12
Echo
可接PIN13
GND
GND




在超音波發射之後,只要根據Echo 的高電位持續時間,搭配音速每秒 344 公尺(每公分約29微秒)便可計算出超音波感應器與障礙物之間的距離,由於音波往返是走了兩倍距離,因此 Echo 的高電位持續時間要除以 2才是與障礙物之間的距離。

在網站 http://blog.lyhdev.com/2012/10/arduino-1hc-sr04.html 提供了一個超音波測距的實驗,該網站的程式碼使用 HC-SR04 測距,將結果換算成公分單位,如果偵測到前方物體距離小於一公尺,就會讓PIN7PIN8所接出的兩個LED 燈閃爍,當距離愈近閃爍速度就會愈快。






以下是參考玩物尚誌blog   http://blog.lyhdev.com/2012/10/arduino-1hc-sr04.html的程式碼:

#define TRIGPIN 12
#define ECHOPIN 13
#define LED1 7
#define LED2 8

long ping() {
  digitalWrite(TRIGPIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(10);  //針對Trig10 microsecondHIGH訊號出去
  digitalWrite(TRIGPIN, LOW);
  return pulseIn(ECHOPIN, HIGH)/58;  // microseconds除上58就是距離(cm)
}

void setup() {
  pinMode(TRIGPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}

void loop() {
  long cm = ping();
 
  if (cm <= 100) {
    digitalWrite(LED1, HIGH);
    delay(cm*1.5 + 10);
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, HIGH);
    delay(cm*1.5 + 10);
    digitalWrite(LED2, LOW);
  }
 
  delay(100);
}




沒有留言:

張貼留言

NUMPY的Array介紹與Matplotlib的繪圖功能

NumPy 的 Array 介紹與 Matplotlib 的繪圖功能   1. A rray 的基本運算 :   適用於科學和數學運算的 NumPy 套件中,有一個 Array 的資料結構。 Array 是一個非常類似 list 的序列型態。 但是 Arr...