2019-12-04

Arduino 控制 HCSR04+ 超聲波測距儀模組

量度距離最基本就是尺
但沒有尺,還有沒有方法量度距離?

HCSR04 是一種超聲波測距儀模組

見下文
見下文
超聲波測距儀模組 正面

見下文
超聲波測距儀模組 背面

見下文
4000Hz 石英晶體振盪器

見下文
在下現有的超聲波測距儀模組HCSR04+ (或 HCSR04P) 是新版的 HCSR04
HCSR04 必須使用 5V 才能啟動
HCSR04+ (或 HCSR04P) 可能使用 3V 至 5V 都能啟動

引腳功能

見下文
引腳方向用途
Vcc接受 3V 至 5V 電源
Trig輸入發出超聲波,計時器時間設定為 0
Echo輸出接收超聲波,計算超聲波回彈時間
Gnd接地

見下文
發射換能器 (Transmitting Transducer) 發射超聲波

見下文
接收換能器 (Receiving Transducer) 接收超聲波

見下文
RCWL-9190 晶片 ,一種 雷達式訊號檢測晶片

見下文
沒有刻上晶片名稱
估計是使用 LM324 之類具備訊號擴大、數學運算的晶片

見下文
同樣沒有刻上晶片名稱
估計是使用 MAX3222 之煩具備控制多頻道發射器及接收器的晶片

見下文
見下文
見下文
見下文
接駁方式
Echo引腳 必須接駁到具有 脈衝寬度調變 (Pulse Width Modulation (PWM)) 的 Arduino 引腳

見下文
見下文
見下文
見下文
在下的懶惰接駁方式
直接將 超聲波測距儀模組 4支引腳 接駁到 Arduino 引腳
同樣需要提供 電源引腳接地引腳

控制超聲波測距儀模組 大約可以檢測 30毫米 至 5000毫米 距離

訊號

  1. 設定 Trig 為低電壓,發出超聲波,計時器時間設定為 0
  2. 設定 Echo 為高電壓,接收超聲波,計算超聲波回彈時間
  3. 設定 Trig 為高電壓,停止發出及接收超聲波

引腳初始化檢測週期
Time延遲2微秒延遲2微秒延遲2微秒
Trig
Echo

訊號波紋時序圖
TRIG ECHO
說明
由發射器發出超聲波,由接收器接收超聲波
超聲波速度 為 1馬赫 ,大約 每秒340.29米
只會接收最快傳回的超聲波 (入射角 = 反射角的軌道為最短路徑)
假如 HCSR04 與 物件 與 相距 340.29米 ,超聲波 由 發射器發出後 便需要 1秒 才到達 物件
超聲波 亦需要 1秒 才回到 接收器,因此 超聲波總共使用 2秒 行走 680.58米
Total Distance = Speed of Sound * Time
由於 音速 通常以 米每秒 計算,而 Arduino 經 HCSR04 接收到的訊號為 微秒,計算時需要轉換單位
假如 Arduino 傳回 500微秒 = 500 / 1000000秒 = 0.00005秒
Total Distance = 340.29 * 500 / 1000000
Total Distance = 0.170145
總距離為 0.170145米 = 0.170145 * 1000 = 170.145毫米
由於只需要計算一次距離,因此 170.145毫米 / 2 = 85.0725毫米
簡化公式為
Distance in Millimeter = 0.170145 * Microseconds

測試程式

const byte BIT_DELAY = 10;
const byte TRIG_PIN = 2;
const byte ECHO_PIN = 3;

void setup() {
    Serial.begin(115200);
    pinMode(TRIG_PIN, OUTPUT);
    digitalWrite(TRIG_PIN, HIGH);
    pinMode(ECHO_PIN, INPUT);
}

void loop() {
    digitalWrite(TRIG_PIN, LOW);
    delayMicroseconds(BIT_DELAY);
    float distance = 0.170145 * pulseIn(ECHO_PIN, HIGH);
    delayMicroseconds(BIT_DELAY);
    digitalWrite(TRIG_PIN, HIGH);
    delayMicroseconds(BIT_DELAY);
    Serial.print(distance);
    Serial.print("mm");
    Serial.println();
    delay(1000);
}

效果

見下文
檢測並不太準確,平均誤差度大約 正負5至10毫米
而且檢測對象不是平面而且堅硬的表面,準確度會更差

總結

超聲波測距儀模組操作上算是非常簡單,只是要留意 Echo引腳 必須使用 PWM
及要了解聲音速度,將讀取到數值,經過計算,可能顯示接近正確的距離
(音速受溫度影響,不是穩定數值)

在下將超聲波測距儀模組製作成函式庫方便使用
可以到 https://create.arduino.cc/editor/hkgoldenmra/8fec7e80-dcc2-4b33-9b42-127ca80b5bee/preview
https://bitbucket.org/hkgoldenmra/hcsr04module
或在 Terminal 輸入
git clone "https://bitbucket.org/hkgoldenmra/hcsr04module.git" --depth=1
下載

沒有留言 :

張貼留言