但沒有尺,還有沒有方法量度距離?
HCSR04 是一種超聲波測距儀模組
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo4YfFXUelrp2ODDAKxZSzSV9lVIygOOisCgBGsihlm1nn7DyUYsNC457u1-6CLQ3TkfZ47nqVR0scMOkJVJetre5Z76uZbdvHXnRuEksHoMLn3LIITmeotUCSJO39FKj90k84rAd_rXs/w600/ultrasonic-distance-sensor-03.jpg)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMingWKn1dkzEfjq1rsMYKMlCjh5XYGNhpLSLA91KI2t7jFKZVkoJAkjg6gfIdgaHQu4KUFxrGf2QwH6n5D8JJEWmC2Z47vJ1yMREncBIiCA_SK4HxbDmSA923J_DRXQcZI0n3q6si_Bo/w600/ultrasonic-distance-sensor-04.jpg)
超聲波測距儀模組 正面
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5ZtgpBb4v4UJaxpDRlL6bHy5WJShDjzChQCFzWIkkfAiGczbxUvTVNyH6HGmSYy84qx-2lVfaKWH0USLz8Ah9_tzyH2s5hwkK5C6HCtADSWWPzfGXf5Eu_ELmklGMvbSKAODBQfqHoUo/w600/ultrasonic-distance-sensor-05.jpg)
超聲波測距儀模組 背面
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXVH6OgXY9e5inxuMvhoP79redBr4QCOiXwQretlWH6MbBFsrzyN63rWgMx-buRztyP5yxvXqn1s-2Z1XuJsC3eHfgwOmthiRXmMd94FxIMDld7YXOWd7dMK7NecHzGN7SXafeX49yKjw/w600/ultrasonic-distance-sensor-06.jpg)
4000Hz 石英晶體振盪器
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgTdy5B7BiiNWFF_vWQkxTBJ93alUGldHluzNLqwjYShba4o7m3Zla1gMRGXR2wylmZCY1RjLC3gz6NBOEnVrygLU921l8sbHckUn-QN-p8or1nRtMaRlBYrBuLrzhbRzpcpD3E_dMaiI/w600/ultrasonic-distance-sensor-07.jpg)
在下現有的超聲波測距儀模組 是 HCSR04+ (或 HCSR04P) 是新版的 HCSR04
HCSR04 必須使用 5V 才能啟動
HCSR04+ (或 HCSR04P) 可能使用 3V 至 5V 都能啟動
引腳功能
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOPdBsafQKfdnGDT7ABHK-AgD8GcS6dtmjzp9MFlFA7nMudlPB33MEk357SZMLAaLxtJYxT_EZJztx-aIFssr8hjlpk7ceIOZ7ohwUkYlQPRFsKtcsln2xQ2tdxXCTi-EttHrHBvUi3Tk/w600/ultrasonic-distance-sensor-08.jpg)
引腳 | 方向 | 用途 |
---|---|---|
Vcc | 接受 3V 至 5V 電源 | |
Trig | 輸入 | 發出超聲波,計時器時間設定為 0 |
Echo | 輸出 | 接收超聲波,計算超聲波回彈時間 |
Gnd | 接地 |
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmdL81_SzHtmA3Q_S4SOzA0Pp_HCRVyozG7lq2ljfJTMjuCCXROZISE0tpfm3lkH4h1V7sR1zmYGWWWpbzlwLNTjctpQ2cb1BGz5_F99ahJJ38t-QxP8MUR0WaYMs0_QwfO9R6_Mk6MCQ/w600/ultrasonic-distance-sensor-09.jpg)
由 發射換能器 (Transmitting Transducer) 發射超聲波
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlfoLW1XPdbQK_YxvME7DIEayNV9Hs7qiH891MCvbIhgX3KLQ7zM3gHwvv8-hrHAh4pb7SNi5gcQQdCShRRpDFOONHzo6EPt77DOdDZaWy1ov7DoFQgi9g9VpTODQoI_jf_6lBZz-CEA/w600/ultrasonic-distance-sensor-10.jpg)
由 接收換能器 (Receiving Transducer) 接收超聲波
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwr1s_lqpeM3_zgxMzES2_z7vCAiR9y6A7ne6cfNyO09ah8Exxuz_dg91mOjjGN57TBPd4nMxNLKA-igvabVrLgw9XYJP8s98KFQ8tQ9Iw17szit3gmpOKLI3Dgn9fC-ncHpzM_pkAHFk/w600/ultrasonic-distance-sensor-11.jpg)
RCWL-9190 晶片 ,一種 雷達式訊號檢測晶片
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZXqHCwIpuE23tabvOnTcx3Q7Xmjdwk3HahHPwVZb6j2JqR-Q-2TVMwR6zQTeOUBKoLm7DPIxkdZuA6qtTwXhT9JskhBIHEeEFsfltqoKxmDAAxqF5iasl8KFsOUAkaYfTMKnHQuW3igA/w600/ultrasonic-distance-sensor-12.jpg)
沒有刻上晶片名稱
估計是使用 LM324 之類具備訊號擴大、數學運算的晶片
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzTS0urJf8_IIKIpvgOjuAiYgDbzfl6SFHA3thFB_lWZBnRl7yqzodtLnvOBzErbQFFWyZMwtSQF-xqDo2e0AHTMJ9Qs5doFWfMW311ZVn8gO4VR9dLoaHr1EzkGSe3Mioid4rJ5WH_tg/w600/ultrasonic-distance-sensor-13.jpg)
同樣沒有刻上晶片名稱
估計是使用 MAX3222 之煩具備控制多頻道發射器及接收器的晶片
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTYTrNsyT2tI4YyB37bUwqC5F0aUSD_SKu2Veci2NREUwsYxI4rBEqFF5NMdlM7Ynjle4WtCj4gNhXQE3-oErJrGDQefRT9CVcTE4GtPhbY6NHcl1KtqWpKrrFsJHFw1DpUA32hnAGEco/w600/ultrasonic-distance-sensor-01.png)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4-XMWq5WNGTEw24D6IyuHi7ufPCGDpSUg3YVOvPNvFf4d-piiXYW4V85Arbg99TExCI4x4wTWMRrB4m23xdaUP4ig2wiBKiwhg8y5xQ_g0OJkBnixfXtWKUmo2G4Owie4o4tsKVbQL0I/w600/ultrasonic-distance-sensor-14.jpg)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWAL3kcGJKRhwyo2IlYr2r6vylpL0BaXbFT47g9bgIkW1Yd_UcvBUUxo0hGALb8G-74s_u265j6kVQEwG4-eG-qEgqoUft2sVd1zHJVfFqW8FBK1JMA55VzRgIxUeBIQPqv5kqkVgDwVs/w600/ultrasonic-distance-sensor-15.jpg)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTK9SSXu1WWwe28wfVMqgS300sGoH-hcfTP2DpTQ2POhya2xjsS26d1DZqbjBdny1RtX4g8PAiJF8gj6uDIhFqd11R2SHHNJ-B8mYsw8zkBpqbkc5oTmblX2N6x7lWw9cjM-okv1SuJG4/w600/ultrasonic-distance-sensor-16.jpg)
接駁方式
Echo引腳 必須接駁到具有 脈衝寬度調變 (Pulse Width Modulation (PWM)) 的 Arduino 引腳
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVeSFMHMDAEaNCSsVg_QM_v_BZ3F-1Itvgtr9T9kiCtJ2OPvHXGXcu37L6Z1T7HjabZfpH-SMPH6N6oCc0JZgALzbcGSTAr7X0wU1s37qcHcEqy2DLWfCJgoP-dsch3hOpI4YBSKkz3kA/w600/ultrasonic-distance-sensor-02.png)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjA7y7oTiBAOn1Mk11_tYmAd8xBflv-D2ZSsAsidbmtWGPomvsgfgaj2EQgQTnLfT55v5cdhfrk7MWluLrWdiVOmPHoVeRVjUx-wtrTpYnvc_0S5KB7HDmBYav-qPY6oFjyIynbzlY4ww/w600/ultrasonic-distance-sensor-17.jpg)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZEvigy4DNYoZTzWdJ3KjdObvRfcVxZpw01E3ZcKW4T-6hQg1JLtZI8rxzw9uo89BxzR6CQVypopoTozPQsiJPqHVh8o5B-iZmLXxhdi1W63KKNQvmddSenU5onZJZf8YbLFb0_3W4bFg/w600/ultrasonic-distance-sensor-18.jpg)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYyavm4PXG5MqAYz6N7aE2bd-QmEtGxc4009hzeOr7Xf4u44BOfg09p3m60A5LPrkB6FfkEWCy5jXN9Dhho2VU9CElP_mtVJIYWNPWGFWUXQUulJNs401edJy2hBAlhKpMgJnKTTVnAwQ/w600/ultrasonic-distance-sensor-19.jpg)
在下的懶惰接駁方式
直接將 超聲波測距儀模組 4支引腳 接駁到 Arduino 引腳
同樣需要提供 電源引腳 及 接地引腳
控制超聲波測距儀模組 大約可以檢測 30毫米 至 5000毫米 距離
訊號
- 設定 Trig 為低電壓,發出超聲波,計時器時間設定為 0
- 設定 Echo 為高電壓,接收超聲波,計算超聲波回彈時間
- 設定 Trig 為高電壓,停止發出及接收超聲波
引腳 | 初始化 | 檢測週期 | ||
---|---|---|---|---|
Time | 延遲2微秒 | 延遲2微秒 | 延遲2微秒 | |
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); }
效果
![見下文 見下文](https://lh3.googleusercontent.com/-QoEOTFO89sk/XeUkMXFn1yI/AAAAAAACqRc/9fubBLn_V-YHZ8bp0lIXw3EGNHYi69F0gCEwYBhgL/w600/ultrasonic-distance-sensor-20.jpg)
檢測並不太準確,平均誤差度大約 正負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下載
沒有留言 :
張貼留言