韋潛,梁京章,楊兆陽(yáng)
(廣西大學(xué)電氣學(xué)院,廣西南寧530004)
基于Arduino Web Server的紅外家電控制
韋潛,梁京章,楊兆陽(yáng)
(廣西大學(xué)電氣學(xué)院,廣西南寧530004)
利用Arduino Web Server技術(shù)針對(duì)傳統(tǒng)家電如何低成本地升級(jí)為智能家電,設(shè)計(jì)了一種通過網(wǎng)頁(yè)界面控制紅外家電的控制系統(tǒng)。該系統(tǒng)主要由Arduino Mega2560開發(fā)板、Arduino Ethernet Shield模塊、萬(wàn)能紅外模塊以及繼電器模塊組成,實(shí)現(xiàn)了通過網(wǎng)頁(yè)界面對(duì)紅外家電控制和對(duì)開關(guān)電器的電源通斷控制。該系統(tǒng)設(shè)計(jì)簡(jiǎn)單可靠且硬件成本較低,易于實(shí)現(xiàn),并通過實(shí)驗(yàn)驗(yàn)證了預(yù)期的功能。
Arduino;網(wǎng)頁(yè)控制;智能家電
【本文獻(xiàn)信息】韋潛,梁京章,楊兆陽(yáng).基于Arduino Web Server的紅外家電控制[J].電視技術(shù),2015,39(10).
在互聯(lián)網(wǎng)、信息技術(shù)不斷發(fā)展的今天,智能家電的發(fā)展越來(lái)越成熟,各種終端(如PC、平板PC、手機(jī)等)對(duì)家電的集中控制和遠(yuǎn)程控制技術(shù)日益完善。這些技術(shù)在很大程度上滿足了人們對(duì)家電便利化、信息化的需求。但是市場(chǎng)上的智能家電產(chǎn)品因系統(tǒng)結(jié)構(gòu)復(fù)雜,硬件價(jià)格昂貴,安裝入戶麻煩,限制了智能家居產(chǎn)品的普及。其中基于嵌入式技術(shù)作為服務(wù)平臺(tái)的解決方案最為流行[1-4],這種解決方案雖然功能齊全,但是硬件價(jià)格比較昂貴,不為廣大消費(fèi)者所接受。而控制端多采用應(yīng)用程序控制,針對(duì)每一種終端系統(tǒng)(如Windows、Linux、IOS等)都得設(shè)計(jì)配套應(yīng)用軟件,安裝繁瑣且互不兼容。
針對(duì)解決此類問題,本文提出了一種基于使用Arduino Mega2560單片機(jī)以及周邊模塊設(shè)計(jì)出了一種簡(jiǎn)單廉價(jià)的采用網(wǎng)頁(yè)控制的智能家電紅外和電源開關(guān)控制系統(tǒng)方案。該方案簡(jiǎn)單、低成本且不需要對(duì)傳統(tǒng)家電做任何改造處理,主要用于解決控制如電視、空調(diào)、電扇等可接受紅外信號(hào)的家電,以及如燈、電熱水器等單純開關(guān)電器的電源通斷。網(wǎng)頁(yè)控制的應(yīng)用也大大降低操作的復(fù)雜性,并具有很好的兼容性,可在任意終端如PC、手機(jī)、平板PC上通過使用瀏覽器操作。筆者在實(shí)驗(yàn)室搭建了實(shí)驗(yàn)平臺(tái),并通過了對(duì)空調(diào)和電視機(jī)頂盒的控制實(shí)驗(yàn)。
將硬件通過網(wǎng)線接入局域網(wǎng)后,可以訪問其IP地址進(jìn)入網(wǎng)頁(yè)控制頁(yè)面。通過該網(wǎng)頁(yè)控制可將家電紅外遙控器上的多個(gè)按鍵一一進(jìn)行解碼、記錄存儲(chǔ),并發(fā)射出去控制家電。也可以通過該網(wǎng)頁(yè)控制家電電源的通斷。系統(tǒng)主要包括的模塊:Arduino Mega2560單片機(jī)開發(fā)板、Arduino Ethernet Shield以太網(wǎng)模塊、紅外模塊、繼電器模塊。
Arduino單片機(jī)模塊通過串行外設(shè)接口(Serial Peripher-al Interface,SPI)與Arduino Ethernet Shield模塊進(jìn)行通信連接;并通過串口3-Serial3與星科—紅外學(xué)習(xí)型模塊TRD001進(jìn)行通信連接。單片機(jī)模塊的5 V供電輸出串聯(lián)一個(gè)10 kΩ電阻接到一個(gè)LED正極,編號(hào)4引腳接到LED負(fù)極。單片機(jī)模塊3.3 V電壓輸出口接到紅外學(xué)習(xí)型模塊的3.3 V供電接口,且Gnd引腳與紅外學(xué)習(xí)型模塊G引腳連接。
5 V供電電源接到繼電器模塊線圈一段,另一端分別接上Arduino單片機(jī)編號(hào)為7,8的引腳。
Arduino Ethernet Shield模塊的網(wǎng)線接口接入網(wǎng)線,網(wǎng)線另一頭接入交換機(jī)或者是路由器,將整個(gè)系統(tǒng)接入局域網(wǎng)中。系統(tǒng)硬件結(jié)構(gòu)圖如圖1所示。

圖1 系統(tǒng)結(jié)構(gòu)圖
2.1單片機(jī)控制模塊
采用搭載了主控芯片為ATmega2560的Arduino Mega2560單片機(jī)開發(fā)板,供電電壓為5 V供電,可以對(duì)其他模塊供電,輸出電壓為3.3 V和5 V,電流最大為50 mA。此芯片負(fù)責(zé)對(duì)Ethernet模塊的初始化,向Ethernet模塊寫入HTML代碼生成靜態(tài)網(wǎng)頁(yè),并監(jiān)聽HTTP上的GET請(qǐng)求。同時(shí)根據(jù)GET請(qǐng)求對(duì)紅外模塊和繼電器模塊進(jìn)行相應(yīng)的操作。
2.2Arduino Ethernet Shield模塊
Arduino Ethernet Shield模塊是專門為Arduino單片機(jī)開發(fā)板定制的以太網(wǎng)模塊,有專用的引腳對(duì)接。通過該模塊可以設(shè)定IP地址、MAC物理地址以及端口號(hào)。該模塊可以接收由Arduino單片機(jī)發(fā)送的HTML代碼生成一個(gè)靜態(tài)網(wǎng)頁(yè),并作為網(wǎng)頁(yè)服務(wù)器允許同一網(wǎng)段的終端通過瀏覽器訪問該網(wǎng)頁(yè),且可以監(jiān)聽GET請(qǐng)求來(lái)處理響應(yīng)命令。
2.2.1啟用網(wǎng)頁(yè)服務(wù)器
首先將模塊與Arduino單片機(jī)對(duì)應(yīng)引腳相連。
然后設(shè)定網(wǎng)卡地址和端口,在對(duì)Arduino的編程中,調(diào)用<Ethernet.h>庫(kù)文件。用byte mac[]={0x00,0xAA,0xBB,0xCC,0xDE,0x02}語(yǔ)句設(shè)定模塊網(wǎng)卡的物理地址,用IPAddress ip(192,168,1,200)語(yǔ)句設(shè)定IP地址,用EthernetServer server(80)語(yǔ)句設(shè)定端口之后,調(diào)用Ethernet.begin(mac,ip)語(yǔ)句啟動(dòng)設(shè)定。
最后寫入網(wǎng)頁(yè),對(duì)定義一個(gè)類EthernetClient(庫(kù)文件已有類)的對(duì)象client,并通過調(diào)用client.print()方法來(lái)向Arduino Ethernet Shield模塊寫入HTML代碼。如寫入一個(gè)名為L(zhǎng)eran按鈕的代碼為[5]:
char*buttonLabel="Leran":
client.print("<a href="/?status="):
client.print(buttonLabel):
client.print(""><input type="button"value=""):
2.2.2監(jiān)聽GET請(qǐng)求
調(diào)用server.begin()方法讓其開始監(jiān)聽請(qǐng)求。當(dāng)在控制網(wǎng)頁(yè)點(diǎn)擊對(duì)應(yīng)按鈕或下拉選單時(shí),Arduino Ethernet Shield模塊會(huì)接收到對(duì)應(yīng)的GET請(qǐng)求。Arduino Mega2560單片機(jī)內(nèi)編程調(diào)用server.available()方法可以判斷是否有監(jiān)聽到命令,如果有則調(diào)用server.read()將命令復(fù)制到字符串變量readString內(nèi),通過判斷該字符串的內(nèi)容來(lái)判斷是何種命令。如點(diǎn)擊Learn按鈕時(shí),字符串變量readString內(nèi)會(huì)存入“GET/?status=Learn”。
2.3獲取網(wǎng)頁(yè)操作指令
當(dāng)在控制網(wǎng)頁(yè)點(diǎn)擊對(duì)應(yīng)按鈕或下拉選單時(shí),Arduino Ethernet Shield模塊會(huì)接收到對(duì)應(yīng)的GET請(qǐng)求。Arduino Mega2560單片機(jī)內(nèi)編程調(diào)用server.available()方法可以判斷是否有監(jiān)聽到命令,如果有則調(diào)用server.read()將命令存入字符串變量readString內(nèi),通過判斷該字符串的內(nèi)容來(lái)判斷是何種命令。如點(diǎn)擊Leran按鈕時(shí),readString內(nèi)會(huì)存入GET/?status=Learn字符串。
2.4紅外學(xué)習(xí)、儲(chǔ)存、發(fā)射模塊
星科-紅外學(xué)習(xí)型模塊TRD001是一款串口型全功能紅外學(xué)習(xí)控制模塊,可以學(xué)習(xí)16~80 kHz載波頻率的遙控器,涵蓋了大部分的遙控。該模塊核心為STM32F101C8,模塊為驅(qū)動(dòng)電壓為3.3 V,采用USART2_TX、USART2_RX串口進(jìn)行通信。
2.4.1學(xué)習(xí)指令
1)向模塊發(fā)送{0xAA,0xHH,0xLL,0xLL,0xHH,0xAA}(HH為鍵值高8位,LL為鍵值低8位)的數(shù)據(jù),命令模塊進(jìn)入學(xué)習(xí)狀態(tài)。
2)模塊返回?cái)?shù)據(jù){0xAA,0xHH,0xLL,0xLL,0xHH,0xAA},通知Arduino已經(jīng)進(jìn)入學(xué)習(xí)狀態(tài)。
3)學(xué)習(xí)成功后返回“OK”,此時(shí)紅外解碼數(shù)據(jù)未存入模塊內(nèi)。
2.4.2測(cè)試指令
1)向模塊發(fā)送{0x05,0xFF,0xFF,0xFF,0xFF,0x05}的數(shù)據(jù),命令模塊發(fā)送當(dāng)前學(xué)習(xí)的紅外遙控指令以用來(lái)驗(yàn)證學(xué)習(xí)的指令是否正確。
2)指令外發(fā)完畢后返回“OK”。
2.4.3保存指令
1)向模塊發(fā)送{0x0A,0xFF,0xFF,0xFF,0xFF,0x0A}的數(shù)據(jù),命令模塊保存當(dāng)前學(xué)習(xí)的紅外指令。
2)指令保存完畢后返回“OK”。2.4.4控制指令
1)向模塊發(fā)送{0x5A,0xHH,0xLL,0xLL,0xHH,0x5A}的數(shù)據(jù),命令模塊將已保存的對(duì)應(yīng)紅外指令發(fā)送出去。
2)指令發(fā)送完畢后返回“OK”。
引腳定義如表1所示。

表1 引腳定義
2.5繼電器模塊
繼電器模塊為(C3A6)2路繼電器擴(kuò)展板5 V版,可以控制各種家用電器開關(guān)。控制電壓為5 V。受控電壓電流最大負(fù)載為AC:250 V/10 A;DC:30 V/10 A。
2.6系統(tǒng)供電結(jié)構(gòu)
電源采用5 V供電對(duì)Arduino Mega2560單片機(jī)開發(fā)板和繼電器模塊供電。從Arduino Mega2560單片機(jī)開發(fā)板引出的3.3 V引腳和Gnd地引腳對(duì)紅外模塊供電。系統(tǒng)各模塊供電電路結(jié)構(gòu)圖如圖2所示。

圖2 系統(tǒng)供電結(jié)構(gòu)圖
Arduino單片機(jī)模塊啟動(dòng)后,初始化Arduino串口Serial和串口Serial3波特率為9 600,對(duì)Arduino Ethernet Shield模塊進(jìn)行初始化,設(shè)置其網(wǎng)卡物理地址MAC為{0x00,0xAA,0xBB,0xCC,0xDE,0x02},IP地址為192.168.1.200。向Arduino Ethernet Shield模塊寫入HTML代碼,生成HTML頁(yè)面,該頁(yè)面有選擇按鍵的下拉選單和“Learn”、“Send”和“On/off”按鈕,分別對(duì)應(yīng)學(xué)習(xí)、發(fā)射紅外以及控制繼電器通斷功能。
當(dāng)同一局域網(wǎng)內(nèi)的終端瀏覽器訪問http://192.168.1.200的頁(yè)面,并點(diǎn)擊對(duì)應(yīng)的按鈕或者是下拉選單時(shí),觸發(fā)GET請(qǐng)求。Arduino接收到GET請(qǐng)求時(shí),判斷命令種類。轉(zhuǎn)發(fā)相對(duì)應(yīng)的命令至紅外模塊或者是改變相應(yīng)的引腳電壓控制繼電器的關(guān)斷。訪問的初始頁(yè)面如圖3所示。
1)在網(wǎng)頁(yè)中點(diǎn)擊Select下拉選單,并點(diǎn)擊key0選項(xiàng)時(shí)。系統(tǒng)會(huì)監(jiān)聽到“GET/?status=key0”請(qǐng)求,將對(duì)0號(hào)按鍵進(jìn)行操作。默認(rèn)操作為0號(hào)鍵。
2)在網(wǎng)頁(yè)中點(diǎn)擊Learn按鈕時(shí)。系統(tǒng)會(huì)監(jiān)聽到“GET/?status=Learn”請(qǐng)求,判斷是相應(yīng)鍵的操作,如果是0鍵,則向紅外模塊發(fā)送{0xAA,0x00,0x01,0x01,0x00,0xAA}指令使其進(jìn)入學(xué)習(xí)狀態(tài)。并重寫HTML網(wǎng)頁(yè)生成“yes”按鈕等待測(cè)試指令。此時(shí)使用家電遙控器對(duì)準(zhǔn)紅外模塊按下按鍵,如果紅外模塊接收到外信號(hào),系統(tǒng)LED會(huì)點(diǎn)亮,等待進(jìn)入測(cè)試。等待測(cè)試頁(yè)面如圖4所示。

圖3 初始頁(yè)面(截圖)
3)在網(wǎng)頁(yè)中點(diǎn)擊Test按鈕時(shí),系統(tǒng)會(huì)監(jiān)聽到“GET/?status=Test”請(qǐng)求,通過向紅外模塊發(fā)送命令{0x05,0xFF,0xFF,0xFF,0xFF,0x05}來(lái)將之前記錄的紅外信號(hào)發(fā)射到電器上,看是否起作用。并重寫HTML網(wǎng)頁(yè)生成“yes”和“no”的按鈕,讓用戶選擇是否控制家電成功。判斷頁(yè)面如圖5所示。
4)在網(wǎng)頁(yè)中點(diǎn)擊No按鈕時(shí),系統(tǒng)會(huì)監(jiān)聽到“GET/?status=No”請(qǐng)求,寫入HTML初始頁(yè)面,供用戶選擇再學(xué)習(xí)。
5)在網(wǎng)頁(yè)中點(diǎn)擊Yes按鈕時(shí),系統(tǒng)會(huì)監(jiān)聽到“GET/?status=Yes”請(qǐng)求,通過向紅外模塊發(fā)送命令{0x0A,0xFF,0xFF,0xFF,0xFF,0x0A}來(lái)將之前學(xué)到的紅外信號(hào)永久保存下來(lái)以供長(zhǎng)期使用。并寫入HTML初始頁(yè)面,供用戶選擇再學(xué)習(xí)別的按鍵,或是使用已記錄紅外信號(hào)的按鍵。

圖4 測(cè)試頁(yè)面(截圖)
6)在網(wǎng)頁(yè)中點(diǎn)擊Send按鈕時(shí),系統(tǒng)會(huì)監(jiān)聽到“GET/?status=Send”請(qǐng)求,判斷是對(duì)哪個(gè)鍵的操作,如果是0鍵,則向紅外模塊發(fā)送{0x5A,0x00,0x00,0x00,0x00,0x5A}指令,來(lái)命令紅外模塊將0號(hào)鍵對(duì)應(yīng)的存儲(chǔ)器學(xué)習(xí)儲(chǔ)存的紅外指令發(fā)送出去,并重寫初始HTML頁(yè)面。
7)在網(wǎng)頁(yè)中點(diǎn)擊On/off按鈕時(shí),系統(tǒng)會(huì)監(jiān)聽到“GET/?status=On/off”請(qǐng)求,通過控制6,7引腳的電平來(lái)控制繼電器的通斷,并重寫初始HTML頁(yè)面。
程序流程如圖6所示。

圖5 判斷頁(yè)面(截圖)

圖6 系統(tǒng)流程圖
通過實(shí)驗(yàn)成功實(shí)現(xiàn)了控制數(shù)字電視機(jī)頂盒,以及控制美的電扇的開關(guān)、調(diào)速和繼電器的通斷。實(shí)驗(yàn)中分別學(xué)習(xí)了電視的“更換下一個(gè)頻道”、“更換上一個(gè)頻道”、“調(diào)高音量”、“調(diào)低音量”,并發(fā)射紅外對(duì)電視進(jìn)行控制;學(xué)習(xí)了美的遙控風(fēng)扇的“開”、“關(guān)”、“調(diào)速”等紅外信號(hào),并對(duì)電風(fēng)扇進(jìn)行相應(yīng)控制。硬件實(shí)物如圖7所示。

圖7 實(shí)物圖
本文設(shè)計(jì)并實(shí)驗(yàn)了一種基于Arduino Web Server技術(shù)的紅外家電控制系統(tǒng),集合了Arduino技術(shù)和Web技術(shù),實(shí)現(xiàn)了紅外家電的便利遠(yuǎn)程控制。經(jīng)過實(shí)驗(yàn),功能全部實(shí)現(xiàn),符合設(shè)計(jì)要求。為傳統(tǒng)家電過渡升級(jí)到智能家電提供了一個(gè)新的解決方案。
[1]趙津,朱三超.基于Arduino單片機(jī)的智能避障小車設(shè)計(jì)[J].自動(dòng)化與儀表,2013(5):1-4.
[2]劉南君,毛培宏.基于Arduino Mega2560單片機(jī)的簡(jiǎn)易智能割草機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn)[J].安徽農(nóng)業(yè)科學(xué),2012,40(36):17899-17901.
[3]南春輝,李博,武穎.基于Web技術(shù)的嵌入式智能家居系統(tǒng)設(shè)計(jì)[J].電視技術(shù),2013,37(3):86-89.
[4]LUBBERS P,ALBERS B,SALIM F.HTML5程序設(shè)計(jì)[M].2版.劉靖,李杰,劉淼,譯.北京:人民郵電出版社,2012.
[5]Tamberg.Web Controlled Arduino LED[EB/OL].[2014-07-04]. http://www.instructables.com/id/Arduino-Web-LED/.
韋潛(1989—),碩士生,主研網(wǎng)絡(luò)化控制與信息工程;
梁京章(1964—),碩士,教授、碩士生導(dǎo)師,研究方向?yàn)榫W(wǎng)絡(luò)化控制與信息工程;
楊兆陽(yáng)(1984—),碩士生,主研綜合自動(dòng)化。
Infrared-control System of Household Appliances Based on Arduino Web Server
WEI Qian,LIANG Jingzhang,YANG Zhaoyang
(Electrical College,Guangxi University,Nanning 530004,China)
To improve traditional household appliances into smart household appliance at low cost,the design is presented in this thesis with the help of a web-controlled system for infrared appliances based on Arduino web server technology.The system consisting of the Arduino Mega2560 development board,Arduino Ethernet Shield module,infrared recording and transmitting module and relay module realizes the control of infrared household appliances and switching device.It shows that this design is simple,reliable,low cost,and easy to realize.The system archieves expected function through experiment.
Arduino;web-controlled;smart household appliance
TP399
A
10.16280/j.videoe.2015.10.010
時(shí)雯
2014-08-19