搜尋程式碼

第21/31課:使用紅外線遙控器配合Arduino | SunFounder Robojax

第21/31課:使用紅外線遙控器配合Arduino | SunFounder Robojax

簡介

喺呢一課,我哋會透過用Arduino整一個項目嚟解碼標準遙控器嘅訊號,探索紅外線(IR)通訊嘅有趣世界。呢個項目可以俾你偵測到撳咗IR遙控器邊個掣,然後相應咁觸發動作,例如開蜂鳴器。能夠同IR遙控器介面連接,開拓咗好多實際應用,由簡單嘅家居自動化到自訂控制系統都得。

infrare_remote
IR_receiver_pins

以下係一啲用呢種技術可以整嘅啟發性構思:

  • 萬用遙控器替代品:為你嘅電視、音響系統或其他IR控制裝置整一個自訂遙控器。
  • 家居自動化:用標準遙控器撳一個掣嚟控制燈、風扇或其他電器。
  • 互動項目:整一個保安系統,撳特定掣就會觸發警報。
  • 機械人控制:用IR遙控器無線控制機械人嘅移動同動作。
  • 無障礙輔助工具:為行動不便嘅人士開發一個簡單、大掣嘅遙控器。

硬件同零件

呢個項目主要用幾個簡單零件嚟整,全部通常都包括喺好似SunFounder 3合1套件嘅初學者套件入面。你需要:

  • 一塊Arduino板(例如Uno)
  • 一個IR接收器模組(例如TSOP38238或類似型號)
  • 一個標準IR遙控器(帶CR2025電池)
  • 一個無源蜂鳴器
  • 杜邦線同麵包板

接線指南

ir_remote_control_wiring

以下係呢個項目嘅簡單接線圖。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] 即將推出嘅紅外線項目預覽

圖片

IR_receiver_pins
IR_receiver_pins
infrare_remote
infrare_remote
ir_remote_control_wiring
ir_remote_control_wiring
904-Lesson 21/31: Arduino code fpor decoding Infrared from remote signal
語言: C++
/*
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";
    }
}

你可能需要嘅嘢

資源與參考資料

暫時冇資源。

文件📁

Arduino 函式庫 (zip)