DEV Community

張旭豐
張旭豐

Posted on

用 Arduino + 超聲波感測器打造互動燈光裝置 🔊💡

用 Arduino + 超聲波感測器打造互動燈光裝置 🔊💡

前言

想做出「手一靠近燈就亮」的魔術效果嗎?其實只要幾百塊錢的零件,就能用 Arduino + 超聲波感測器做出超酷的互動燈光裝置!

今天就來分享如何從零打造這套系統,適合新手入門,也適合拿来做為互動藝術專案的基础。


原理說明

超聲波感測器怎麼測距離?

HC-SR04 超聲波感測器運作原理很直覺:

  1. 發射超聲波:模組發射一個 40kHz 的超聲波脈衝
  2. 等待反射:超聲波碰到障礙物後反彈回來
  3. 計算時間:模組測量超聲波來回的飛行時間
  4. 轉換距離:使用公式 距離 = 時間 × 聲速 / 2(除以二是因為要算單程)

聲速大約是 340 m/s,所以在室溫下公式可以簡化為:距離(cm) = 時間(μs) / 58

LED 亮度控制

Arduino 控制 LED 亮度的方式是 PWM(脈寬調變)。簡單來說:

  • 把數位訊號「開開關關」,以極快速度切換
  • 調整「開」的比例,就能控制平均電壓
  • 進而控制 LED 的亮度(0 = 全暗,255 = 最亮)

硬體清單

零件 數量 備註
Arduino Uno 1 也可以用 Nano 或 Mega
HC-SR04 超聲波感測器 1 測量範圍 2cm - 400cm
RGB LED 或 單色 LED 1-3 這裡用 RGB LED 做示範
220Ω 電阻 3 限流用
麵包板 + 跳線 若干 組裝用

電路接線圖

Arduino        HC-SR04
-------        -------
5V      ───►   VCC
GND     ───►   GND
Pin 7   ───►   TRIG
Pin 6   ───►   ECHO
              (透過 1kΩ 電阻分壓保護 Arduino)

Arduino        RGB LED (共陽極)
-------        ---------------
Pin 9   ───►   R (透過 220Ω)
Pin 10  ───►   G (透過 220Ω)
Pin 11  ───►   B (透過 220Ω)
5V      ───►   共陽腳 (最長的腳)
Enter fullscreen mode Exit fullscreen mode

⚠️ 注意:HC-SR04 的 ECHO 腳會輸出 5V 訊號,直接接到 Arduino 5V 針腳可能會有風險。建議加上 1kΩ + 2kΩ 電阻做分壓,或使用 5V 容忍的 Arduino 板(如 Due)。


程式碼

// 互動燈光裝置 - 超聲波感測器控制 RGB LED
// 作者:你的名字 | 發布於 DEV Community

const int TRIG_PIN = 7;   // 超聲波發射腳
const int ECHO_PIN = 6;   // 超聲波接收腳
const int LED_R = 9;      // RGB LED 紅色腳
const int LED_G = 10;     // RGB LED 綠色腳
const int LED_B = 11;     // RGB LED 藍色腳

// 距離閾值設定(單位:公分)
const int MIN_DISTANCE = 5;   // 最近距離(燈最亮)
const int MAX_DISTANCE = 50;  // 最遠距離(燈全暗)

void setup() {
  Serial.begin(9600);

  // 設定超聲波腳位
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // 設定 LED 腳位
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
}

void loop() {
  // 測量距離
  int distance = measureDistance();

  // 根據距離計算亮度 (0-255)
  int brightness = map(distance, MIN_DISTANCE, MAX_DISTANCE, 255, 0);
  brightness = constrain(brightness, 0, 255);

  // 根據距離變換顏色
  // 近距離:藍色 → 中距離:綠色 → 遠距離:紅色
  int r, g, b;

  if (distance < 15) {
    // 近距離:藍色系
    r = 0;
    g = 0;
    b = brightness;
  } else if (distance < 30) {
    // 中距離:綠色系
    r = 0;
    g = brightness;
    b = 0;
  } else {
    // 遠距離:紅色系
    r = brightness;
    g = 0;
    b = 0;
  }

  // 設定 LED 顏色(PWM 控制)
  analogWrite(LED_R, r);
  analogWrite(LED_G, g);
  analogWrite(LED_B, b);

  // 偵錯輸出(可註解掉)
  Serial.print("距離: ");
  Serial.print(distance);
  Serial.print(" cm | 亮度: ");
  Serial.println(brightness);

  delay(50);  // 稍微延遲,避免偵測太頻繁
}

// 測量距離函式(回傳單位:公分)
int measureDistance() {
  // 發射超聲波短脈衝
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // 讀取 Echo 腳的高電位持續時間
  long duration = pulseIn(ECHO_PIN, HIGH, 30000);  // 30ms 超時保護

  // 處理超時情況(距離太遠)
  if (duration == 0) {
    return MAX_DISTANCE;
  }

  // 計算距離:duration(μs) / 58 ≈ 距離(cm)
  int distance = duration / 58;

  // 限制範圍
  if (distance < MIN_DISTANCE) distance = MIN_DISTANCE;
  if (distance > MAX_DISTANCE) distance = MAX_DISTANCE;

  return distance;
}
Enter fullscreen mode Exit fullscreen mode

進階玩法

完成基本款之後,可以嘗試這些升級:

  1. 多燈矩陣:用 MAX7219 驅動 8x8 LED 矩陣,做出更複雜的圖案
  2. 手勢控制:改用 APDS-9960 感測器,辨識左右滑動手勢
  3. 聲光互動:加上聲音感測器,距離控制顏色、聲音控制閃爍頻率
  4. Wi-Fi 遙控:加上 ESP8266,變成物聯網裝置,用手機控制
  5. 燈帶升級:用 WS2812B 可編程 LED 燈帶,效果更夢幻

零件推薦

想動手做但還沒買零件?這裡推薦幾個靠譜的商城:

🌏 國際商城

商城 特色 適合
DFRobot 中文界面、品項齊全、Arduino 官方合作 新手友善
Seeed Studio Grove 系統、易於擴展 进阶学习
AliExpress 價格最低、選擇最多 預算有限
Amazon 速度快、品管穩定 急單需求

🇹🇼 台灣本地

商城 特色 適合
Robot Knight 機器人意識 現貨当天出、在地客服 急單
物聯小屋 教學資源豐富、論壇活躍 自學者
PChome 線上商城 速度快、可超商取貨 方便

💡 省錢小技巧:同一個零件在 AliExpress 和台灣商城可能差 3-5 倍價錢!不趕時間的話,建議在 AliExpress 一次買齊所有零件,省下的錢可以多做幾個專案。


常見問題

Q:超聲波感測器不穩定怎麼辦?
A:可以取多次測量的平均值,或是在感測器前方加一個遮光罩減少干擾。

Q:LED 閃爍怎麼回事?
A:檢查供電是否充足,LED 直接接 Arduino 可能電流不夠。建議外接電源或加電容穩壓。

Q:可以控制 NeoPixel 燈帶嗎?
A:當然可以!只要安裝 Adafruit NeoPixel 函式庫,把 analogWrite() 換成 strip.setPixelColor() 即可。


結語

用 Arduino + 超聲波感測器做互動裝置,是許多互動設計師、藝術家的入門起點。原理不難,但創意無限——可以做成:

  • 🎵 跟著音樂節奏變化的牆面燈
  • 🚪 有人經過就亮起的走廊燈
  • 🪴 靠近植物就變換顏色的智能盆栽燈

你的下一步是什麼? 留言分享你的專案點子吧!


如果你覺得這篇文章有幫助,歡迎轉發、留言交流。也歡迎追蹤我,會持續分享更多 IoT、互動裝置的製作教學!

標籤: #Arduino #超聲波感測器 #互動設計 #IoT #Maker #嵌入式系統 #LED #DIY


本文提及的商品連結為聯盟行銷連結,透過這些連結購買,我可能會獲得少量佣金,但不影響你的購物價格。這筆費用會支持我繼續創作更多免費教學內容,感謝支持!

Top comments (0)