Basic Tutorial for Arduino, 感測器 Sensor, 進階篇

【Arduino進階教學】VS1838B 紅外線接收器(IR Receiver):腳位說明、接線圖與 IRremote 函式庫解碼實作

Arduino 紅外線接收器 IR Receiver 腳位說明與接線教學封面,包含 VS1838B 與遙控器實作情境

一、 實驗說明:VS1838B 紅外線接收器原理介紹

在 Arduino 家電控制與遙控專題中,VS1838B 紅外線接收器(IR Receiver) 是最常見且便宜好用的感測模組。

核心技術與運作原理

  1. 38kHz 載波頻率: 大多數紅外線遙控器(如電視遙控器、冷氣遙控器)都是以 38kHz 頻率調變紅外線光波。VS1838B 內部整合了紅外線感光元件、放大器與 38kHz 帶通濾波器(Bandpass Filter),能有效過濾環境雜光(如日光燈、陽光)。

  2. 數位訊號解碼: 當接收到紅外線遙控訊號時,VS1838B 會解調出原始的數位波形,並經由 OUT 腳位輸出給 Arduino 進行訊號解碼。

二、 實驗所需材料與電路接線圖 (Hardware Setup)

請依照下表將 VS1838B 紅外線接收器連接至 Arduino Uno。

⚠️ 注意事項: VS1838B 感應頭突起面向自己時,腳位順序由左至右分別為 OUT、GND、VCC,請務必確認接線方向,避免反接導致模組損壞。

???? 準備材料

  • Arduino Uno R3 開發板 x 1

  • VS1838B 紅外線接收器模組 x 1

  • 紅外線遙控器(如 NEC 協定遙控器) x 1

  • 杜邦線 若干

????️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)

????爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

⚡ 腳位對接說明 (Pin Mapping)

VS1838B 腳位 功能說明 Arduino Uno 對應引腳
OUT (Signal) 紅外線訊號輸出腳位 D8
GND 電源接地 GND
VCC 電源正極 (5V) 5V

三、 必備函式庫安裝步驟

編譯程式碼前,請先透過 Arduino IDE 的程式庫管理員安裝最新版的 IRremote 函式庫:

  1. 開啟 Arduino IDE。

  2. 點擊選單列的 草稿碼 (Sketch) 匯入程式庫 (Include Library) 管理程式庫 (Manage Libraries...)。

  3. 搜尋 IRremote 並點擊安裝(建議安裝最新版本)

四、 程式碼實作範例

???? 完整範例程式碼:讀取遙控器 HEX 解碼訊號

本範例使用 IRremote 函式庫將 VS1838B OUT 接至 Digital Pin 8。每當按壓遙控器按鈕時,將會在序列埠監視器(Serial Monitor)印出對應的 16 進位 (HEX) 碼。

#include <Arduino.h> 
#include <IRremote.hpp>  // 導入 IRremote 函式庫

const int IR_RECEIVE_PIN = 8; // 定義紅外線接收器的 Vout 連接至 Digital Pin 8

void setup() {
  Serial.begin(9600);
  
  // 初始化紅外線接收器,並啟用板載 LED 閃爍提示(接收到訊號時會閃爍)
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  
  Serial.println("紅外線接收器初始化完成,等待遙控器訊號...");
}

void loop() {
  // 檢查是否接收到紅外線訊號
  if (IrReceiver.decode()) {
    
    // 於序列埠監視器印出解碼後的 16 進位數值 (Hex Value)
    Serial.print("收到紅外線碼 (HEX): 0x");
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    
    // 繼續接收下一個訊號
    IrReceiver.resume(); 
  }
}

 

五、 常見問題與除錯 (FAQ)

Q1:長按遙控器按鈕時,為什麼序列埠會印出 0x0 或不相同的數值?

  • 解答: 許多紅外線遙控協定(例如 NEC 協定)在長按按鍵時會傳送「重複碼 (Repeat Code)」,在 decodedRawData 中可能會顯示為 0x0。如果需要處理持續按下的動作,可以透過 IrReceiver.decodedIRData.flags 來判斷是否為重複訊號。

Q2:按遙控器時 Arduino 板載 LED 沒有閃爍,且序列埠沒反應?

  • 解答:

    1. 請確認 VS1838B 的 VCC、GND 與 OUT (Pin 8) 沒有接反。

    2. 檢查遙控器電池是否有電,或嘗試使用手機鏡頭對準遙控器發射端按壓,觀察是否有紫紅光閃爍(確認遙控器正常發射)。

???? 延伸閱讀與推薦課程

???? 進階顯示模組控制: 【Arduino進階教學】LCD 1602 I2C 顯示模組:4線快速接線、位址檢測與程式碼範例

???? 上一篇: 【Arduino進階教學】RGB LED 模組 PWM 調色實作:全彩燈光控制原理與配線圖

???? 下一篇: 【Arduino進階教學】HC-SR04 超音波感測器避障與測距實作

???? 總索引: Arduino 新手學習必讀經典 – 快速索引頁面