HC-SR04 是一個超音波感測器,它可以探測2cm-400cm間的距離,精度為 0.3 cm,感應角度為 15 度。HC-SR04左邊那顆被標示為 T 的是發射器,會發出 40 kHz 的超音波,而右邊那顆被標示為 R 的是接收器,可以接收反射回來的超音波。
HC-SR04共有 4 支接腳,從左至右分別為 Vcc、Trig、Echo 和 GND。除了Vcc和GND 外,實驗中我們利用Arduino的PIN 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才是與障礙物之間的距離。
以下是參考玩物尚誌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); //針對Trig送10 microsecond的HIGH訊號出去
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);
}
|
沒有留言:
張貼留言