摘 要: 提出了一種用于智能家居的學習型空調遙控器解決方案。該方案在軟件設計時采用測量脈沖寬度的原理并對測量數據進行了編碼壓縮,同時用軟件形式模擬38 kHz載波信號的發送,實現了對各種空調遙控器的自學習功能。測試結果表明,本編碼壓縮方法簡化了編碼信息,減少了存儲空間,可以代替各種遙控器。
關鍵詞: 紅外遙控;載頻;編碼狀態轉換;自學習
現代科學技術的發展,尤其是計算機技術和網絡技術的高速發展,不僅改變了人們的工作方式,也逐漸地改變了人們的生活方式,智能家居即是在這樣的背景下產生的。無線控制的智能家居系統可以不破壞原有裝修,只要在一些插座等處安裝相應的模塊即可實現智能控制,更不會對原來房屋墻面造成破壞,即便家居已裝修也可輕松升級為智能家居。但是對主要由遙控器控制的空調系統需設計專門的學習型紅外遙控器以便接入智能家居系統。為此,本文提出一種此類型的空調遙控器解決方案。
1 紅外遙控碼型分析
通過對市面上比較普遍的幾十種遙控器的碼型結構進行研究分析發現,各空調生產廠家對其遙控器的收發信號的脈沖編碼、碼型和碼流沒有統一的標準,存在如下狀況:
(1)幀格式多樣:脈沖流中一般包括:幀頭、系統碼、操作碼、同步碼、幀間隔碼、幀尾,且同步碼與幀間隔碼出現的位置不固定。對這些靈活多變的幀格式,很難區分各種脈沖流的含義。
(2)碼型多樣,如圖1所示。
(3)載波頻率誤差大:標準載波頻率為38 kHz,誤差范圍±2 kHz。
(4)編碼長短不一致:彩電類產品一般只有幾十位,而空調遙控器編碼長達上百位。
(5)發送方式不同:最常用的發送方式有:完整幀如圖2(a)只發送1次、完整幀如圖2(b)重復發送2次、如圖2(c)先發1個完整幀,后重復發送1個幀頭和1個脈沖。
本系統避開了各種形式的碼型和幀格式,不考慮其實際意義,只檢測脈沖的時間寬度[1],再對測量的數據進行壓縮,即可存儲遙控命令,發送時進行解壓來重構命令數據。
2 遙控器硬件結構
學習型紅外遙控器由紅外一體化接收電路、反相器、溫度傳感器、單片機、紅外發送電路、E2PROM存儲器、鍵盤及LED指示燈構成,如圖3所示。
單片機AT89S52構成紅外遙控的處理器,其數據存儲器RAM(258B)用來存儲學習過程中編碼信號的脈沖寬度和編碼。
(1)紅外發射電路:38 kHz方波直接由單片機模擬產生,經過三極管放大后,驅動紅外發光二極管(注意:38 kHz載波不能用AT89S52定時器產生,因為38 kHz載波信號的周期只有26 μs,考慮到有載波時的占空比為1/3,即定時器的最小中斷時間間隔只有8 μs,在執行中斷時中斷處理過程(如保護現場等)實際運行時間根據中斷點的不同需要的時間也不同,有時會大于8 μs,這樣不能保證38 kHz信號的穩定性),在軟件處理過程中應用延時程序模仿38 kHz的紅外載波信號。
(2)紅外一體化接收頭:接收器選用一體化紅外接收器MK0038,該接收器是黑色環氧聚光透鏡,能夠濾除可見光的干擾,集紅外接收和放大于一體,內含紅外線PIN接收管、選頻放大器和解調器。不需任何外接元件,就能完成從紅外遙控信號(38 kHz的載波信號)中分離出基帶信號,輸出與TTL電平兼容的所有工作。在與單片機連接時,將接收來的紅外遙控信號反相,其正向信號接外部中斷0,反相信號接外部中斷1。通過記錄2個中斷間的間隔時間來測量紅外遙控信號的高低電平的脈寬值。
(3)外接E2PROM存儲器:用于存放學習到的控制命令的編碼和高低電平信號的脈寬值。
(4)按鍵盤:啟動一個學習過程。
(5)溫度傳感器:用于測量室內溫度,根據已學習的溫度控制命令自動開啟或關閉空調。
(6)LED指示燈:用于顯示遙控器的工作狀態。
3 系統軟件設計
學習型遙控器的設計性能及實現與其軟件設計編寫具有密切的關系,在設計中采用內部定時器對信號高低電平計時的方法來采集數據并保存。當系統識別到起始碼的低電平時,系統啟動內部定時器對輸入低電平計時,當起始碼的低電平結束時保存定時器此時的值,記錄下起始碼的低電平信號脈沖寬度值;然后依次保存采集到的編碼信號脈沖寬度值,如果采集到編碼信號位數大于設定值M(程序中設定值),就認為編碼采集已經結束,即學習子程序結束。
在軟件設計過程中,使用了2個外部中斷和2個內部定時器,外部中斷0啟動定時器0停止定時器1計數并保存定時器1的數據,外部中斷1啟動定時器1停止定時器0計數并保存定時器0的數據,用定時器0記錄紅外解調信號的高電平時長。用定時器1記錄紅外解調信號的低電平時長,本文采用12 MHz晶振,1個機器周期是1 μs,計數器采用16位計數器。如果在外部中斷0和外部中斷1之間不發生內部定時器中斷,可以記錄的最大時間間隔為65.5 ms;如果在外部中斷0和外部中斷1之間發生內部定時器中斷則可以記錄的最大時間間隔是n×65.5 ms,其中n為中斷次數。其值保存在設定的數據存儲器中,然后寫入到外部E2PROM存儲器中。發射過程再從外部的E2PROM存儲器讀出,通過用軟件模仿38 kHz載波信號發送編碼信息。
3.1 數據壓縮編碼
在設計過程中研究發現:盡管空調遙控器存在幀格式多樣、碼型多樣、編碼長短不同、發送方式不同等問題,但對于某一個獨立的空調遙控器還是有規律可依的。在系統設計方案時,選擇通用性好的就能解決這個問題。例如測得一款空調遙控器的1個命令碼如下:
低電平(有紅外發送載波)信號碼時長數據是:
0x7368 0x0578 0x0577 0x0563 0x0555 0x0584 0x0564 0x0545 0x0572 0x0554……
高電平(無紅外發送載波)信號碼時長數據是:……0x0578 0x1377 0x0563 0x0555 0x1384 0x0564 0x0545 0x1382 0x0554 0x01345……
盡管碼型有幀頭、系統碼、操作碼、同步碼、幀間隔碼、幀尾,但不論是低電平(有紅外發送載波)信號碼時長或是高電平(無紅外發送載波)信號碼時長其結構都相對簡單。但是1個幀如此多的數據占據了大量的內存空間,增加了硬件成本和程序運行時間,有必要在數據分析的基礎上采取數據壓縮。
數據壓縮根據使用場合和要求的不同分有損和無損壓縮。為了在數據發送時準確再現接收到的紅外數據,本文采用無損壓縮的方法,使用的編碼方式是改進型的游程編碼,根據游程編碼的原理,游程長度(游程或游長)RL(Run-Length)指的是由信號采樣值構成的數據流中各個數據重復重現的長度,只要給出重復的數據、數據長度和位置就可以恢復原來的數據流[2-3]。其具體實現過程如下:
(1)在接收紅外信號時分別按高電平和低電平不同的時間長度編號(時間長度規定一定的誤差范圍),每1次測得的數據根據電平持續時間記錄其編號,再將同編號的數據相加求平均值作為標準時間長度,根據紅外信號格式的不同,可以選擇4 bit壓縮方式和2 bit壓縮方式,即壓縮比達到1/4和1/8。在接收紅外數據時采用的是中斷方式,不占用過多的CPU時間,還可以一邊學習一邊存入E2PROM以達到節省內存空間的目的。
將上述空調遙控器的1個命令碼(其中紅外編碼長度為150 bit,壓縮比為1/8)的數據存儲在E2PROM中的數據格式如下:
01100101……(共10個字節低電平數據);
11010101……(共10個字節高電平數據);
0x96(字節總長度);
0x1377 0x0560 0x0572 0x370(4個不同的時長);
(2)發送紅外數據時,先從E2PROM中讀出字節總長度、4個不同的時長及部分高低電平數據,在發送高電平時(即不發送紅外載波信號)且時長大于1 ms,再讀E2PROM數據,這樣更可以節省內存空間。
3.2 軟件設計
根據上述原理其軟件流程圖如圖4所示。
本文提出的學習型紅外遙控器的設計方案。由于在數據處理和存儲時采用了無損壓縮的改進型游程編碼技術,簡化了數據結構,節省了存儲空間,存儲1個鍵碼(如150 個雙字節信息)僅需29 個字節,壓縮比達7:1。同時采用均值算法,消除了載波頻率誤差大的影響,使發送的載波頻率誤差小于0.5 kHz。本設計能自動學習市面上流行的各種紅外遙控器的遙控指令,從而控制各種不同類型的紅外遙控設備。比較接收和發送的紅外波形結果是兩波形完全一致。通過對海爾、澳柯瑪、三星等紅外空調遙控器的測試,都達到了理想的準確率,有效的遙控距離可達8~10 m[4]。本設計作為一個節點再連接上通信模塊即可實現智能家居系統中空調的智能控制。
參考文獻
[1] 陳祖爵,王建毅.智能型紅外遙控器的設計[J].微計算機信息,2008,24(1-2):305-307.
[2] 徐志,何明華,林武,等.一類基于軟件載波的學習型遙控器的設計與實現[J].現代電子技術,2009(2):36-38.
[3] SALOMON D.數據壓縮原理與應用[M].吳樂南,譯.北京:電子工業出版社,2003.
[4] 丁躍華,陳艷峰,龍箏.紅外遙控系統的一種設計方法[J].現代電子技術,2007(7):71-75.