DEV Community

張旭豐
張旭豐

Posted on

Arduino 人體感測器:讓裝置「看見」你的互動設計指南

Arduino × 人體感測器:讓裝置「看見」你的互動設計指南

你是否想過,家裡的燈可以在你走進房間時自動亮起?展覽的藝術品能在觀眾靠近時啟動音效?或是停車場的設備能在車子靠近時自動開門?

這些場景都不再是未來科技——只要用 Arduino 搭配人體感測器,你也能做出這些東西!今天就來聊聊紅外線測距、PIR 人體感測這些技術的原理,以及實際可以做的互動專案。


🔬 人體感測技術大解析

紅外線測距感測器(IR Distance Sensor)

原理

紅外線測距感測器運作的方式很直覺:發射一束紅外線光,遇到物體後反射回來,感測器測量光線來回的時間或角度,就能計算出物體的距離。

常見的型號有 GP2Y0A21YK(測量範圍 10–80 cm)和 GP2Y0A02YK(測量範圍 20–150 cm)。輸出的是類比電壓訊號,距離越近電壓越高,距離越遠電壓越低。

Arduino 連接方式

紅外線測距感測器 → Arduino
─────────────────────────
VCC (紅線)        → 5V
GND (黑線)        → GND
Signal (黃線)     → A0 (類比輸入)
Enter fullscreen mode Exit fullscreen mode

簡單範例程式

const int IR_SENSOR = A0;

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

void loop() {
  int distance = analogRead(IR_SENSOR);
  // 數值轉換為公分的公式(依型號而異)
  float cm = 10650.08 / (distance - 10.41);

  Serial.print("距離:");
  Serial.print(cm);
  Serial.println(" cm");

  delay(100);
}
Enter fullscreen mode Exit fullscreen mode

PIR 人體紅外線感測器(Passive Infrared Sensor)

原理

PIR 感測器和紅外線測距不同,它不發射任何光線,而是被動接收環境中的紅外線輻射。

人體會發出紅外線(熱輻射),PIR 感測器內部有兩片紅外感應片,正常情況下接收到的熱輻射相同。當有人體移動時,紅外輻射會先落在其中一片、再落在另一片,產生差異訊號,感測器就知道「有人經過」了。

重點:PIR 感測器偵測的是「移動中的熱源」,靜止的人體它可能感應不到。

常用模組:HC-SR501

HC-SR501 是最熱門的 PIR 感測器模組,支援:

  • 可調感應距離:約 3–7 公尺
  • 可調延遲時間:0.3–25 秒
  • 觸發模式切換(H / L)

Arduino 連接方式

HC-SR501 PIR 感測器 → Arduino
─────────────────────────────
VCC                    → 5V
GND                    → GND
OUT (輸出)             → D2 (數位輸入)
Enter fullscreen mode Exit fullscreen mode

簡單範例程式

const int PIR_SENSOR = 2;
const int LED = 13;

void setup() {
  pinMode(PIR_SENSOR, INPUT);
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int motion = digitalRead(PIR_SENSOR);

  if (motion == HIGH) {
    digitalWrite(LED, HIGH);
    Serial.println("🚶 偵測到人體移動!");
  } else {
    digitalWrite(LED, LOW);
    Serial.println("✅ 無人");
  }

  delay(500);
}
Enter fullscreen mode Exit fullscreen mode

🛠️ 四大經典互動專案

專案一:智能迎賓門鈴

場景:有訪客靠近門口時,自動播放迎賓音效並閃爍 LED。

所需材料

  • Arduino Uno
  • HC-SR501 PIR 感測器
  • 蜂鳴器或 MP3 播放模組(如 DFPlayer Mini)
  • LED 一顆
  • 杜邦線若干

電路圖說明

  • PIR OUT → D2
  • 蜂鳴器(或 MP3 模組 TX/RX)→ D9 / D10
  • LED → D13(並串聯 220Ω 電阻)

創意延伸

  • 結合 SD 卡模組,播放不同的迎賓語
  • 加入光敏電阻,夜晚才啟動(省電)
  • 連接 Wi-Fi 模組,發送推播通知到手機

專案二:互動式感應燈光牆

場景:牆面有多顆 LED,當人的手靠近不同位置,對應的燈就會亮起。

所需材料

  • Arduino Nano
  • GP2Y0A21YK 紅外線測距感測器 × 5
  • RGB LED 燈條(WS2812B)× 30 顆
  • 響應式控制程式碼

原理說明
在牆面後方安裝 5 支紅外線測距感測器,每支監控一個區塊的手部距離。距離變化時,該區段的 RGB LED 就會改變顏色或亮度。

#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN 6
#define PIXEL_COUNT 30

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

const int SENSOR[5] = {A0, A1, A2, A3, A4};
int lastValue[5] = {0};

void setup() {
  strip.begin();
  strip.show();
}

void loop() {
  for (int i = 0; i < 5; i++) {
    int raw = analogRead(SENSOR[i]);
    int cm = 10650.08 / (raw - 10.41);

    // 根據距離映射亮度
    int brightness = map(constrain(cm, 10, 80), 10, 80, 255, 0);

    // 設定該區段燈光顏色(每段 6 顆燈)
    int start = i * 6;
    for (int j = 0; j < 6; j++) {
      strip.setPixelColor(start + j, brightness, brightness, brightness);
    }
  }
  strip.show();
  delay(50);
}
Enter fullscreen mode Exit fullscreen mode

專案三:停車場車輛偵測系統

場景:汽車靠近柵欄時,柵欄自動升起;離開後自動放下。

所需材料

  • Arduino Mega(需要更多腳位)
  • GP2Y0A02YK 紅外線測距感測器(長距離型)
  • 伺服馬達(控制柵欄)
  • LCD 螢幕(1602 I2C)顯示車位狀態
  • 蜂鳴器警示

流程設計

  1. 車輛靠近(距離 < 100cm)→ LCD 顯示「歡迎光臨」
  2. 伺服馬達轉動 90° → 柵欄升起
  3. 等待 5 秒(車輛通過)
  4. 柵欄自動放下

專案四:互動式藝術互動牆

場景:在展覽或工作坊中,牆面投影會根據觀眾位置產生粒子效果或波形變化。

所需材料

  • Arduino Uno × 2(分擔訊號處理)
  • PIR 感測器 × 3(偵測觀眾方向)
  • Processing 軟體(電腦端視覺效果)
  • 序列通訊(USB 傳遞資料給電腦)

原理
Arduino 負責感測觀眾位置與移動方向,透過 Serial 傳送資料到電腦的 Processing 程式,Processing 再即時運算生成視覺效果(粒子系統、聲波、干擾紋理等)。

// Arduino 端
const int PIR[3] = {2, 3, 4};

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 3; i++) pinMode(PIR[i], INPUT);
}

void loop() {
  String data = "";
  for (int i = 0; i < 3; i++) {
    data += digitalRead(PIR[i]);
    if (i < 2) data += ",";
  }
  Serial.println(data); // 格式如 "1,0,0"
  delay(50);
}
Enter fullscreen mode Exit fullscreen mode

💡 進階技巧:多感測器融合

單一感測器難免有盲點——PIR 會被熱源(暖氣、寵物)干擾,紅外線測距在強光下可能失準。

厲害的設計會這樣做:

  1. PIR + 紅外線測距雙重確認
    只有當兩種感測器都偵測到物體,才判定為「有人」。大幅降低誤觸機率。

  2. 時間窗口過濾
    設定一個時間窗口(例如 200ms),只有在這段時間內連續偵測到訊號,才視為有效。這樣可以過濾短暫的干擾。

  3. 數值平滑化
    紅外線測距的原始數值會有跳動,用移動平均法可以讓數據更穩定:

   const int SMOOTH = 10;
   int readings[SMOOTH];
   int index = 0;
   int total = 0;

   int smoothRead(int pin) {
     total -= readings[index];
     readings[index] = analogRead(pin);
     total += readings[index];
     index = (index + 1) % SMOOTH;
     return total / SMOOTH;
   }
Enter fullscreen mode Exit fullscreen mode

🛒 感測器推薦清單(Amazon / 蝦皮熱賣款)

感測器型號 類型 價格區間 適合場景 推薦指數
HC-SR501 PIR 人體紅外線 $60–120 TWD 迎賓燈、門鈴、安防 ⭐⭐⭐⭐⭐
GP2Y0A21YK 紅外線測距(短距) $150–250 TWD 互動藝術、機器人 ⭐⭐⭐⭐
GP2Y0A02YK 紅外線測距(長距) $200–350 TWD 停車場、門禁 ⭐⭐⭐⭐
VL53L0X 雷射測距(ToF) $300–500 TWD 高精度需求場景 ⭐⭐⭐⭐⭐
RCWL-0516 微波雷達感測 $80–150 TWD 穿透非金屬材質偵測 ⭐⭐⭐⭐

💡 小編推薦:如果你剛開始玩,HC-SR501 + GP2Y0A21YK 這個組合幾乎能應付 80% 的互動專案需求,兩顆加起來不用 $300 超划算!


⚠️ 常見問題 Q&A

Q:PIR 感測器一直誤觸發怎麼辦?
A:檢查環境中是否有熱源(暖氣、電腦主機、陽光直射窗)。另外確認靈敏度與延遲時間旋鈕是否調整到適當位置。

Q:紅外線測距在戶外不準?
A:陽光中含有大量紅外線,會干擾測距結果。戶外建議改用 VL53L0X 雷射 ToF 感測器,不受光線影響。

Q:可以同時用很多顆紅外線測距感測器嗎?
A:可以,但要注意供電與干擾。建議每顆感測器獨立供電(不要串聯取電),且訊號線分開接不同的類比輸入腳位。

Q:Arduino 的類比輸入不夠用怎麼辦?
A:使用 I2C 多工器(如 TCA9548A)或改用 Arduino Mega 獲得更多腳位。


🚀 下一步:加入 IoT 連線能力

現在你已經會用感測器「看到」人了,接下來可以加入網路模組,讓你的裝置會「說話」:

  • ESP8266 / ESP32:支援 Wi-Fi,可以用 MQTT 協定發送資料到 Home Assistant 或自建 IoT 平台
  • HC-05 藍牙模組:近距離連接手機,用 App 控制燈光或接收通知
  • nRF24L01:長距離(室內可達 100m)無線傳輸,適合大型安裝

結合 IoT 之後,你的互動裝置就能做到:LINE 通知、資料上雲、手機遙控、甚至語音助理整合—— DIY 智慧家庭的門檻,真的比你想的還低!


總結

人體感測器是互動裝置的「感官」——沒有它,你的 Arduino 就是個盲啞的機器人。學會紅外線測距與 PIR 感測器的原理與應用,你就能做出:

  • ✅ 智能迎賓系統
  • ✅ 互動式燈光藝術
  • ✅ 停車場自動化管理
  • ✅ 展覽互動投影
  • ✅ 智慧家居感應設備

重點是先從一個小專案開始——做出來了,你對這些技術的理解才會真正深刻。別等靈感,現在就去淘一顆 HC-SR501 來玩吧!


本文章由內容工作室編寫,合作提案歡迎來信。文中提及之商品連結為聯盟行銷連結,透過購買可能獲得少量佣金,感謝您的支持!

Top comments (0)