有時候有必要 測量距離 為此,您可以使用多個傳感器。 我們已經撰寫了一篇文章來討論 高精度距離傳感器,例如VL52L0X。 該傳感器屬於ToF型,由於採用了激光,因此基於非常精確的測量。 但是,如果精度對您而言並不那麼重要,而您想要一種可以以低廉的價格測量距離的東西,那另一種可能性 您觸手可及的就是HC-SR04.
在的情況下,中 HC-SR04距離傳感器,距離通過超聲波測量。 該系統類似於VL52L0X的光學方法。 就是說,它被發射,有一個反彈並被接收,但是在這種情況下,它不是超聲或紅外,而是超聲。 如果您對電子,機器人技術或業餘製造商充滿熱情,則可以將其用於眾多DIY項目,例如機器人的障礙物檢測系統,存在傳感器等。
什麼是HC-SR04?
好吧,很明顯,正如我在前幾段中已經提到的那樣, HC-SR04是基於超聲波的低精度距離傳感器。 有了它,您就可以輕鬆快速地測量距離,儘管原則上不經常使用它。 大多數情況下,它被用作換能器,以檢測障礙並通過與傳感器響應相關的其他機制來避開障礙。
的外觀 HC-SR04非常獨特且易於識別。 此外,它是Arduino入門套件中非常受歡迎的項目,並且是許多項目所必需的。 它很容易識別,因為它有兩個“眼睛”,實際上是該模塊集成的超聲設備。 其中一個是超聲波發射器,另一個是接收器。 它的工作頻率為40 Khz,因此人類聽不到。
超聲波傳感器的原理
的原則 它是基於模擬您將石頭扔進井中以測量其深度時使用的一種。 您扔石頭,然後花多長時間才能跌落至谷底。 然後,您可以計算經過時間的速度,並得出石頭經過的距離。 但是在那種情況下,傳感器就是你。
在HC-SR04中,發射器將發射超聲波,當它們從物體或障礙物反彈時,將被接收器捕獲。 這 電路將進行必要的計算 該回波以確定距離。 如果您知道某些動物(例如海豚,鯨魚或蝙蝠)用來定位障礙物,獵物等的系統,那麼您可能對此也很熟悉。
通過計算從發送脈衝到接收到響應之間的時間,可以準確地確定時間,從而確定距離。 請記住,[空間=速度時間] 但是對於HC-SR04,您必須將此量除以/ 2,因為從超聲波發出並經過太空直到碰到障礙物並返回的時間已被測量,因此該時間大約為這一半...
引腳和數據表
您已經知道,要查看已獲取的模型的完整數據,最好的辦法是 查找數據表 製造商的混凝土。 例如,這是一個 英國威廉希爾Sparkfun數據表,但還有更多可用的PDF。 但是,以下是HC-SR04的最重要的技術數據:
- 引腳:4個引腳,分別用於電源(Vcc),觸發器(Trigger),接收器(Echo)和接地(GND)。 觸發器指示何時應激活傳感器(何時啟動超聲),因此有可能知道接收器接收到信號的時間。
- 饋送:5伏
- 超聲波頻率:40 Khz,人耳只能聽到20Hz至20Khz的聲音。 低於20Hz(次聲)和高於20Khz(超聲)的一切都不會被察覺。
- 消耗(待機):<2mA
- 消費工作:15毫安
- 有效角度:<15º,根據物體的角度,您可能會獲得更好或更差的結果。
- 實測距離:從2厘米到400厘米,儘管從250厘米開始,分辨率不是很好。
- 中分辨率:實際距離和測量值之間相差0.3厘米,因此儘管不像激光那樣被認為具有很高的精確度,但對於大多數應用而言,測量值還是可以接受的。
- 價格:起價€0,65
與Arduino集成
至 將其連接到Arduino再簡單不過了。 您只需要負責將GND連接到標有Arduino 5v電源的Arduino相應輸出,即Vcc和HC-SR04的其他兩個引腳,以及為您的項目選擇的輸入/輸出。 您可以看到,在較高的Fritzing方案中這很簡單...
您只需要考慮一下,虎鬚必須接收至少10微秒的電脈衝才能正常激活。 以前,您必須確保它處於LOW值。
至於 Arduino IDE的代碼,則無需與其他組件一起使用任何庫或類似的庫。 只需編寫公式即可計算出距離,幾乎沒有其他...當然,如果您希望您的項目對HC-SR04傳感器的測量做出響應,則必須添加所需的代碼。 例如,您可以使伺服電機沿一個方向或另一個方向移動一定距離,以避開障礙物,或者使電機停止,並在檢測到接近時激活警報等,而不是簡單地在控制台上顯示測量值。 。
有關編程的更多信息: Arduino手冊(免費PDF)
例如,您可以看到 用作基礎的基本代碼:
//Define las constantes para los pines donde hayas conectado el pin Echo y Trigger const int EchoPin = 8; const int TriggerPin = 9; void setup() { Serial.begin(9600); pinMode(TriggerPin, OUTPUT); pinMode(EchoPin, INPUT); } //Aquí la muestra de las mediciones void loop() { int cm = ping(TriggerPin, EchoPin); Serial.print("Distancia medida: "); Serial.println(cm); delay(1000); } //Cálculo para la distancia int ping(int TriggerPin, int EchoPin) { long duration, distanceCm; digitalWrite(TriggerPin, LOW); //para generar un pulso limpio ponemos a LOW 4us delayMicroseconds(4); digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 10us delayMicroseconds(10); digitalWrite(TriggerPin, LOW); duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm return distanceCm; }
我發現解釋非常有用和簡單。