一、 實驗說明:VS1838B 紅外線接收器原理介紹
在 Arduino 家電控制與遙控專題中,VS1838B 紅外線接收器(IR Receiver) 是最常見且便宜好用的感測模組。
核心技術與運作原理
-
38kHz 載波頻率: 大多數紅外線遙控器(如電視遙控器、冷氣遙控器)都是以 38kHz 頻率調變紅外線光波。VS1838B 內部整合了紅外線感光元件、放大器與 38kHz 帶通濾波器(Bandpass Filter),能有效過濾環境雜光(如日光燈、陽光)。
-
數位訊號解碼: 當接收到紅外線遙控訊號時,VS1838B 會解調出原始的數位波形,並經由 OUT 腳位輸出給 Arduino 進行訊號解碼。
二、 實驗所需材料與電路接線圖 (Hardware Setup)
請依照下表將 VS1838B 紅外線接收器連接至 Arduino Uno。
⚠️ 注意事項: VS1838B 感應頭突起面向自己時,腳位順序由左至右分別為 OUT、GND、VCC,請務必確認接線方向,避免反接導致模組損壞。
???? 準備材料
-
Arduino Uno R3 開發板 x 1
-
VS1838B 紅外線接收器模組 x 1
-
紅外線遙控器(如 NEC 協定遙控器) x 1
-
杜邦線 若干
????️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)
⚡ 腳位對接說明 (Pin Mapping)
三、 必備函式庫安裝步驟
編譯程式碼前,請先透過 Arduino IDE 的程式庫管理員安裝最新版的 IRremote 函式庫:
-
開啟 Arduino IDE。
-
點擊選單列的
草稿碼 (Sketch)匯入程式庫 (Include Library)管理程式庫 (Manage Libraries...)。 -
搜尋 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 沒有閃爍,且序列埠沒反應?
解答:
請確認 VS1838B 的 VCC、GND 與 OUT (Pin 8) 沒有接反。
檢查遙控器電池是否有電,或嘗試使用手機鏡頭對準遙控器發射端按壓,觀察是否有紫紅光閃爍(確認遙控器正常發射)。
???? 延伸閱讀與推薦課程
???? 進階顯示模組控制: 【Arduino進階教學】LCD 1602 I2C 顯示模組:4線快速接線、位址檢測與程式碼範例
???? 上一篇: 【Arduino進階教學】RGB LED 模組 PWM 調色實作:全彩燈光控制原理與配線圖
???? 下一篇: 【Arduino進階教學】HC-SR04 超音波感測器避障與測距實作
???? 總索引: Arduino 新手學習必讀經典 – 快速索引頁面
