(SKU:RB-03T002)紅外發(fā)射接收套件

來(lái)自ALSROBOT WiKi
2015年6月3日 (三) 13:0726wd討論 | 貢獻(xiàn)的版本

(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航搜索


Sdfa1.jpg

目錄

概況

Arduino 紅外無(wú)線遙控套件由Mini超薄紅外遙控器和38KHz紅外接收模塊組成,Mini超薄紅外遙控器具有20個(gè)功能鍵,發(fā)射距離最遠(yuǎn)可達(dá)8米,非常適合在室內(nèi)操控各種設(shè)備。紅外接收模塊可接收標(biāo)準(zhǔn)38KHz調(diào)制的遙控器信號(hào),通過(guò)對(duì)Arduino進(jìn)行編程,即可實(shí)現(xiàn)對(duì)遙控器信號(hào)的解碼操作,從而可制作各種遙控機(jī)器人以及互動(dòng)作品。

規(guī)格參數(shù)

  1. CR2025環(huán)保紐扣電池,容量160mah
  2. 發(fā)射距離:8m以上(具體和周圍環(huán)境、接收端的靈敏度等因素有關(guān))
  3. 有效角度:60度
  4. 面貼材料:0.125mmPET,有效壽命2萬(wàn)次。
  5. 品質(zhì)穩(wěn)定,性價(jià)比高
  6. 靜態(tài)電流3-5uA,動(dòng)態(tài)電流3-5mA。

使用方法

  • 什么是紅外接收頭?

紅外遙控器發(fā)出的信號(hào)是一連串的二進(jìn)制脈沖碼 為了使其在無(wú)線傳輸過(guò)程中免受其他紅外信號(hào)的干擾,通常都是先將其調(diào)制在特定的載波頻率上,然后再經(jīng)紅外發(fā)射二極管發(fā)射出去,而紅外線接收裝置則要濾除其他雜波,只接收該特定頻率的信號(hào)并將其還原成二進(jìn)制脈沖碼,也就是解調(diào).

  • 工作原理

內(nèi)置接收管將紅外發(fā)射管發(fā)射出來(lái)的光信號(hào)轉(zhuǎn)換為微弱的電信號(hào),此信號(hào)經(jīng)由IC內(nèi)部放大器進(jìn)行放大,然后通過(guò)自動(dòng)增益控制、帶通濾波、解調(diào)變、波形整形后還原為遙控器發(fā)射出的原始編碼,經(jīng)由接收頭的信號(hào)輸出腳輸入到電器上的編碼識(shí)別電路。

  • 紅外接收頭的引腳與連線

D為數(shù)據(jù)輸出 GND為電源地 VCC為電源正

紅外遙 控接收 傳感 器的測(cè)試

我們使用 Arduino 控制器來(lái)做個(gè)測(cè)試,要用到硬件設(shè)備如下:

  1. Arduino 控制器×1
  2. Arduino LCD1602 字符液晶擴(kuò)展板×1
  3. 紅外遙控接收傳感器模塊×1
  4. 蜂鳴器發(fā)聲模塊×1
  5. 超薄紅外遙控器×1
  6. 通用 3P 傳感器連接線×2
  7. USB 數(shù)據(jù)通信線×1

紅外遙控實(shí)驗(yàn)

  1. 實(shí)驗(yàn)器件 紅外遙控器 1個(gè) IR Receiver Module 1個(gè) 數(shù)字傳感器連接線 1根
  2. 實(shí)驗(yàn)原理 要想對(duì)某一遙控器進(jìn)行解碼必須要了解該遙控器的編碼方式,這就叫知己知彼,百戰(zhàn)不殆 。本產(chǎn)品使用的遙控器的編碼方式為:NEC協(xié)議。下面就介紹一下NEC協(xié)議:

?NEC協(xié)議介紹: 特點(diǎn): (1)8位地址位,8位命令位
(2)為了可靠性地址位和命令位被傳輸兩次
(3)脈沖位置調(diào)制
(4)載波頻率38khz
(5)每一位的時(shí)間為1.125ms或2.25ms
?邏輯0和1的定義如下圖:

Hongwai1.jpg

協(xié)議如下:
?按鍵按下立刻松開(kāi)的發(fā)射脈沖:

Hongwai2.jpg

上面的圖片顯示了NEC的協(xié)議典型的脈沖序列。注意:這是首先發(fā)送LSB(最低位)的協(xié)議。在上面的脈沖傳輸?shù)牡刂窞?x59命令為0x16。一個(gè)消息是由一個(gè)9ms的高電平開(kāi)始,隨后有一個(gè)4.5ms的低電平, (這兩段電平組成引導(dǎo)碼)然后由地址碼和命令碼。地址和命令傳輸兩次。第二次所有位都取反,可用于對(duì)所收到的消息中的確認(rèn)使用??倐鬏敃r(shí)間是恒定的,因?yàn)槊恳稽c(diǎn)與它取反長(zhǎng)度重復(fù)。如果你不感興趣, 你可以忽略這個(gè)可靠性取反,也可以擴(kuò)大地址和命令,以每16位!
?按鍵按下一段時(shí)間才松開(kāi)的發(fā)射脈沖:

Hongwai3.jpg

一個(gè)命令發(fā)送一次,即使在遙控器上的按鍵仍然按下。當(dāng)按鍵一直按下時(shí),第一個(gè)110ms的脈沖與上圖一樣,之后每110ms重復(fù)代碼傳輸一次。這個(gè)重復(fù)代碼是由一個(gè)9ms的高電平脈沖和一個(gè)2.25ms低電平和560μs的高電平組成。
?重復(fù)脈沖

Hongwai4.jpg

注意:脈沖波形進(jìn)入一體化接收頭以后,因?yàn)橐惑w化接收頭里要進(jìn)行解碼、信號(hào)放大和整形,故要注意在沒(méi)有紅外信號(hào)時(shí),其輸出端為高電平,有信號(hào)時(shí)為低電平,故其輸出信號(hào)電平正好和發(fā)射端相反。接收端脈沖大家可以通過(guò)示波器看到,結(jié)合看到的波形理解程序。
?本實(shí)驗(yàn)編程思想
根據(jù)NEC編碼的特點(diǎn)和接收端的波形,本實(shí)驗(yàn)將接收端的波形分成四部分:引導(dǎo)碼(9ms和4.5ms的脈沖)、地址碼16位(包括8位的地址位和8位的地址的取反)、命令碼16位(包括8位命令位和8位命令位的取反)、重復(fù)碼(9ms、2.25ms、560us脈沖組成)。 利用定時(shí)器對(duì)接收到的波形的高電平段和低電平段進(jìn)行測(cè)量,根據(jù)測(cè)量到的時(shí)間來(lái)區(qū)分:邏輯“0”、邏輯“1”、引導(dǎo)脈沖、重復(fù)脈沖。引導(dǎo)碼和地址碼只要判斷是正確的脈沖即可,不用存儲(chǔ),但是命令碼必須存儲(chǔ),因?yàn)槊總€(gè)按鍵的命令碼都不同, 根據(jù)命令碼來(lái)執(zhí)行相應(yīng)的動(dòng)作。設(shè)置遙控器上的幾個(gè)按鍵VOL+:控制LED燈亮的;VOL-:作為控制蜂鳴器響;

實(shí)驗(yàn)代碼

程序功能:對(duì)遙控器發(fā)射出來(lái)的編碼脈沖進(jìn)行解碼,根據(jù)解碼結(jié)果執(zhí)行相應(yīng)的動(dòng)作。按下前進(jìn)鍵紅燈亮,松開(kāi)紅燈滅停止;按下后退鍵蜂鳴器響,松開(kāi)蜂鳴器停止響;這樣大家就可以用遙控器遙控你的器件了,讓它聽(tīng)你的指揮。其它按鍵的譯碼方式與這幾個(gè)鍵一樣,只要大家用示波器測(cè)出它們各自的波形,了解各自的命令碼,在執(zhí)行譯碼結(jié)果的函數(shù)中寫(xiě)上對(duì)應(yīng)的命令碼和要執(zhí)行的動(dòng)作即可。

#define BUZZER 10//蜂鳴器
#define LED_RED 11//紅燈
#define IR_IN  8  //紅外接收
int Pulse_Width=0;//存儲(chǔ)脈寬
int  ir_code=0x00;//命令值
void timer1_init(void)//定時(shí)器初始化函數(shù)
{
  TCCR1A = 0X00;
  TCCR1B = 0X05;//給定時(shí)器時(shí)鐘源
  TCCR1C = 0X00;  TCNT1 = 0X00;
  TIMSK1 = 0X00;	//禁止定時(shí)器溢出中斷
}
  void remote_deal(void)//執(zhí)行譯碼結(jié)果函數(shù)
  {
   switch(ir_code)
   {
     case 0xff00://停止
     digitalWrite(LED_RED,LOW);//紅燈不亮
     digitalWrite(BUZZER,LOW);//蜂鳴器不響
     break;  case 0xfe01://VOL+
     digitalWrite(LED_RED,HIGH);//紅燈亮
     break;  case 0xf609://VOL-
     digitalWrite(BUZZER,HIGH);//蜂鳴器響
     break;
   }
  }
  char logic_value()//判斷邏輯值“0”和“1”子函數(shù)
  {
  while(!(digitalRead(8))); //低等待
  Pulse_Width=TCNT1;
  TCNT1=0;
  if(Pulse_Width>=7&&Pulse_Width<=10)//低電平560us
  {
    while(digitalRead(8));//是高就等待
    Pulse_Width=TCNT1;
    TCNT1=0;
    if(Pulse_Width>=7&&Pulse_Width<=10)//接著高電平560us
      return 0;
    else if(Pulse_Width>=25&&Pulse_Width<=27) //接著高電平1.7ms
      return 1;
  }
  return -1;
  }
  void pulse_deal()//接收地址碼和命令碼脈沖函數(shù)
  {
  int i;  //執(zhí)行8個(gè)0  for(i=0; i<8; i++)
  {
    if(logic_value() != 0) //不是0
        return;
  }
    //執(zhí)行6個(gè)1  for(i=0; i<6; i++)
  {
    if(logic_value()!= 1) //不是1
        return;
  }
    //執(zhí)行1個(gè)0
  if(logic_value()!= 0) //不是0
      return;
    //執(zhí)行1個(gè)1
  if(logic_value()!= 1) //不是1
      return;
    //解析遙控器編碼中的command指令
  ir_code=0x00;//清零
  for(i=0; i<16;i++ )
  {
    if(logic_value() == 1)
    {
      ir_code |=(1<<i);
    }
  }
  }
  void remote_decode(void)//譯碼函數(shù)
  {
  TCNT1=0X00;
         while(digitalRead(8))//是高就等待
  {
    if(TCNT1>=1563)  //當(dāng)高電平持續(xù)時(shí)間超過(guò)100ms,表明此時(shí)沒(méi)有按鍵按下
    {
      ir_code = 0xff00;
      return;
    }
    }
  //如果高電平持續(xù)時(shí)間不超過(guò)100ms
  TCNT1=0X00;
  while(!(digitalRead(8))); //低等待
  Pulse_Width=TCNT1;
  TCNT1=0;
  if(Pulse_Width>=140&&Pulse_Width<=141)//9ms
  {
   while(digitalRead(8));//是高就等待
    Pulse_Width=TCNT1;
    TCNT1=0;
    if(Pulse_Width>=68&&Pulse_Width<=72)//4.5ms
    {
      pulse_deal();
      return;
    }
    else if(Pulse_Width>=34&&Pulse_Width<=36)//2.25ms
    {
      while(!(digitalRead(8)));//低等待
      Pulse_Width=TCNT1;
      TCNT1=0;
      if(Pulse_Width>=7&&Pulse_Width<=10)//560us
      {
        return;
       }
    }
  
  }
  void setup()
  {
  unsigned char i;
  pinMode(LED_RED,OUTPUT);//設(shè)置與紅燈連接的引腳為輸出模式
  pinMode(BUZZER,OUTPUT);//設(shè)置與蜂鳴器連接的引腳為輸出模式
  pinMode(IR_IN,INPUT);//設(shè)置紅外接收引腳為輸入
  }
  void loop()
  {
    timer1_init();//定時(shí)器初始化
  while(1)
  {
    remote_decode();  //譯碼
    remote_deal();   //執(zhí)行譯碼結(jié)果
  }
}

遙控器鍵值附表

Yaokongqibiaoge.jpg

相關(guān)鏈接

購(gòu)買地址:紅外發(fā)射接收套件