在本教材中,將對低成本簡易停車輔助感測器的安裝和使用進行說明。當駕駛停車時,本裝置使用兩隻HC-SR04超聲波感測器和四隻壓電蜂鳴器多次提醒駕駛本車後面及周圍汽車的接近情況,同時並發出嗶嗶聲警報。我們還將解決其他問題,像是車內的防水和電線鋪設等。
硬體
軟體
工具
首先請準備好下方的電子裝置,以便在車內實際安裝汽車感測器前能對系統進行測試。
在本項目中,我們僅在車輛後部使用兩隻感測器:一隻位於保險杠的左側,另一隻位於保險杠的右側。大多數新車的輔助警報系統最多可配備六隻感測器,從而可實現更精確的定位。
HC-SR04 感測器帶有以下四根引腳:
上述模組功能的更詳細說明,可參見上一教材:帶零件和感測器的Arduino — 超聲波感測器的用法
在下圖2中列出了將汽車感測器和蜂鳴器連接到Arduino的圖表。
以下為編寫一個程式的基本指南。一般而言,任何微控制器固件都包括以下四個基本元素:
與軟體發展不同,對微控制器進行程式設計時,通常對代碼的大小進行適當限制。My Arduino Uno軟體配有一個記憶體為32 KB的Atmega328。該配置足以滿足本次應用的需要。
1 2 3 4 5 6 |
#define trigPin1 13 #define echoPin1 12 #define buzzerPin1 6 #define trigPin2 11 #define echoPin2 10 #define buzzerPin2 7 |
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { Serial.begin (9600); pinMode(trigPin1, OUTPUT); pinMode(echoPin1, INPUT); pinMode(buzzerPin1, OUTPUT); pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT); pinMode(buzzerPin2, OUTPUT); pinMode(2, OUTPUT); // We will use the pin 2 as ground. We need to make sure it digitalWrite(2,LOW); // is in LOW position so it works as a ground. } |
通過函數pinMode()和digitalWrite()可對微控制器引腳進行簡易週邊配置。本次應用中使用pinMode()函數來設定指定引腳的電流流向。可用作電流或訊號的輸入或輸出。設定流向後,引腳僅可按該流向工作。可使用digitalWrite()函數將指定的數位引腳設定為HIGH(高)或LOW(低)。本例中將引腳2設定為另一個新增接地,用來連接其中一個器件的GND引腳。
1 2 3 4 |
void loop() { calculateDistance(echoPin1, trigPin1,buzzerPin1); //Get the distance for the left calculateDistance(echoPin2, trigPin2,buzzerPin2); //Get the distance for the right } |
為簡單起見,特定義了一個函數(calculateDistance(訊號電路、觸發器、蜂鳴器),該函數在其中一隻感測器中優先使用,同時也可在另一隻感測器中使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
//********************************************************************************** //***Function to measure time of return of an ultrasound echo.************ //***Set up for distances shorter than 2 m, which is enough for parking** //***Beyond that HC-SR04 is not reliable *********************************** //********************************************************************************** void calculateDistance(int echo, int trigger, int buzzer){ long duration, distance; digitalWrite(trigger, LOW); // Set the trigger pin of the HC-SR04 to LOW delayMicroseconds(2); // Wait a little to stabilize the sensor digitalWrite(trigger, HIGH); // Set the trigger HIGH and send a pulse delayMicroseconds(10); // Wait for 10us until the wave comes back digitalWrite(trigger, LOW); // Set the trigger pin of the HC-SR04 to LOW again duration = pulseIn(echo, HIGH); // Arduino’s built in function pulseIn reads a pulse // (either HIGH or LOW) on a pin. Returns the length of // the pulse in microseconds or 0 if no complete pulse // was received within the timeout. distance = (duration/2) / 29.1; // The speed of sound is 340 m/s or 29 microseconds // per centimeter. // The ping travels out and back, so to find the distance // if the object we take half of the distance travelled. if (distance >= 200 || distance <= 0){ Serial.println("Out of range"); // Use some feedback in the serial port for // debugging } else { tone(buzzer,2000,25); // Arduino’s built in function tone generates a square // wave of the specified frequency (2000Hz) for the // indication time (25 ms) delay(distance*10); // The delay gives feedback beeping faster the closer // we get to an object Serial.print(distance); // Use some feedback in the serial port for // debugging Serial.println(" cm"); } } |
應用時首先啟動一根引腳(觸發器),經過一段時間後從另一個引腳(訊號回饋)傳回的回饋資訊才能到達該引腳。針對這一時段,可以進行一些假設並計算訊號反饋電路的相應距離(例如聲速為340米/秒或29微秒/釐米)。可將該距離用作一個參數,用來確定蜂鳴器所發出的2000赫茲的嘟嘟聲的頻率(我通過反復試驗才構想出這一方法,您可隨意將其改為您喜歡的音調)。
同時使用了幾個內建函數,如tono(引腳、頻率、持續時間),digitalWrite(引腳),delayMicroseconds(持續時間)和pulseIn(引腳、脈衝峰值)。
找到汽車後部的防水區域。將感測器安裝於該區域。在試驗車裡有幾個可選位置:
若將汽車感測器放置於尾燈罩或後保險杠內,則必須鑽孔以便超聲波射極和接收。但鑽孔也可能帶來不利影響,如進水(淋雨、濺水等),因此鑽孔必須十分考究。由於超聲波無法透過密封劑,因此用密封劑作為防水材料不可取。而且很難根據感測器來確定孔的位置,從而難以避免衍射效應。
欲瞭解衍射波的更多資訊,請按一下此處。
基於上述原因,特將汽車感測器置於車牌附近,該區域中後備箱門/把手下方的間隙足夠大,從而避免了鑽孔的麻煩。在該位置僅需稍微調整感測器的方向,使之對準汽車的一角即可。
找到Arduino和Piezo蜂鳴器所在位置。在該步驟中,需拆下車門並找到一個安全的空位,用來連接電子裝置。
以下步驟十分有趣!通過車內面板就能看出您汽車的全新尺寸。車內空間很大,還可以加裝很多裝置(也可用於將來裝修!)。還有許多內部電線為車輛安全元件供電。切勿觸摸任何重要的電線。
您必須非常小心車內零件。
通過車牌固定孔將汽車外部的超聲波感測器連接到Arduino上。這些固定孔必須做得夠大,以確保所有八根電線都能順利穿過,並預留支撐螺釘的空間。
Piezo蜂鳴器採用簡單的雙面膠帶固定。
總之,為不阻礙系統順利運行,感測器和蜂鳴器需配備約6米長的電線。對電線進行顏色編碼以防將來混淆,這點很重要。
硬體設定到位後,應連接所有電線。感測器需配備八根電線(兩根訊號回線、兩根觸發器線,兩根地線和兩根VCC電源線),所有電線都應通過牌照後面的孔鋪設。應測試以下連接位置的導通性:
只要VCC和GND都連接上了,其順序就無關緊要了。在Arduino Uno上設定了三個接地位置,使用Vin引腳作為其中一隻感測器的電源,另一隻感測器則連接到5V引腳。
其他Arduino版本有的直接連接到引腳上而未接地(即Arduino Micro只設定了兩個接地位置),因此本研發項目中將引腳2設定為LOW(低)來增加額外接地。
汽車的電源是個難題。雖然汽車蓄電池輸出12伏直流電壓(若使用12V以上的穩壓器則可能導致過熱並損壞Arduino電路板),但也需要連接到交流馬達。啟動引擎時,交流馬達可以產生極高的峰值電流,並燒毀與其連接的任何電子裝置。該現象稱為負載突降。點擊這裡可瀏覽更多相關資料。
因此,在Arduino和汽車電源之間建議採用中間級保護電路。一種可選做法是自行組裝穩壓器,但其設計超出了本文討論的範圍,因此本例中選用了舊的行動電話適配器。
本例中採用了USB凹孔端轉接線。本例中更換了USB合適器的末端,並將其連接到凹孔端合適器。另一個備選方法是拔掉Arduino的凹孔端針腳並連接所有電線。
但會導致以下問題:四根導線中每一根的走向如何確定?參見以下圖片。
本例Arduino Uno中採用B型USB連接。其他型號也可採用其他USB連接類型,因此您必須檢查自己的連接方式並根據您的需要進行調整。
最後,還必須為適配器配置合適的電源。以下幾種方案可供選用:
最後終於在塑膠面板後的所有電線之間找到了一個連接器。對電壓進行了測量……符合要求!
在本教材中,我們研發了一種基於Arduino的相當簡單、經濟高效的停車輔助系統,該系統中配有汽車感測器,當本車太靠近後面的車輛(後側)時會向駕駛發出警報。通過兩隻超聲波接近感測器和兩隻壓電蜂鳴器發出警報聲來提醒駕駛,警報聲鳴響的頻率表示本車與障礙物之間的距離。
我們使用Arduino創建了一套類比應用程式,並測試了概念驗證虛擬樣機、用戶體驗虛擬樣機和實用虛擬樣機之間的臨界差異。在今後的教材中,為在改進版的停車輔助系統中實現更好的特長和功能,還可以對目前所討論的概念進行擴展。您有何見解?