本文是有關超聲波傳感器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
它是如何工作的?
超音波感測器使用聲納來確定到物體的距離。這是發生了什麼:
- 發射器(觸發針)發送信號:高頻聲音。
- 當信號找到一個物體時,它會被反射並…
- ……發射器(回波引腳)接收它。
信號發送和接收之間的時間使我們能夠計算到物體的距離。這是可能的,因為我們知道聲音在空氣中的速度。
HC-SR04超音波感測器引腳
引腳
- VCC:+ 5VDC
- Trig:觸發(Input)
- Echo:迴聲(Output)
- GND:地線
帶有HC–SR04的Arduino感測器
該感測器在Arduino 超小型單板電腦中非常受歡迎。因此,在這裡,我們提供了有關如何在Arduino上使用HC-SR04超音波感測器的範例。在該項目中,超音波感測器在串行序列監視器中讀取並寫入到對象的距離。
該項目的目的是幫助您了解該感測器的工作原理。然後,您應該能夠在自己的項目中使用此示例。
注意:有一個名為NewPing的Arduino庫,可以在使用此傳感器時使您的案件更輕鬆。
所需零件
- Arduino UNO
- 超音波感測器(HC-SR04)
- 麵包板
- 跳線
原理圖
下表顯示了您需要建立的連接:
超音波感測器HC-SR04 | Arduino端 |
VCC | 5V |
Trig | pin 11 |
echo | pin 12 |
GND | GND |
程式碼
/* * Terry Lee, http://honeststore.com.tw * * 超音波感測器接線如下: VCC: +5VDC Trig : Trigger (INPUT) - Pin11 Echo: Echo (OUTPUT) - Pin 12 GND: GND */ int trigPin = 11; // Trigger int echoPin = 12; // Echo long duration, cm, inches; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // 感測器由10或更多微秒的高脈衝觸發。 // 預先給出短脈衝,以確保清潔高脈衝: digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 從感測器讀取信號:高脈衝 // 持續時間是發送中的時間(以微秒為單位) // ping接收其回聲的對象。 pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); // 將時間轉換為距離 cm = (duration/2) / 29.1; // 除以29.1或乘以0.0343 inches = (duration/2) / 74; // 除以74或乘以0.0135 Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); }
程式碼如何工作
首先,您為Trig和Echo引腳分別分別建立變數,稱為 trigPin 和 echoPin。trigPin引腳連接到pin 11,而echoPin連接到 pin 12:
int trigPin = 11;
int echoPin = 12;
您還將建立三個long類型的變數: duration, cm, inches
。duration變數儲存發射和接收信號之間的時間。cm 變數將以厘米為單位保存距離,而 inches 變數將以英寸為單位保存距離。
long duration, cm, inches;
在 setup()裡面,以9600的波特率初始化串行端口,並將trigPin引腳設置為輸出,並將echoPin引腳設置為輸入。
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
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);
最後,您只需要將持續時間轉換為距離即可。我們可以使用以下公式計算距離:
distance = (traveltime/2) x speed of sound The speed of sound is: 343m/s = 0.0343 cm/uS = 1/29.1 cm/uS Or in inches: 13503.9in/s = 0.0135in/uS = 1/74in/uS
我們需要將 traveltime 除以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的源始碼
/*
* Posted on https://randomnerdtutorials.com
* created by http://playground.arduino.cc/Code/NewPing
*/
#include <NewPing.h>
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
// NewPing setup of pins and maximum distance
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}
程式碼如何工作
使用NewPing庫獲取得到物體距離要簡單很多。 首先包括NewPing庫:#include <NewPing.h>
然後,定義Trig和Echo引腳。trigPin引腳連接到Arduino Pin 11,而echoPin到 pin 12。您還需要定義MAX_DISTANCE 變數才能使用該庫。
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
然後,您建立一個 NewPing 聲納的實體 :
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
在 設置()裡面,則以9600的波特率初始化序列通信。
Serial.begin(9600);
最後,在 loop(),要獲取距離,您只需使用聲納上的 ping_cm() 上的方法。就可以得到以厘米為單位的距離。
unsigned int distance = sonar.ping_cm();
如果您想得到以英寸為單位的距離,則可以使用 sonar.ping_in()。 故障排除
注意:“如果HC-SR04沒有收到echo,則輸出永遠不會變低。Devantec和Parallax感測器分別在36ms和28ms之後超時。如果您按上述方式使用Pulsin,則沒有返回顯示,程序將暫停1秒鐘,這是Pulsin的預設時間。您需要使用timeout參數。
http://arduino.cc/en/Reference/PulseIn
HC-SR04無法工作到超過10英尺距離,因此總路徑長度為20英尺,路徑時間約為20ms,因此請將超時設置為25或30ms以上。
如果您在E和T之間放置一個電阻,比如說2k2,則僅連接到T,您可以僅從一個Arduino引腳使用HC-SR04。這方面可以查詢超音波感測器的single pin operation。
另外,如果您將HC-SR04與PicAxe配合使用,則需要將時鐘速度提高到至少8MHz,否則它們將看不到回波脈衝的開始,因此脈衝輸入將永遠不會開始。HC-SR04與BS2配合良好。by David Buckley
總結
在本文中,我們向您展示了HC-SR04超音波感測器的工作原理,以及如何將其與Arduino一起使用。對於這一個項目範例,您可以建立一個帶有LED和蜂鳴器的停車傳感器。
如果您是Arduino的初學者,我們建議您遵循Arduino迷你課程,該課程將幫助您快速開始使用這款出色的電路板。
如果您喜歡Arduino,則可能還喜歡:
- Arduino分步項目課程
- Arduino的SD卡模塊指南
- 帶Arduino的DHT11 / DHT22濕度和溫度傳感器指南
- 帶有Arduino的TCS230 / TCS3200顏色傳感器指南
您可以在此處找到我們所有的Arduino項目和教程。
我們希望您對本教程有所幫助。謝謝閱讀。