帶有Arduino的超聲波傳感器HC-SR04完整應用指南
本文是有關流行的超聲波傳感器HC – SR04的應用指南。我們將解釋其工作原理,向您展示其某些功能,並分享一個您可以遵循的Arduino項目示例,以將其集成到您的項目中。我們提供了有關如何連接超聲波傳感器的示意圖,以及與Arduino一起使用的示例電路。
描述
HC-SR04超聲波傳感器像蝙蝠一樣使用超聲波來確定到物體的距離。它以易於使用的封裝提供出色的非接觸範圍檢測,具有高精度和穩定的讀數。它帶有超聲波發射器和接收器模塊。
特徵
以下是HC-SR04超聲波傳感器的一些功能和規格列表:
電源:+ 5V DC靜態電流:<2mA工作電流:15mA有效角度:<15°測距距離:2cm – 400 cm / 1「 – 13ft解析度:0.3釐米測量角度:30度觸發輸入脈衝寬度:10uS尺寸:45mm x 20mm x 15mm它是如何工作的?
超聲波傳感器使用超聲波來確定到物體的距離。這裡面到底發生了什麼?
1. 發射器(觸發引腳)發送信號:高頻聲音。
2. 當信號找到一個物體時,它會被反射。
3. 接收器(回波引腳):接收它反射回來的信號。
信號發送和接收之間的時間使我們能夠計算到物體的距離。這是有可能的,因為我們知道聲音在空氣中的傳播速度。
HC-SR04超聲波傳感器引腳
引腳
VCC:+5VDC觸發:觸發(輸入)回聲:回聲(輸出)地:地帶有HC的Arduino – SR04傳感器
該傳感器在Arduino愛好者中非常受歡迎。因此,在這裡,我們提供了有關如何在Arduino上使用HC-SR04超聲波傳感器的示例。在該項目中,超聲波傳感器在串行監視器中讀取並寫入到對象的距離。
該項目的目的是幫助您了解該傳感器的工作原理。然後,您應該可以在自己的項目中使用此示例。
注意:有一個名為NewPing的Arduino庫,可以使您在使用此傳感器時的生活更加輕鬆。
所需零件
這是遵循下面這個教程所需要的部品列表:
Arduino UNO 超聲波傳感器(HC-SR04)麵包板跳線原理圖
按照下一個示意圖將HC-SR04超聲波傳感器連接到Arduino。
下表顯示了您需要建立的連接:
程序代碼
將以下代碼上傳到您的Arduino IDE。
int trigPin=11;
int echoPin=12;
long duration,cm,inches;
void setup()
{
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
}
void loop()
{
digitalWrite(trigPin,LOW);
delayMicroseconds(5);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
pinMode(echoPin,INPUT);
duration=pulseIn(echoPin,HIGH);
cm=(duration/2)/29.1;
inches=(duration/2)/74;
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
代碼如何工作
首先,為觸發器和回顯引腳分別創建變量,分別稱為 trigPin和 echoPin。觸發引腳連接到數字引腳11,回波引腳連接到數字引腳12:
int trigPin=11;
int echoPin=12;
您還將創建三個類型為long的變量: duration, cm 和 inch。duration的持續時間可以保存信號的發射和接收之間的時間。該 cm 釐米變量將保存的是距離釐米,而英寸變量將保存英寸的距離。
long duration,cm,inches;
在 setup()中,以9600的波特率初始化串行埠,並將觸發引腳設置為輸出,並將回顯引腳設置為輸入。
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
在loop()中,通過發送10微秒的HIGH脈衝來觸發傳感器。但是,在此之前,請提供一個短的LOW脈衝,以確保獲得乾淨的HIGH脈衝:
digitalWrite(trigPin,LOW);
delayMicroseconds(5);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
然後,您可以從傳感器讀取信號-一個HIGH脈衝,其持續時間是從信號發送到接觸到物體的回波之間的時間(以微秒為單位)。
duration=pulseIn(echoPin,HIGH);
最後,您只需要將持續時間轉換為距離即可。我們可以使用以下公式計算距離:
距離=(持續時間/ 2)x聲速
聲音速度為:343m / s = 0.0343 cm / uS = 1 / 29.1 cm / uS
或以英寸為單位:13503.9in / s = 0.0135in / uS = 1 / 74in / uS
我們需要分割一下,因為走了2次,因為我們必須考慮到超聲波被送出,碰到物體,然後返回到傳感器。
cm=(duration/2)/29.1;
inches=(duration/2)/74;
最後,我們在串行監視器中列印結果:
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
NewPing的原始碼
您也可以使用NewPing庫。安裝NewPin庫後,您可以上傳下面提供的代碼。
#include <NewPing.h>
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
NewPingsonar(TRIGGER_PIN,ECHO_PIN,MAX_DISTANCE);
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(50);
unsigned intdistance=sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}
代碼如何工作
使用NewPing庫獲取到對象的距離要簡單得多。
首先包括NewPing庫:
#include <NewPing.h>
然後,定義觸發和回波引腳。觸發引腳連接到Arduino數字引腳11,回波連接到引腳12。您還需要定義MAX_DISTANCE變量才能使用該庫。
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
然後,創建一個名為sonar的NewPing實例:
NewPingsonar(TRIGGER_PIN,ECHO_PIN,MAX_DISTANCE);
在setup()中,以9600的波特率初始化串行通信。
Serial.begin(9600);
最後,在loop()中,要獲取距離,您只需要對超聲波對象使用ping_cm()方法。這將為您提供以釐米為單位的距離。
unsignedint distance=sonar.ping_cm();
如果要以英寸為單位獲取距離,則可以使用sonar.ping_in()代替。
故障排除
注意:「如果HC-SR04沒有收到回聲,則輸出永遠不會變低。Devantec和Parallax傳感器分別在36ms和28ms之後超時。如果您按上述方式使用Pulsin,則沒有返回回顯,程序將掛起1秒鐘,這是Pulsin的默認超時時間。您需要使用timeout參數。
HC-SR04幾乎無法工作到10英尺,因此總路徑長度為20英尺,路徑時間約為20ms,因此請將超時設置為25或30ms以上。
如果您在E和T之間放置一個電阻,比如說2k2,則僅連接到T,您可以僅從一個Arduino引腳使用HC-SR04。查找超聲波傳感器的單針操作。
另外,如果您將HC-SR04與PicAxe配合使用,則需要將時鐘速度提高到至少8MHz,否則它們將看不到回波脈衝的開始,因此脈衝輸入將永遠不會開始。HC-SR04與BS2配合良好。」
寫到最後
在本文中,我們向您展示了HC-SR04超聲波傳感器如何工作,以及如何與Arduino一起使用。對於這個項目示例,您可以構建一個帶有LED和蜂鳴器的停車傳感器。
如果您是Arduino的初學者,對Arduino比較感興趣,請關注我吧,我會分享更多的Arduino項目。