超聲波模組就是透過發射與接收 (Trig/Echo) 音頻的原理來計算距離的。使用方法參考店家對 US-100 型號的說明:
一個控制口發一個10US以上的高電位,就可以在接收口等待高電平輸出;一有輸出就可以開定時器計時,當此口變為低電位時就可以讀定時器的值,此時就為此次測距的時間,方可算出距離。如此不斷的週期測,就可以達到你移動測量的值了。
這裡我整理了兩個測試程式。其中第一種方式是直接針對腳位作電位的改變,但需要自行將往返的時間 (每公分的音頻速度為 29 微秒);第二種方式則是透過 <<NewPing.h>> 函式庫,採以 Wrapper 較高階的作法來取得音頻的距離。
實際觀察方式就是透過 Serial Port 回傳所感測的距離資料,所以在 Arduino IDE 環境中,需點選【工具】→ 【序列埠監視窗】開啟監視窗觀察測試的結果。
UltraSoniceTest1.ino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | const byte trigPin = 9; // Trig 接腳編號 const byte echoPin = 10; // Echo 接腳編號 unsigned long duration; // 儲存高脈衝的持續時間 unsigned long ping() { digitalWrite(trigPin, HIGH); // 觸發腳位設定成高電位 delayMicroseconds(5); // 持續 5 微秒 digitalWrite(echoPin, LOW); // 接收腳位設定成低電位 return pulseIn(echoPin, HIGH); } void setup() { pinMode(trigPin, OUTPUT); // 觸發腳位設為輸出 pinMode(echoPin, INPUT); // 接收腳位設為輸入 Serial.begin(9600); // 初始化序列埠 } void loop() { duration = ping() / 58; // 把高脈衝時間值轉換為公分單位 // The speed of sound is 29 microseconds per centimeter. Serial.print(duration); // 顯示距離 Serial.print("cm"); Serial.println(); delay(1000); // 延遲一秒鐘再重新測量 } |