紅外接收

出自YFRobotwiki
跳轉到: 導覽搜尋
紅外接收


產品簡介


紅外遙控分發射和接收兩部分,發射部分為Mini遙控器,接收部分為紅外接收模塊,紅外接收模塊採用HS0038一體化紅外遙控接收元件,載波頻率為38.0kHz,周期26us,可抗自然光的反射干擾。

紅外系統原理框圖如下,Mini遙控器編碼調製發出紅外線,接收模塊將接收到的紅外線遙控信號,經過放大、解調和整形後輸出功能指令信號,送至微處理器進行識別和處理,從而實現遙控過程。

紅外系統框圖.png

紅外


其他詳見參考資料。

規格參數


  • 供電電壓:DC3v3-5V
  • 紅外協議:NEC
  • 載波頻率:38 kHz
  • 周期:26μs
  • 接收距離:10m
  • 安裝孔徑:3MM
  • 模塊尺寸:28*21*11MM(長*寬*高)/ Mini遙控器:88*40*7MM(長*寬*高)
  • 孔間距:15MM
  • 模塊重量:2.2g / Mini遙控器:12.6g

主要應用

廣泛應用於:空調、風扇、暖風機、加濕器、電視、DVD、機頂盒、車載移動DVD、硬碟播放器、多媒體組合音響、數碼相框、手機等家電產品,電腦及周邊設備,感應潔具,儀錶,工業自動化,遙控玩具,通訊器材,照相器材,事務機器,金融電子,汽車電子,燈飾照明等領域。


引腳說明


  • 1. G -- Gnd(地)
  • 2. V -- Vcc(電源+5V)
  • 3. S -- Sign(信號)


應用示例


提示:以下程序需使用到 IRremote庫文件,文件下載地址見頁末 - 參考資料。下載後將其解壓至arduinoIDE安裝目錄/libraries文件夾中,例如: "D:\Program Files\Arduino\arduino-1.6.4-windows\arduino-1.6.4\libraries"。

電路連接


紅外接收模塊的 G、V、S分別連接 Arduino UNO的GND、VCC(+5V)、D11引腳。

電路連接示意圖


紅外遙控


示例代碼

示例一:獲取鍵值

/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */
 
#include <IRremote.h>
 
int RECV_PIN = 11;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.print("irCode: ");
    Serial.println(results.value, HEX);
    delay(200);
    irrecv.resume(); // Receive the next value
  }
}

程序下載地址:IRrecvDemo

程序運行結果:接收按鍵值,並串口列印。出現 "FFFFFFFF" 碼值,屬於正常現象,它是當收到重複碼(長按)時NEC的解碼值。

NEC重複碼

對於重複發射(按鈕按住),解碼代碼將一次次的返回相同的解碼值。唯一的例外是NEC,會重複發射一個特殊的代碼,而不是重複的發射該按鍵編碼值。因此, 解碼程序返回一個特殊REPEAT值(NEC默認返回值為0xFFFFFFFF,用戶也可以在庫中進行修改)。

NEC重複碼定義.png


最終整理按鍵值表格:

遙控器字元 鍵值 遙控器字元 鍵值
紅色/關閉鍵 0xFFA25D MENU 0xFFE21D
TEST 0xFF22DD + 0xFF02FD
返回鍵 0xFFC23D 快退/左2三角 0xFFE01F
播放/一個三角 0xFFA857 快進/右2三角 0xFF906F
0 0xFF6897 - 0xFF9867
C 0xFFB04F 1 0xFF30CF
2 0xFF18E7 3 0xFF7A85
4 0xFF10EF 5 0xFF38C7
6 0xFF5AA5 7 0xFF42BD
8 0xFF4AB5 9 0xFF52AD


示例二:紅外遙控

// Infrared remote control test
 
#include <IRremote.h>
 
int RECV_PIN = 11;
int LED_PIN = 13;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  pinMode(LED_PIN,OUTPUT);
  irrecv.enableIRIn(); // Start the receiver
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    controlLED(&results);
    irrecv.resume(); // Receive the next value
  }
}
 
//Control the LED
void controlLED(decode_results *results) {
  switch(results->value){
    case 0xFFA25D:
      digitalWrite(LED_PIN,LOW);
      break;
    case 0xFFE21D:
      digitalWrite(LED_PIN,HIGH);
      break;
  }
}

程序下載地址:IRrecvControl

程序運行結果:按「MENU」按鈕,點亮LED,按下「關閉」按鈕,關閉LED。


參考資料





返回首頁

更多建議和問題歡迎反饋至 YFRobot論壇

購買方式:YFRobot 電子工作室