第21/31課:使用紅外線遙控器配合Arduino | SunFounder Robojax
簡介
喺呢一課,我哋會透過用Arduino整一個項目嚟解碼標準遙控器嘅訊號,探索紅外線(IR)通訊嘅有趣世界。呢個項目可以俾你偵測到撳咗IR遙控器邊個掣,然後相應咁觸發動作,例如開蜂鳴器。能夠同IR遙控器介面連接,開拓咗好多實際應用,由簡單嘅家居自動化到自訂控制系統都得。
以下係一啲用呢種技術可以整嘅啟發性構思:
- 萬用遙控器替代品:為你嘅電視、音響系統或其他IR控制裝置整一個自訂遙控器。
- 家居自動化:用標準遙控器撳一個掣嚟控制燈、風扇或其他電器。
- 互動項目:整一個保安系統,撳特定掣就會觸發警報。
- 機械人控制:用IR遙控器無線控制機械人嘅移動同動作。
- 無障礙輔助工具:為行動不便嘅人士開發一個簡單、大掣嘅遙控器。
硬件同零件
呢個項目主要用幾個簡單零件嚟整,全部通常都包括喺好似SunFounder 3合1套件嘅初學者套件入面。你需要:
- 一塊Arduino板(例如Uno)
- 一個IR接收器模組(例如TSOP38238或類似型號)
- 一個標準IR遙控器(帶CR2025電池)
- 一個無源蜂鳴器
- 杜邦線同麵包板
接線指南
以下係呢個項目嘅簡單接線圖。IR接收器係關鍵零件。當你望住接收器嘅弧形表面時,引腳排列如下:
- 右邊引腳:連接到Arduino嘅5V引腳。
- 中間引腳:連接到Arduino嘅GND引腳。
- 左邊引腳(訊號):連接到Arduino嘅數位引腳11。
另外,對於項目嘅動作部分,將蜂鳴器嘅正極(較長)引腳連接到數位引腳2,另一邊引腳連接到GND。
程式碼解釋
呢個項目依賴IRremote程式庫嚟處理解碼紅外線訊號嘅複雜任務。程式碼嘅結構係先學習你遙控器嘅特定代碼,然後用佢哋嚟觸發動作。等我哋拆解用戶可配置嘅部分。
首先,我哋定義IR接收器訊號線連接嘅引腳。呢個係一個關鍵配置,你一定要同實際接線匹配。
const int IR_RECEIVE_PIN = 11; // 定義IR感應器嘅引腳號碼
喺setup()函數入面,用我哋啱啱定義嘅引腳初始化IR接收器。呢個會話俾程式庫開始監聽嗰個引腳嘅訊號。
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // 啟動IR接收器
觸發動作邏輯嘅核心喺loop()入面。程式碼會檢查係咪有掣被撳咗並解碼佢。decodeKeyValue()函數係一個自訂函數,將遙控器嘅原始十六進制代碼轉換成人類可讀嘅字串,好似"POWER"或"MUTE"。呢個就係你要修改嚟配合自己遙控器嘅部分。示例程式碼定義咗一個buzzerPin,只有喺撳"POWER"掣時先會開蜂鳴器。
const int buzzerPin = 2; // 定義蜂鳴器嘅引腳
// ... 喺loop()入面
if (decodedValue == "POWER") {
digitalWrite(buzzerPin, HIGH); // 開蜂鳴器
} else {
digitalWrite(buzzerPin, LOW); // 關蜂鳴器
}
點樣用:decodeKeyValue()函數係自訂呢個項目嘅關鍵。要同你自己嘅遙控器一齊用,你首先要開住Serial Monitor嚟執行程式碼。撳你遙控器上嘅每個掣,記低每個掣顯示嘅十六進制值。然後,更新decodeKeyValue()函數入面嘅switch陳述式,將嗰啲值對應到有意義嘅名稱。之後你就可以喺if陳述式入面用呢啲名稱嚟觸發唔同動作,好似示例入面"POWER"掣咁。
實時項目同示範
上傳程式碼之後,以9600嘅鮑率打開Serial Monitor。將你嘅遙控器對準IR接收器並撳一個掣。Serial Monitor會顯示對應嘅掣名稱(例如"POWER"、"MUTE")。想睇到動作效果,撳"POWER"掣。你會聽到蜂鳴器開咗。撳任何其他掣,例如"MUTE",就會關蜂鳴器。呢個示範咗一個簡單但強大嘅概念:用遙控器嚟觸發Arduino上嘅數位輸出。
章節
- [00:00] Arduino紅外線遙控入門介紹
- [01:25] 紅外線接收器同發射器概覽
- [02:24] 了解紅外線接收模組同接線
- [03:31] 安裝IRremote程式庫
- [04:22] 開啟同解釋解碼程式碼
- [07:29] 上載程式碼同測試遙控掣
- [08:41] 加入動作:控制蜂鳴器
- [10:37] 即將推出嘅紅外線項目預覽
/*
Lesson 21/31: Decoding Infrared from remote
Get this code and watch video Download and resource page https://robojax.com/RJT604
YouTube video https://www.youtube.com/watch?v=EAlqaVy8fYY
*/
#include <IRremote.h>
const int IR_RECEIVE_PIN = 11; // Define the pin number for the IR Sensor
String lastDecodedValue = ""; // Variable to store the last decoded value
void setup() {
Serial.begin(9600); // Start serial communication at 9600 baud rate
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the IR receiver
}
void loop() {
if (IrReceiver.decode()) {
String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
if (decodedValue != "ERROR") {
Serial.println(decodedValue);
delay(100);
}
IrReceiver.resume(); // Enable receiving of the next value
}
}
String decodeKeyValue(long result)
{
switch(result){
case 0x16:
return "0";
case 0xC:
return "1";
case 0x18:
return "2";
case 0x5E:
return "3";
case 0x8:
return "4";
case 0x1C:
return "5";
case 0x5A:
return "6";
case 0x42:
return "7";
case 0x52:
return "8";
case 0x4A:
return "9";
case 0x9:
return "+";
case 0x15:
return "-";
case 0x7:
return "EQ";
case 0xD:
return "U/SD";
case 0x19:
return "CYCLE";
case 0x44:
return "PLAY/PAUSE";
case 0x43:
return "FORWARD";
case 0x40:
return "BACKWARD";
case 0x45:
return "POWER";
case 0x47:
return "MUTE";
case 0x46:
return "MODE";
case 0x0:
return "ERROR";
default :
return "ERROR";
}
}
Common Course Links
Common Course Files
你可能需要嘅嘢
-
亞馬遜
-
易贝
資源與參考資料
暫時冇資源。
文件📁
Arduino 函式庫 (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB