和12歲小同志搞創(chuàng)客開發(fā):如何驅動紅外遙控器?

點擊上方藍色字體,關注我們
紅外遙控器是我們常用的一種遙控設備。你可以用它控制電視、空調、音響等家用電器,同時也可以改造家里的電飯煲、咖啡機和微波爐等傳統(tǒng)家電。
想象一下只用一個遙控器就能搞定所有的家用電器控制,只需要搭配Arduino控制器、繼電器和紅外遙控器套件,就可以搭建一個智能家用電器平臺。

1
紅外遙控器通信原理
紅外遙控器有兩部分組成:紅外發(fā)射裝置(紅外遙控器)和紅外接收裝置(紅外接收頭)。
紅外發(fā)射裝置(紅外遙控器)發(fā)出的信號是一連串的二進制脈沖碼為了使其在無線傳輸過程中免受其他紅外信號的干擾,通常都是先將其調制在特定的載波頻率上,然后再經(jīng)紅外發(fā)射二極管發(fā)射出去。
紅外接收裝置(紅外接收頭)內置接收管將紅外發(fā)射管發(fā)射出來的光信號轉換為微弱的電信號,此信號經(jīng)由IC內部放大器進行放大,然后通過自動增益控制、帶通濾波、解調變、波形整形后還原為遙控器發(fā)射出的原始編碼,經(jīng)由接收頭的信號輸出腳輸入到電器上的編碼識別電路。
2
NEC協(xié)議
想對某一遙控器進行解碼必須要了解該遙控器的編碼方式,我選用的這款遙控器產(chǎn)品使用的編碼方式為:NEC協(xié)議。
NEC協(xié)議特點如下所示:
8位地址位,8位命令位;
為了可靠性地址位和命令位被傳輸兩次;
脈沖位置調制;
載波頻率38khz;
每一位的時間為1.125ms或2.25ms。
NEC協(xié)議表示邏輯0和1的定義如下圖:

具體協(xié)議分析如下所示:
按鍵按下立刻松開的發(fā)射脈沖典型序列如下所示:

注意:這是首先發(fā)送LSB(最低位)的協(xié)議
在上面的脈沖傳輸?shù)牡刂窞?strong style="text-align:left;color:rgb(0,0,0);font-size:16px;">0x59命令為0x16。一個消息是由一個9ms的高電平開始,隨后有一個4.5ms的低電平,(這兩段電平組成引導碼)然后由地址碼和命令碼。地址和命令傳輸兩次。第二次所有位都取反,可用于對所收到的消息中的確認使用。總傳輸時間是恒定的,因為每一點與它取反長度重復。如果你不感興趣, 你可以忽略這個可靠性取反,也可以擴大地址和命令,以每16位。
按鍵按下一段時間才松開的發(fā)射脈沖典型序列如下所示:

一個命令發(fā)送一次,即使在遙控器上的按鍵仍然按下。當按鍵一直按下時,第一個110ms的脈沖與上圖一樣,之后每110ms重復代碼傳輸一次。這個重復代碼是由一個9ms的高電平脈沖和一個2.25ms低電平和560μs的高電平組成。
重復脈沖典型序列如下所示:

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

往期推薦
點擊閱讀原文,更精彩~