TY桃園智造感測器教學庫
感測器教學庫/環境感測器/紅外線接收(IR Receiver)
BATCH 01 · 已發布

SENSOR / INFRAREDRECEIVER

紅外線接收器(IR Receiver)從遙控器訊號讀取按鍵代碼

紅外線接收器可以接收電視遙控器等裝置的調變訊號。本篇先認識桃園版 Blockly 的設定、可用性、讀取與恢復積木,再延伸到遙控器按鍵控制。

入門45 分鐘Arduino UNO
READYDATA
SIGNAL STABLE
紅外線接收器(IR Receiv
VCC / 5VGND / GND
01 / PREPARE

課前準備

先確認這一課要學會什麼,以及桌面上需要哪些材料。

學習目標

  1. 分辨數位狀態讀取與紅外線協定解碼。
  2. 使用桃園版 Blockly 的 IR Receiver 積木讀取資料。
  3. 知道讀取完成後要恢復接收,避免後續訊號被卡住。

材料清單

1 個38 kHz 紅外線接收器模組確認 OUT、VCC、GND 腳位排列。
1 組Arduino UNO 與 USB 線本例將 OUT 接到 D2。
1 支常見家電紅外線遙控器只在可控的教室設備上測試。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO
02 / HOW IT WORKS

接收到的是封包,不只是 HIGH/LOW

IR 接收模組會將紅外線載波解調成訊號封包;若要知道遙控器按了哪個鍵,必須使用接收器的解碼流程,而不是只讀取一個數位腳位。

01

等待訊號

設定接收腳位與紅外線接收器。

02

讀取封包

偵測到完整訊號後取得按鍵代碼。

03

恢復接收

處理完本次資料後呼叫 resume,等待下一個封包。

DISTANCE FORMULAbutton = decode(IR signal)

不同遙控器可能使用不同協定與代碼;教學時應先記錄實際遙控器的資料。

03 / WIRING

接線配置

本篇使用桃園版 Blockly 的舊版 IR 解碼積木;taoyuan_ir_digital 只適合讀取一般數位 HIGH/LOW,不等同於遙控器協定解碼。

MODULE紅外線接收器(IR ReceivVCCGNDOUT
CONTROLArduino UNO5VGNDD2
模組腳位接到控制板訊號方向檢查重點
VCC5V電源依模組規格供電。
GNDGND地線接收器與 Arduino 共地。
OUTD2解碼輸入對應 irrecv_setup 與後續 IR 積木的 DATAPIN。
✓ WIRING ROWS ALIGNED

已將 3 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。

04 / BLOCK GUIDE

本課會用到的積木

積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。

初始化紅外線接收器DATAPIN 2
BLOCK 01irrecv_setup

初始化紅外線接收器

設定接收器腳位並開始等待訊號

位置:感測器 → 環境感測器 → 紅外線接收
DATAPIN
2填入 OUT 所接的數位腳位。
有新的紅外線資料?
BLOCK 02irrecv_available

有新的紅外線資料?

判斷是否有封包可讀取

位置:感測器 → 環境感測器 → 紅外線接收
讀取紅外線代碼
BLOCK 03irrecv_read

讀取紅外線代碼

取得本次遙控器訊號的數值

位置:感測器 → 環境感測器 → 紅外線接收
恢復紅外線接收
BLOCK 04irrecv_resume

恢復紅外線接收

處理完資料後重新等待下一筆

位置:感測器 → 環境感測器 → 紅外線接收
紅外線數位狀態PIN 2
BLOCK 05taoyuan_ir_digital

紅外線數位狀態

讀取一般數位輸入,不進行遙控器協定解碼

位置:感測器 → 環境感測器 → 紅外線接收
PIN
2僅適用於數位 HIGH/LOW 狀態。
05 / BLOCK EXAMPLE

按遙控器按鍵控制 LED

先列印收到的代碼,辨識指定按鍵,再控制 LED。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
初始化紅外線接收器(D2)irrecv_setup
重複執行arduino_delay
如果有新的紅外線資料?irrecv_available
列印讀取到的紅外線代碼arduino_serial_print
恢復紅外線接收irrecv_resume
重複執行
初始化紅外線接收器(D2)irrecv_setup
重複執行arduino_delay
如果有新的紅外線資料?irrecv_available
列印讀取到的紅外線代碼arduino_serial_print
恢復紅外線接收irrecv_resume
X / 010Y / 024

組合步驟

01
初始化一次

把初始化積木放在啟動區,不要每次迴圈重複建立。

為什麼:接收器需要保留自己的接收狀態。
02
先記錄代碼

按下遙控器按鍵並將讀值列印到序列埠。

為什麼:每支遙控器的按鍵代碼可能不同。
03
恢復接收

讀完資料後放入 resume 積木。

為什麼:讓接收器可以接收下一次按鍵。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

irrecv_setup設定接收器腳位並開始等待訊號

預期觀察結果

測試情境可能讀值判讀
沒有按鍵available 為否程式不會誤把空資料當成按鍵。
按下按鍵讀到一筆代碼代碼可再交給判斷積木控制輸出。
06 / CODE EXPLAINED

範例程式逐段解說

這段程式把「紅外線接收器(IR Receiver)」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。

GENERATED LOGIC / EXCERPT積木背後的程式碼收合程式碼 −
TAOYUAN BLOCKLY / ARDUINO C++READ ONLY
#include <IRremote.hpp>

const int IR_RECEIVE_PIN = 2;

void setup() {
  Serial.begin(115200);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    IrReceiver.resume();
  }
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置#include <IRremote.hpp>

函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 irrecv_available 就算接線正確也無法使用。

02
把程式腳位對回接線表const int IR_RECEIVE_PIN = 2;

本頁接線是 VCC → 5V、GND → GND、OUT → D2。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。

03
在 setup 只做一次初始化void setup() {

啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。

04
在 loop 更新並取得資料void loop() {

重複執行區先讓感測器更新,再讀取 有新的紅外線資料?。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。

05
輸出結果並控制取樣速度if (IrReceiver.decode()) {

先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。

自學檢查
  • 實體接線:VCC → 5V、GND → GND、OUT → D2。
  • 主要積木:irrecv_available;先確認它是回傳值還是執行動作。
  • 本課板子:Arduino UNO;更換控制板或模組版本時,電壓、腳位與函式庫都要重新確認。
07 / DEBUG

常見問題與故障排除

先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。

ERR 01

完全收不到訊號

先檢查:確認接收器方向、OUT 腳位與函式庫版本。

處理方式:對準遙控器按鍵,重新確認 DATAPIN 與接收器腳位排列。

ERR 02

只有第一筆資料

先檢查:檢查是否在讀取後呼叫 resume。

處理方式:將恢復紅外線接收積木放在處理資料之後。

ERR 03

每次按鍵代碼不同

先檢查:確認是否把重複碼或不同協定混在一起。

處理方式:記錄同一按鍵多次結果,並為重複碼設計專用處理。

08 / NEXT MISSION

延伸挑戰

從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。

L1

建立遙控器按鍵表

題目:記錄 3 個按鍵的代碼與功能。

解題方向

這題要延伸「有新的紅外線資料?」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 irrecv_available,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「記錄 3 個按鍵的代碼與功能。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
L2

遙控 LED 開關

題目:用同一按鍵切換 LED 的亮與滅。

解題方向

這題要延伸「有新的紅外線資料?」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 irrecv_available,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「用同一按鍵切換 LED 的亮與滅。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、把結果接到題目指定的輸出元件是否在所有測試情境都正確反應。
L3

遙控器控制伺服馬達

題目:使用兩個按鍵讓伺服角度增加或減少。

解題方向

這題要延伸「有新的紅外線資料?」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 irrecv_available,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「使用兩個按鍵讓伺服角度增加或減少。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、把結果接到題目指定的輸出元件是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能分辨 IR 解碼與一般數位讀取的差異。
  • 能按正確順序使用 available、read 與 resume。
  • 能以實際按鍵代碼完成一項輸出控制。
09 / EVIDENCE資料來源與版本展開查看 +
LAST REVIEWED / 2026-08-13

本頁使用零件圖鑑標準範本,內容可由網站編輯模式持續維護。

返回教學庫 →