“(SKU:RB-03T004)紅外發(fā)射模塊”的版本間的差異

來自ALSROBOT WiKi
跳轉至: 導航、 搜索
?模塊測試
第32行: 第32行:
 
|-
 
|-
 
|align="center"|產(chǎn)品
 
|align="center"|產(chǎn)品
?
|align="center"|接線引腳
+
|align="center"|UNO引腳
 
|-
 
|-
 
|align="center"|紅外發(fā)射模塊
 
|align="center"|紅外發(fā)射模塊

2015年6月29日 (一) 21:27的版本


3232.jpg

目錄

概述

由于在遠距離傳輸過程中使用連接線可能會導致傳輸數(shù)據(jù)錯誤。2010年最新推出的IR&LED Module 是一款Arduino兼容的紅外線發(fā)射傳感器,可通過對Arduino進行編程發(fā)射出38KHz 調制信號,可適應市面上各種紅外接收頭,以便IR Receiver Module 38KHz 紅外線接收傳感器能接收到,從而實現(xiàn)紅外無線通訊。

性能參數(shù)

  1. 供電電壓: 5V
  2. 工作環(huán)境:-25~+85℃
  3. 儲存溫度:-30~+100 ℃
  4. 波長: 940nm
  5. 模塊尺寸: 13.7mm×27.8mm
  6. 模塊重量: 1g

引腳定義

傳感器引腳的定義是
  • S:輸出信號
  • +:電源(VCC)
  • -:地(GND)
Hongwaifashe01.jpg

連接示意圖

Hongwaifashejiexian01.jpg

模塊測試

我們使用Arduino控制器來做個測試,要用到硬件設備如下:

  1. Arduino控制器×2
  2. Arduino 傳感器擴展板×2
  3. 紅外發(fā)射模塊×1和紅外接收模塊×1
  4. 電位計模塊×1和 LED 發(fā)光模塊×1
  5. 通用3P傳感器連接線×4
  6. USB 數(shù)據(jù)通信線×2
3232-4.jpg

接線方法:

產(chǎn)品 UNO引腳
紅外發(fā)射模塊 數(shù)字接口2
紅外接收模塊 數(shù)字接口2
旋轉角度電位計 模擬接口0
LED模塊 數(shù)字接口9


將發(fā)送部分代碼編譯后下載到作為發(fā)送部分的Arduino里,將接收部分代碼編譯后下載到作為接收部分的Arduino里,就可以在串口助手窗口上顯示接收到的當前值(注:串口助手波特率調到115200 )。Arduino實驗代碼如下。
發(fā)送部分程序:
#define ADD 0x00 
int IR_S = 2;    // 定義數(shù)字口2 為發(fā)射模塊接口 
int a; 
void setup() 
{ 
 	 pinMode(IR_S, OUTPUT);  //定義IR_S為輸出模式 
 	 Serial.begin(115200); //定義頻率為115200 
}
void loop() 
{ 
    uint8_t dat,temp;   
{    
      a=analogRead(0); // 讀取模擬口0 的值 
      temp =a/4; 
      Serial.println(temp,DEC ); // 將讀取的數(shù)值打印到串口上 
      IR_Send38KHZ(280,1);//發(fā)送9ms 的起始碼 
      IR_Send38KHZ(140,0);//發(fā)送4.5ms 的結果碼 
     
      IR_Sendcode(ADD);//用戶識別碼 
      dat=~ADD; 
      IR_Sendcode(dat);//用戶識別碼反嗎 
      IR_Sendcode(temp);// 操作碼 
      dat=~temp; 
      IR_Sendcode(dat);//操作碼反碼 
     
      IR_Send38KHZ(21,1);// 發(fā)送結束碼 
    } 
    delay(200); 
}  
 
void IR_Send38KHZ(int x,int y)  //產(chǎn)生38KHZ紅外脈沖 
{  
 for(int i=0;i<x;i++)//15=386US 
   {  
       if(y==1) 
        { 
      		digitalWrite(IR_S,1); 
           delayMicroseconds(9); 
           digitalWrite(IR_S,0); 
           delayMicroseconds(9); 
        } 
       else  
        { 
           digitalWrite(IR_S,0); 
           delayMicroseconds(20); 
        } 
   }                                                            
} 

void IR_Sendcode(uint8_t x)   
{ 
    for(int i=0;i<8;i++) 
    { 
       if((x&0x01)==0x01) 
        { 
            IR_Send38KHZ(23,1); 
            IR_Send38KHZ(64,0);              
        } 
        else  
        { 
            IR_Send38KHZ(23,1); 
            IR_Send38KHZ(21,0);   
        } 
        x=x>>1; 
     }   
} 
此代碼的功能是從模擬口0 讀取電位計的值,并通過紅外發(fā)射頭將讀取的數(shù)值發(fā)送出去。

接收部分程序:

#define IR_LED  2   //IR 接收數(shù)字口2 
#define MAX  128 
#define MICRO_STEP  10 
#define IDLE_PULSE  4000 
unsigned long pulses[MAX]; 
unsigned char IRCOM[7]; 
unsigned long z; 
int w; 
byte f=B00000000; // 定義f 為位 
int n; 
int ledpin=9; // 定義數(shù)字口9 為LED 模塊接口 
void setup() 
{ 
  pinMode(IR_LED, INPUT); 
  Serial.begin(115200); 
  pinMode(ledpin,OUTPUT); //定義ledpin 為輸出模式 
} 
                                                             
void loop() 
{   
  if( digitalRead(IR_LED) == LOW) 
  { 
    // 開始接收數(shù)據(jù) 
        int count = 0; 
        int exit = 0; 
    while(!exit) 
    { 
      while( digitalRead(IR_LED) == LOW ) 
         delayMic roseconds(MICRO_STEP); 
      unsigned long start = micros(); 
      int max_high = 0; 
      while( digitalRead(IR_LED) == HIGH ) 
      { 
        delayMic roseconds(MICRO_STEP); 
        max_high += MICRO_STEP; 
        if( max_high > IDLE_PULSE ) 
        { 
          exit = 1; 
          break; 
        }
      }
      unsigned long duration = micros() - start;
      pulses[count++] = duration;
    }
    for(int i=3; i<4; i++) 
    { 
      for(int j=0;j<8;j++) 
      { 
        if(pulses[ i*8+j+1] < IDLE_PULSE) 
         { 
            IRCOM[i]=IRCOM [i] >> 1;            
            if((pulses[i*8+j+1])>1000) 
               {IRCOM[i] = IRCOM[i] | 0x80;}             
         } 
       z= pulses[i*8+j+1]; 
 /***************************************************/ 
     //將接收到的脈沖數(shù)據(jù)轉換成十進制                                                                    
 /***************************************************/   
       if(z<800) 
          w=10000000;  //如果Z 小于800  w=10000000 
       else 
          w=00000000;  //如果Z 大于800  w=00000000 
       f=f>>1;         // 將f 右移1 位 
       f=f+w;       
 /***************************************************/ 
     } 
    } 
   n=int(f); 
   Serial.print(n);// 將接收到的數(shù)據(jù)打印到串口上 
   analogWrite(ledpin,n); //將接收到的數(shù)據(jù)寫入ledpin 接口,控制LED 亮度 
  } 
} 
此代碼的功能是通過紅外接收頭接收發(fā)送部分發(fā)送出的電位計的值,將讀到的值來控制LED的亮度,并通過串口助手顯示當前接收到的值。如下圖所示左側串口助手(串口號為:117 )顯示的是紅外發(fā)送部分當前發(fā)送出的電位計的值,右側串口助手(串口號為:88)顯示的是紅外接收部分接收到的數(shù)值。這樣就實現(xiàn)了通過旋轉角度電位計模塊無線控制接收端的LED亮度。
3232-5.jpg

相關推薦

購買地址:紅外發(fā)射模塊
論壇地址:奧松機器人技術論壇