伍東亮
【摘要】目前,創客教育開始風靡全國高校,創客教育是以學生興趣為依托、以創新創意為目標、以多信息傳感融合為技術背景的新型教育模式。如何將傳感器原理通俗易懂的講解給學生并引導學生進行傳感器應用是創客基礎教育需要解決的關鍵問題。
【關鍵詞】創客教育 紅外發射 傳感器
【中圖分類號】G71 【文獻標識碼】A 【文章編號】2095-3089(2017)17-0254-01
目前創客教育產品設計中有的會采用紅外遙控功能,但是諸多老師覺得紅外遙控知識抽象、控制復雜而不能很好的進行知識講解,在此我就紅外接收原理及解碼方法進行研究,并思考整理出一套由易到難、循序漸進、通俗易懂的紅外遙控教學和學習方法。
1.紅外遙控創客基礎教學之八問八答
1.1什么是紅外光波信號?
遙控器發射的紅外光波其實就是一串亮滅不斷變化的光。那么怎么樣從這些不斷變化的光信號中讀取出它的秘密呢?我們首先要理解紅外編碼規則,看下圖1:
從上圖中可以看出,紅外遙控是通過控制紅外發送二極管的亮滅持續時間來表示數字0和1,數字1比數字0耗時時間要長,這種傳輸方式類似于抗戰片中的手電筒傳播信號。
1.2紅外遙控器發射光波里包含了什么內容?
一幀完整的紅外遙控信號,它由引導碼(最前面的兩個4.5ms的高低電平構成)、客戶代碼(代表公司,比如0x01格力,0x02長虹)、數據碼(按鍵鍵值,我們編程最關心的)、數據碼反碼(用來驗證接收數據是否正確)及SY(同步信號)共五部分組成(見圖2)。只要明白一幀數據的構成,才能進行數據分析,解析紅外信息。
1.3如何接收紅外信號?
以51單片機為例來舉例說明如何接收紅外信號。紅外信號是通過一組持續時間不同的高低電平來表示數字0和1,那么要怎樣才能精確計算出一組高低電平持續時間呢?這個計量時間是比較苛刻的,為了減少誤差選用單片機定時器選用方式2(自動重裝)來減少計時誤差。方式2下一次定時中斷耗時根據晶振頻率而定。11.0592M時, T = 256*(12/11.0592)= 277US。
接收紅外信號其實就是接收每一組高低電平持續時間,這個時間通過外部中斷刷新定時器中斷計數來獲得,所以接收到的原始信號數據是一組定時器溢出次數的數據。以51單片機為例,將紅外接收信號引腳與單片機外部中斷引腳相連,采用外部中斷來接收紅外數據,當中斷引腳接收到一個紅外下降沿信號時,首先將定時器溢出次數清零,定時器每溢出中斷一次計數加一,當外部中斷接收到下一個下降沿信號,將當前溢出次數存儲作為第一個時間數據。
當單片機接收到第一個時間數據后,要立即分析是否為紅外遙控的起始信號。一般的引導碼大約為9000us,在8.8ms與13.8ms之間認為是引導碼,以11.0592M晶振為例,中斷溢出一次耗時277us,8.8ms約中斷32次,13.8ms約中斷50次,如果溢出次數符合32-50次范圍,可以認為是紅外信號的引導碼,我們將定時器中斷次數存入數組Time[ 0 ]中。
引導碼之后是客戶碼和數據碼。后續數據是由多個持續時間不同的高低電平組成,每一個高低電平會觸發單片機產生一次中斷。只需在前一次中斷中將定時器溢出中斷計數變量清零,在下一次中斷發生后讀取定時器溢出中斷計數變量值,并將值按順序存入數組Time[ ] 即可。一幀完整信號總共有34組高低電平信號(引導碼1組 + 用戶碼8組 + 用戶碼8組 + 數據碼8組 + 數據反碼8組 + 同步碼1組)。一幀數據會觸發單片機外部中斷次數為34次。所以當中斷計數為34時,表示數據接收完畢。
1.4 如何解碼紅外信號?
紅外信號接收到全部數據后,開始解析紅外信號。數據0和1高低電平時間長度不一樣,只需要設定一個參考時間值,這個參考時間值如何設定才合理?可以將一個0和一個1總時間相加除以2得到。(例如:0耗時1.125毫秒,1耗時2.25毫秒,參考時間為:(1.125+2.25)/2=1.687ms=1687US,轉化為定時器溢出次數為1687/277=6次,判斷溢出次數如果大于6則為數據1,小于6則為數據0。將全部溢出次數數據按此規則進行轉換,得到一組二進制數值。
紅外數據中的用戶碼和數據碼都是一個8bit的數據構成,低字節在前,高字節在后。將解析出來的二進制數據通過右移位來實現8位的字節數據。紅外遙控一幀數據包括4個字節的數據,要依次解析出這四個數據,并將數據存入數組中。
1.5 如何驗證接收數據正確性?
一幀紅外數據包含有一個數據碼和一個數據反碼,只需將解碼后的數據碼和數據反碼進行取反比較即可驗證接收數據是否正確。
1.6如何讀取紅外遙控按鍵鍵值?
紅外遙控器每個按鍵對應一個按鍵鍵值,如何才能得到每個按鍵對應的鍵值呢?問題四解碼過程中解析出來的數據碼即為按鍵鍵值,可以通過串口打印或者液晶顯示即可將按鍵鍵值顯示出來。
1.7 如何利用遙控器進行遙控編程控制?
通過上述方法得到控制按鍵的鍵值后,解析每次接收到的紅外遙控數據碼碼值,通過條件分支語句switch比較碼值并進行軟件編程控制即可。
1.8 不同的遙控器解碼方式有差異嗎?
據我了解不同的遙控器紅外編碼方式大體一樣,差別主要在于以下三個方面:
(1)數字0、1高低點持續時間不一樣。
(2)引導碼高低電平持續時間不一樣
(3)一幀數據構成不一樣(很少)
不同的遙控器要找遙控器對應的控制芯片,查看它的說明書,查找以上數據,結合數據對程序做適當修改即可。
2.結語
通過多次的紅外遙控教學嘗試發現,學生只要有一定的單片機C語言編程基礎和良好的外部中斷和定時器編程使用能力,通過以上思路可以很好的掌握和理解紅外遙控接收編程。
參考文獻:
[1]智能遙控技術的研究與實現探微[J].許永樂.廈門科技.2013(04)