用超聲波測距 + Arduino 做互動距離警示裝置
倒車、倒車、倒車——
「嗶、嗶、嗶──」
停車場裡,那熟悉的聲音響起。你盯著後視鏡,腳輕輕放上剎車,雷達偵測到障礙物的距離,發出急促的警告音。那一刻,你心裡想的可能是:「這東西怎麼這麼準?」
現在,你可以自己做出來。
🔊 那一聲「嗶」,是怎麼來的?
HC-SR04 超聲波測距模組,會發射一束超聲波(頻率 40kHz,肉耳聽不見),然後等待它碰到障礙物反彈回來。晶片計下來回時間,乘上音速,就得到距離。
公式很簡單:
距離 = (來回時間 ÷ 2) × 音速
⚠️ 小知識: 音速會隨溫度改變!冬天 0°C 時約 331 m/s,夏天 30°C 時約 349 m/s。一般室溫專案可以先抓 340 m/s,影響不大。
🧰 材料清單
| 材料 | 用途 |
|---|---|
| Arduino Uno(或其他相容板) | 主控大腦 |
| HC-SR04 超聲波測距模組 | 發射+接收超聲波 |
| 主動式蜂鳴器(Active Buzzer) | 發出警告聲 |
| LED(紅色)× 1 | 危險警示燈 |
| LED(綠色)× 1 | 安全距離燈 |
| 220Ω 電阻 × 2 | 保護 LED |
| 麵包板 + 跳線 | 快速試驗電路 |
📦 精選購買推薦(蝦皮搜尋關鍵字):
Arduino Uno R3 開發板HC-SR04 超聲波測距模組Arduino 蜂鳴器 模組Arduino 入門套件 電子零件
🔌 電路接線圖
| HC-SR04 | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| Trig | Pin 9 |
| Echo | Pin 10 |
| 元件 | Arduino |
|---|---|
| 紅色 LED(+ 220Ω) | Pin 7 |
| 綠色 LED(+ 220Ω) | Pin 6 |
| 蜂鳴器(+) | Pin 8 |
| 蜂鳴器(-) | GND |
💻 程式碼(分段落說明)
第一段:定義腳位與常數
// 超聲波模組
const int trigPin = 9;
const int echoPin = 10;
// LED 與蜂鳴器
const int redLED = 7;
const int greenLED = 6;
const int buzzer = 8;
// 安全距離門檻(單位:公分)
const int SAFE_DISTANCE = 30;
第二段:初始化設定
void setup() {
Serial.begin(9600); // 開啟序列埠,方便除錯
// 超聲波
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// 輸出元件
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(buzzer, OUTPUT);
}
⚠️ 技術細節: Trigger 腳位需要給予 ≥10μs 的脈衝才能觸發測距。HC-SR04 最大回應頻率約 40Hz,也就是每秒最多測 40 次,不用測更快。
第三段:讀取距離
long readDistance() {
// 發射超聲波
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // ≥10μs 脈衝
digitalWrite(trigPin, LOW);
// 接收回傳時間
long duration = pulseIn(echoPin, HIGH);
// 轉換為公分(音速 340 m/s)
// duration 單位是微秒,除以 2 是來回,×0.034 是公分
long distance = duration * 0.034 / 2;
return distance;
}
⚠️ 注意: HC-SR04 最小測距約 2cm,太近的障礙物會偵測不到。如果需要近距離偵測,要考慮其他方案。
第四段:主迴路——距離判斷+警示
void loop() {
long distance = readDistance();
Serial.print("距離:");
Serial.print(distance);
Serial.println(" cm");
if (distance < SAFE_DISTANCE && distance > 2) {
// 危險!亮紅燈 + 叫
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
digitalWrite(buzzer, HIGH);
} else {
// 安全,亮綠燈
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
digitalWrite(buzzer, LOW);
}
delay(25); // 配合 40Hz,最大每秒測 40 次
}
🎵 創意擴充:漸進式提示音
想要更像倒車雷達?試試這個:
void beepProgressive(long distance) {
if (distance < SAFE_DISTANCE && distance > 2) {
// 越近,頻率越快
int interval = map(distance, 2, SAFE_DISTANCE, 50, 500);
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(interval);
} else {
digitalWrite(buzzer, LOW);
}
}
把 loop() 裡的 digitalWrite(buzzer, HIGH) 換成 beepProgressive(distance),就會聽到「嗶──嗶嗶──嗶嗶嗶」的漸進效果,停車技術再爛都能 hold 住。
🚗 結語
倒車雷達不是什麼高科技,但自己動手做出來的感覺,完全不同。
你寫的每一行程式、接的每一條線,都是在跟硬體說話。那一聲「嗶」,是你讓它學會的。
那一測,是你自己測出來的。
如果你做出來了,歡迎分享你的作品照或改裝創意!
想自己動手做?推薦從蝦皮搜尋 Arduino 入門套件 電子零件 開始,HC-SR04、蜂鳴器、LED 全部湊齊,點幾下就送到。



Top comments (0)