“(SKU:RB-03T002)紅外發(fā)射接收套件”的版本間的差異
(→?概況) |
(→?概況) |
||
第2行: | 第2行: | ||
[[文件:sdfa1.jpg|500px|有框|右]] | [[文件:sdfa1.jpg|500px|有框|右]] | ||
==概況== | ==概況== | ||
? | + | Arduino 紅外無線遙控套件由Mini超薄紅外遙控器和38KHz紅外接收模塊組成,Mini超薄紅外遙控器具有20個功能鍵,發(fā)射距離最遠可達8米,非常適合在室內(nèi)操控各種設(shè)備。紅外接收模塊可接收標準38KHz調(diào)制的遙控器信號,通過對Arduino進行編程,即可實現(xiàn)對遙控器信號的解碼操作,從而可制作各種遙控機器人以及互動作品。 | |
==規(guī)格參數(shù) == | ==規(guī)格參數(shù) == |
2015年6月3日 (三) 13:10的版本
目錄 |
概況
Arduino 紅外無線遙控套件由Mini超薄紅外遙控器和38KHz紅外接收模塊組成,Mini超薄紅外遙控器具有20個功能鍵,發(fā)射距離最遠可達8米,非常適合在室內(nèi)操控各種設(shè)備。紅外接收模塊可接收標準38KHz調(diào)制的遙控器信號,通過對Arduino進行編程,即可實現(xiàn)對遙控器信號的解碼操作,從而可制作各種遙控機器人以及互動作品。
規(guī)格參數(shù)
- CR2025環(huán)保紐扣電池,容量160mah
- 發(fā)射距離:8m以上(具體和周圍環(huán)境、接收端的靈敏度等因素有關(guān))
- 有效角度:60度
- 面貼材料:0.125mmPET,有效壽命2萬次。
- 品質(zhì)穩(wěn)定,性價比高
- 靜態(tài)電流3-5uA,動態(tài)電流3-5mA。
使用方法
- 什么是紅外接收頭?
紅外遙控器發(fā)出的信號是一連串的二進制脈沖碼 為了使其在無線傳輸過程中免受其他紅外信號的干擾,通常都是先將其調(diào)制在特定的載波頻率上,然后再經(jīng)紅外發(fā)射二極管發(fā)射出去,而紅外線接收裝置則要濾除其他雜波,只接收該特定頻率的信號并將其還原成二進制脈沖碼,也就是解調(diào).
- 工作原理
內(nèi)置接收管將紅外發(fā)射管發(fā)射出來的光信號轉(zhuǎn)換為微弱的電信號,此信號經(jīng)由IC內(nèi)部放大器進行放大,然后通過自動增益控制、帶通濾波、解調(diào)變、波形整形后還原為遙控器發(fā)射出的原始編碼,經(jīng)由接收頭的信號輸出腳輸入到電器上的編碼識別電路。
- 紅外接收頭的引腳與連線
D為數(shù)據(jù)輸出 GND為電源地 VCC為電源正
紅外遙 控接收 傳感 器的測試
我們使用 Arduino 控制器來做個測試,要用到硬件設(shè)備如下:
- Arduino 控制器×1
- Arduino LCD1602 字符液晶擴展板×1
- 紅外遙控接收傳感器模塊×1
- 蜂鳴器發(fā)聲模塊×1
- 超薄紅外遙控器×1
- 通用 3P 傳感器連接線×2
- USB 數(shù)據(jù)通信線×1
紅外遙控實驗
- 實驗器件 紅外遙控器 1個 IR Receiver Module 1個 數(shù)字傳感器連接線 1根
- 實驗原理 要想對某一遙控器進行解碼必須要了解該遙控器的編碼方式,這就叫知己知彼,百戰(zhàn)不殆 。本產(chǎn)品使用的遙控器的編碼方式為:NEC協(xié)議。下面就介紹一下NEC協(xié)議:
?NEC協(xié)議介紹:
特點:
(1)8位地址位,8位命令位
(2)為了可靠性地址位和命令位被傳輸兩次
(3)脈沖位置調(diào)制
(4)載波頻率38khz
(5)每一位的時間為1.125ms或2.25ms
?邏輯0和1的定義如下圖:
協(xié)議如下:
?按鍵按下立刻松開的發(fā)射脈沖:
上面的圖片顯示了NEC的協(xié)議典型的脈沖序列。注意:這是首先發(fā)送LSB(最低位)的協(xié)議。在上面的脈沖傳輸?shù)牡刂窞?x59命令為0x16。一個消息是由一個9ms的高電平開始,隨后有一個4.5ms的低電平, (這兩段電平組成引導(dǎo)碼)然后由地址碼和命令碼。地址和命令傳輸兩次。第二次所有位都取反,可用于對所收到的消息中的確認使用??倐鬏敃r間是恒定的,因為每一點與它取反長度重復(fù)。如果你不感興趣, 你可以忽略這個可靠性取反,也可以擴大地址和命令,以每16位!
?按鍵按下一段時間才松開的發(fā)射脈沖:
一個命令發(fā)送一次,即使在遙控器上的按鍵仍然按下。當按鍵一直按下時,第一個110ms的脈沖與上圖一樣,之后每110ms重復(fù)代碼傳輸一次。這個重復(fù)代碼是由一個9ms的高電平脈沖和一個2.25ms低電平和560μs的高電平組成。
?重復(fù)脈沖
注意:脈沖波形進入一體化接收頭以后,因為一體化接收頭里要進行解碼、信號放大和整形,故要注意在沒有紅外信號時,其輸出端為高電平,有信號時為低電平,故其輸出信號電平正好和發(fā)射端相反。接收端脈沖大家可以通過示波器看到,結(jié)合看到的波形理解程序。
?本實驗編程思想
根據(jù)NEC編碼的特點和接收端的波形,本實驗將接收端的波形分成四部分:引導(dǎo)碼(9ms和4.5ms的脈沖)、地址碼16位(包括8位的地址位和8位的地址的取反)、命令碼16位(包括8位命令位和8位命令位的取反)、重復(fù)碼(9ms、2.25ms、560us脈沖組成)。 利用定時器對接收到的波形的高電平段和低電平段進行測量,根據(jù)測量到的時間來區(qū)分:邏輯“0”、邏輯“1”、引導(dǎo)脈沖、重復(fù)脈沖。引導(dǎo)碼和地址碼只要判斷是正確的脈沖即可,不用存儲,但是命令碼必須存儲,因為每個按鍵的命令碼都不同, 根據(jù)命令碼來執(zhí)行相應(yīng)的動作。設(shè)置遙控器上的幾個按鍵VOL+:控制LED燈亮的;VOL-:作為控制蜂鳴器響;
實驗代碼
程序功能:對遙控器發(fā)射出來的編碼脈沖進行解碼,根據(jù)解碼結(jié)果執(zhí)行相應(yīng)的動作。按下前進鍵紅燈亮,松開紅燈滅停止;按下后退鍵蜂鳴器響,松開蜂鳴器停止響;這樣大家就可以用遙控器遙控你的器件了,讓它聽你的指揮。其它按鍵的譯碼方式與這幾個鍵一樣,只要大家用示波器測出它們各自的波形,了解各自的命令碼,在執(zhí)行譯碼結(jié)果的函數(shù)中寫上對應(yīng)的命令碼和要執(zhí)行的動作即可。
#define BUZZER 10//蜂鳴器 #define LED_RED 11//紅燈 #define IR_IN 8 //紅外接收 int Pulse_Width=0;//存儲脈寬 int ir_code=0x00;//命令值 void timer1_init(void)//定時器初始化函數(shù) { TCCR1A = 0X00; TCCR1B = 0X05;//給定時器時鐘源 TCCR1C = 0X00; TCNT1 = 0X00; TIMSK1 = 0X00; //禁止定時器溢出中斷 } 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個0 for(i=0; i<8; i++) { if(logic_value() != 0) //不是0 return; } //執(zhí)行6個1 for(i=0; i<6; i++) { if(logic_value()!= 1) //不是1 return; } //執(zhí)行1個0 if(logic_value()!= 0) //不是0 return; //執(zhí)行1個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) //當高電平持續(xù)時間超過100ms,表明此時沒有按鍵按下 { ir_code = 0xff00; return; } } //如果高電平持續(xù)時間不超過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();//定時器初始化 while(1) { remote_decode(); //譯碼 remote_deal(); //執(zhí)行譯碼結(jié)果 } }
遙控器鍵值附表
相關(guān)鏈接
購買地址:紅外發(fā)射接收套件