2021年8月16日 星期一

https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/

引用來源

 https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/

工作原理 – 超聲波傳感器


它發射 40 000 Hz 的超聲波,超聲波在空氣中傳播,如果其路徑上有物體或障礙物,它將反彈回模塊。考慮到傳播時間和聲速,您可以計算出距離。

超聲波傳感器工作原理

HC-SR04 超聲波模塊有 4 個引腳,接地、VCC、觸發和迴聲。模塊的地和 VCC 引腳需要分別連接到地和 Arduino 板上的 5 伏引腳,觸發和迴聲引腳需要連接到 Arduino 板上的任何數字 I/O 引腳。

本教程所需的組件


您可以從以下任何站點獲取這些組件:

披露:這些是附屬鏈接。作為亞馬遜合作夥伴,我從符合條件的購買中賺取收入。

為了生成超聲波,您需要將 Trig 設置為高狀態 10 µs。這將發出一個 8 週期的聲波脈衝,它將以聲音的速度傳播,並將在 Echo 引腳中接收。Echo 引腳將輸出聲波傳播的時間(以微秒為單位)。

超聲波傳感器圖

例如,如果物體距離傳感器 10 cm,並且聲速為 340 m/s 或 0.034 cm/µs,則聲波將需要傳播大約 294 u 秒。但是你從 Echo 引腳得到的將是這個數字的兩倍,因為聲波需要向前傳播並向後反彈。因此,為了獲得以厘米為單位的距離,我們需要將從回波引腳接收到的旅行時間值乘以 0.034,然後再除以 2。

超聲波傳感器方程

Arduino 和 HC-SR04 超聲波傳感器代碼


首先,您必須定義 Trig 和 Echo 引腳。在這種情況下,它們是 Arduino 板上的引腳編號 9 和 10,它們被命名為 trigPin 和 echoPin。然後,您需要一個 Long 變量,名為“duration”,表示您將從傳感器獲得的旅行時間,以及一個表示距離的整數變量。

// 定義引腳編號
const int trigPin = 9;
const int echoPin = 10;
// 定義變量
持續時間;
整數距離;

在設置中,您必須將 trigPin 定義為輸出,將 echoPin 定義為輸入,並啟動串行通信以在串行監視器上顯示結果。

無效設置(){
pinMode ( trigPin, OUTPUT ) ; // 將觸發引腳設置為輸出
pinMode ( echoPin, INPUT ) ; // 將 echoPin 設置為輸入
串行。開始9600 // 開始串行通信
}

在循環中,您首先必須確保trigPin 清晰,因此您必須將該引腳設置為低電平狀態僅2 µs。現在為了生成超聲波,我們必須將觸發引腳設置為 HIGH 狀態 10 µs。使用pulseIn()函數,您必須讀取旅行時間並將該值放入變量“duration”中。這個函數有2個參數,第一個是echo pin的名字,第二個你可以寫HIGH或LOW。

// 清除觸發引腳
數字寫入觸發引腳,低
延遲微秒2
// 將觸發引腳設置為 HIGH 狀態 10 微秒
數字寫入觸發引腳,高
延遲微秒10
數字寫入觸發引腳,低

在這種情況下,HIGH 意味著pulsIn()函數將等待由反彈聲波引起的引腳變為高電平並開始計時,然後在聲波結束時等待引腳變為低電平,這將停止計時。最後,該函數將以微秒為單位返回脈衝的長度。

為了獲得距離,我們將持續時間乘以 0.034,然後除以 2,正如我們之前解釋過的這個等式。

// 讀取 echoPin,以微秒為單位返迴聲波傳播時間
持續時間 =脈衝輸入echoPin,高
// 計算距離
距離=持續時間* 0.034 /2;
// 在串行監視器上打印距離
串行。打印“距離:” ;
串行。打印距離

最後,我們將在串行監視器上打印距離值。

這是完整的代碼:

/*
* 超聲波傳感器 HC-SR04 和 Arduino 教程
*
* 德揚·內德爾科夫斯基 (Dejan Nedelkovski),
* www.HowToMechatronics.com
*
*/
// 定義引腳編號
const int trigPin = 9;
const int echoPin = 10;
// 定義變量
持續時間;
整數距離;
無效設置(){
pinMode ( trigPin, OUTPUT ) ; // 將觸發引腳設置為輸出
pinMode ( echoPin, INPUT ) ; // 將 echoPin 設置為輸入
串行。開始9600 // 開始串行通信
}
無效循環(){
// 清除觸發引腳
數字寫入觸發引腳,低
延遲微秒2
// 將觸發引腳設置為 HIGH 狀態 10 微秒
數字寫入觸發引腳,高
延遲微秒10
數字寫入觸發引腳,低
// 讀取 echoPin,以微秒為單位返迴聲波傳播時間
持續時間 =脈衝輸入echoPin,高
// 計算距離
距離=持續時間* 0.034 /2;
// 在串行監視器上打印距離
串行。打印“距離:” ;
串行。打印距離
}

Arduino 超聲波傳感器和 LCD 顯示屏示例

這是另一個如何將超聲波傳感器與 Arduino 配合使用並在 LCD 上顯示結果的示例。

Arduino 超聲波傳感器和 LCD 顯示屏示例

您可以按如下方式連接超聲波傳感器和 LDC:

Arduino超聲波傳感器和LDC電路圖

測量距離的代碼與基本示例幾乎相同。在這裡,我們不是在串行監視器上打印結果,而是將它們打印在 LCD 上。如果您需要更多有關如何使用和連接 LCD 與 Arduino 的詳細信息,您可以查看我的特定教程。

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...