許 輝,倪長寶
(1.中國人民解放軍65042部隊 遼寧 沈陽 110001;2.中國人民解放軍65523部隊 遼寧 大石橋 115100)
自2009年8月溫家寶總理在無錫市提出“感知中國”以來,物聯網被正式列為國家五大新興戰略性產業之一,寫入了 “政府工作報告”。物聯網在中國受到了全社會極大的關注,其受關注程度是在美國、歐盟、以及其他各國不可比擬的。智能機房的發展與成熟,將會極大的提高機房管理的便捷性和可靠性。
文中簡述了系統實現所需的主要技術、設計方法和功能實現。其中主要包括通信協議的設計、硬件電路設計和軟件設計方法,最終實現智能機房的遠程控制,例如遠程監測室內的溫濕度、遠程接收人體入侵報警、遠程控制電燈的開關,以及對無線遙控小車的控制等功能。
當今智能機房系統包含的功能十分豐富,但還沒有形成統一的標準。智能機房按照功能,主要包含以下幾方面:機房網絡系統、總控制管理系統、照明控制系統、機房安防系統、及機房環境監測系統等[1]。
該論文從具體功能實現的技術層面,討論了以下幾個系統:環境物理量檢測系統,安防系統,照明控制系統。
為了便于系統的擴展和改造,將以模塊化的方式實現需要的功能,每個模塊負責一個或者幾個類似的功能實現。所有模塊之間使用無線方式通信,每個模塊都要有各自的主控MCU、電源和具體實現功能的部件。
由于網關沒有無線功能,系統中設置了一個模塊負責通信中繼,通信中繼包含兩方面:與各個功能模塊的通信;與網關的通信。該模塊主要是通過網關接收上位機的控制命令,傳送給相應執行模塊;或者接收各個模塊的信息,傳送給上位機。
為了擴大環境物理量的檢測范圍,增加一個可自主移動的平臺--無線遙控小車,在該平臺上可安裝傳感器或者無線攝像頭。同時為了增加系統的可操作性,體現以人為本的設計理念,該系統還需增加一個特別的模塊--遙控終端,該模塊負責顯示該系統的所有信息,并且可以控制其他的功能模塊。
整個系統實現的功能有:環境物理量檢測,選擇常見的溫度、濕度;安防,選擇有代表性的人體入侵檢測;照明控制,控制電燈的開關;移動平臺,選擇可無線遙控的小車。
為了節省資源,將溫度、濕度和人體入侵檢測3個功能放入1個模塊中實現。電燈開關的控制由1個模塊實現。綜上所述,系統一共需要5個模塊,分別是:通信中繼模塊、遙控終端模塊、溫濕度及人體入侵檢測模塊、電燈控制模塊,以及無線遙控小車。系統的組織架構如圖1所示。

圖1 下位機系統架構圖Fig.1 Architecture diagram of lower computer system
5大功能模塊是建立在基礎模塊之上的,每個模塊都是通過擴展基礎模塊來實現具體功能的。基礎模塊包括MCU最小系統、無線通信模塊和電源模塊。
1)MCU最小系統
MCU即單片機,是每個模塊系統的核心,主要負責各種信息的處理和對各種外圍設備的控制,所以選擇一款合適的MCU是整個系統功能實現的關鍵所在。該設計以市面上最常見也最通用的51單片機做為主控MCU。為了讓系統有更大的擴展空間,應選擇一款外設功能多樣的51單片機。經過實際調查和對比,選中型號為STC12C5A60S2單片機為本設計中所有模塊的主控單片機[2]。
STC12C5A60S2單片機外設比較豐富,包括2個全雙工異步串行通信(UART)接口,2路脈沖寬度調制(PWM)輸出,一個同步串行外圍通信(SPI)接口,8路10位精度的A/D轉換等,并且該單片機支持通過異步串行接口編程,這些功能都極大了簡化了系統的開發和設計[3]。

圖2 STC12C5A60S2最小系統原理圖Fig.2 Minimum system schematic of STC12C5A60S2
圖2為STC12C5A60S2單片機的最小系統,該系統包含如下幾個部分:
①外部晶振電路
因為要使用異步串行通信,所以選擇11.0592MHZ的晶振作為外部的時鐘源,這樣能保證異步串行通信的正確性。
②復位電路
復位電路包括上電復位和按鍵復位兩部分。其中,上電復位是系統剛開啟時復位單片機的;按鍵復位是在系統運行出現異常時,用于手動復位單片機。
③電源濾波電路
電源濾波電路由兩個濾波電容組成,是有效防止電源波紋對單片機干擾的手段。
2)無線通信模塊
無線通信模塊是所有功能模塊之間互相通信的“橋梁”。如圖3所示,單片機A將數據傳輸給無線通信模塊B,無線通信模塊B將數據以電磁波的形式傳輸給無線通信模塊C,最后,無線通信模塊C將數據傳輸給單片機D,這樣,就完成了模塊一到模塊二之間的數據傳輸[4]。
目前市面常見的無線通信模塊按照傳輸模式分為兩種:非透明傳輸和透明傳輸。結合本設計的實際情況,選擇透明傳輸模塊比較適合,這樣便可以很自由的設置本設計的通信協議。經過實際調查和對比,選中LSD-RFMC-B401-A2型無線透傳模塊。該模塊是一款高性能的射頻收發器,工作在470 MHz頻段,全透明傳輸,可根據實際應用配置各種串口數據格式,可實現無限數據長度發送。

圖3 模塊間無線通信示意圖Fig.3 Wireless communication schematic between modules
3)電源模塊
電源是整個系統維持正常運行的必要條件,所以一個可靠的電源是必要的。由于整個系統中的所有部件不都是工作在相同的電壓下的,所以需要不同的穩壓芯片來為各個部件供電。經過實際調查,得知電路中需要5 V和3.3 V兩種電壓,所選選擇LM2596_5.0V和LM2596_3.3V這兩款穩壓芯片作為每個模塊的供電芯片。
通信中繼模塊通過網關與上位機實現信息交互,所以需要一種與網關通信的方式。設計上采用在基礎模塊之上,添加了與網關串行異步通信的功能[5]。由于STC12C5A60S2的異步串行通信接口使用的是TTL電平,而網關平臺外部接口使用的是RS232電平,所以需要專用的電平轉換芯片MAX232。如圖4所示,MAX232連接到STC12C5A60S2單片機的異步串行通信接口1上,另一端連接到標準的DB9插座上。

圖4 RS232電平轉換電路原理圖Fig.4 Diagram of RS232 level converter circuit
溫濕度及人體入侵檢測模塊是在基礎模塊之上添加溫濕度檢測傳感器和人體熱釋電檢測傳感器而實現的。其中溫濕度的檢測采用DHT11溫濕度傳感器,人體入侵的檢測則由專用的人體熱釋電感應模塊來實現。
人體檢測模塊的工作方式是,當有人進入到檢測范圍的時候,該模塊的狀態引腳輸出電平由高變低,當人走出該范圍的時候,狀態引腳的輸出電平又由低恢復到高電平。利用這一特點,可將該狀態引腳直接連接到STC12C5A60S2單片機的外中斷0引腳上,當該模塊檢測到人體時,狀態引腳產生下降沿電平,觸發單片機外中斷0。又考慮到當人體走出檢測范圍時,為了讓系統及時得知,將模塊的狀態引腳接反相器后,連接到STC12C5A60S2單片機的外中斷1引腳上。這樣,當人體走出檢測范圍時,人體檢測模塊的狀態引腳產生上升沿電平,經反相器取反后變為下降沿電平,觸發STC12C5A60S2單片機的外中斷1。人體檢測模塊電路原理圖如圖5所示。

圖5 人體檢測模塊接口電路原理圖Fig.5 Interface circuit schematic diagram of the human detection module
電燈控制模塊主要負責打開和關閉室內的燈光。這其中涉及到了弱電壓控制強電壓的問題,本模塊單片機的電壓為5 V,而室內燈的電壓是220 V,所以需要通過繼電器來實現電燈的打開和關閉。本設計采用2個常見的5 V單刀單置繼電器,控制兩個燈的開關。
如圖6所示,電燈控制模塊是在基礎模塊之上添加了2個受STC12C5A60S2單片機的兩個I/O口P2.1和P2.0控制的繼電器。當P2.0輸出為低電平時,繼電器1上電,從而接通JI插座的兩個引腳。當P2.1輸出為低電平時,繼電器2上電,從而接通J2插座的兩個引腳。這樣,就可以通過J1和J2兩個插座控制電燈的打開和關閉了。

圖6 繼電器控制電路原理圖Fig.6 Schematic of relay control circuit
無線遙控小車是一個可移動的平臺,在小車上邊可以擴展各種傳感器,從而通過小車的移動擴大傳感器的檢測范圍。小車的動力為兩個直流電機,采用常見的雙H橋驅動芯片L298N來驅動。單片機可以通過控制L298N芯片,間接控制小車的運動方向和速度。無線遙控小車上裝有一個無線攝像頭,從而可以實現遠程的遙控。在小車前方,增加一些小燈,在需要的時候打開,使攝像頭可以拍攝到黑暗的地方。具體模塊的實現是在基礎模塊上添加了電機控制電路、車燈控制電路和攝像頭電源控制電路。
遙控終端主要負責顯示系統的各種信息和控制其他的功能模塊,并且在有人進入檢測范圍時,提供警報功能。針對顯示部分,考慮到信息量較少,所以采用1602字符液晶屏顯示,該字符型液晶屏可一次顯示32個字符;針對遙控部分,考慮到需要控制的功能較多,且需要節省單片機的I/O口資源,所以采用4×4矩陣鍵盤,該鍵盤可以實現16個按鍵輸入,但只用了單片機的8個I/O口。針對報警功能,可使用一個蜂鳴器實現。
通信協議主要包括兩方面內容:1)通信中繼模塊與上位機通信的協議;2)各模塊間的通信協議。無論哪方面的通信,都應該首先保證通信數據的正確性和可解析性[6]。
3.1.1 通信中繼與上位機通信協議
通信中繼模塊與上位機的通信包括:向上位機發送采集信息、接收上位機的命令。其中接收的命令應該盡量簡短,這是由于單片機的資源有限,不適合處理長字符串。
1)上傳信息協議
下位機以字符串的方式上傳數據,每個數據的字符串必須同時滿足以下2個條件:
①字符串長度為9個字符;
②以“(”開頭,以“)”結尾。
如果不滿足以上條件,上位機應放棄處理該數據,并且立刻請求下位機重新發送數據。字符串的形式為:(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF),各字節含義如表 1 所示。

表1 上傳信息協議表Tab.1 Upload information protocol table
如果字節的數據為“0xEE”,表示上傳的數據中沒有對應字節的信息。
2)控制命令協議
控制命令也是以字符串形式傳送。每個命令字符串必須同時滿足以下2個條件:
①字符串長度為5個字符;
②以“(”開頭,以“)”結尾。
如果不滿足以上條件,中繼模塊應放棄處理該條命令。命令字符串的形式為:(acb)。其中“abc”是命令信息,是某條英文指令的縮寫,例如打開燈1,英文為“open light 1”,縮寫為“ol1”,如果想關閉燈 1,則發送字符串“(cl1)”。 如果縮寫后的命令不足3個字符,則用字符“0”補全。所有控制命令及含義如表2所示。

表2 控制命令含義表Tab.2 Table of meanings of control commands
3.1.2 模塊間通信協議
由于使用的是透明傳輸模塊,一個模塊發送給另一個模塊的信息是可以被其他所有模塊接收到的,所以應該在信息中加入地址機制,每個模塊都有自己的地址。在某個模塊接收到數據時,應首先判斷數據中接收地址是否與自己的地址一致,如果一致,則繼續處理該數據,反之則放棄該數據[7]。
考慮到模塊間通信的多種情況,將模塊間通信信息歸納為2種:命令和狀態信息,則對應協議也為2種。
1)中繼模塊或遙控終端模塊發送命令
以字符串的形式發送命令,該命令字符串應滿足以下兩個條件:
①字符串長度為7;
②字符串以“(”開頭,以“)”結尾。
若其它模塊接收到的命令字符串不滿足以上兩個條件,則放棄處理該命令。命令字符串的形式為:(xyabc),其中“x”表示接收模塊的地址,“y”表示發送模塊的地址,“abc”為要執行的命令縮寫,同表2中“發送命令”項括號內字符串。模塊地址的約定,見表3。表中通信中繼模塊和遙控終端模塊的地址是一樣的,這樣就可以同時處理接收到其他模塊發送的信息數據了。

表3 模塊地址表Tab.3 Table of module address
2)中繼模塊和遙控終端模塊接收狀態信息
由于其它模塊向中繼模塊和遙控終端模塊發送狀態信息的長度不一,所以以最長的狀態信息為準,也就是以溫濕度及人體檢測模塊的狀態信息長度為準,其它模塊狀態信息位的長度不足的以字符“0”補全。該命令字符串應滿足以下2個條件:
①字符串長度為9;
②字符串以“(”開頭,以“)”結尾。
若通信中繼模塊和遙控終端模塊接收到的命令字符串不滿足以上兩個條件,則放棄處理該信息。信息字符串的形式為:(xyabcde),其中“x”表示接收模塊的地址,這里應該為“0x11”,“y”表示發送模塊的地址。 “abcde”則表示發送模塊的狀態信息。
針對溫濕度及人體檢測模塊,“ab”以ASCII碼形式表示溫度,“cd”以 ASCII碼形式表示濕度,“a”和“c”表示十位,“b”和“d”表示個位。“e”的前半字節表示人體檢測是否開啟,后半字節表示是否認有人進入檢測范圍。針對電燈控制模塊,“a”的前半字節表示燈1的開關狀態,后半字節表示燈2的開關狀態。針對無線遙控小車,“a”的前半字節表示小車前燈的開關狀態,后半字節表示攝像頭的開關狀態。
通信中繼模塊主要處理兩件事:1)接收上位機的命令,并根據命令的內容,按照協議發送給對應模塊;2)接收每個模塊的信息,按照協議發送給上位機。
該模塊主要實現兩大功能:1)溫濕度和人體入侵檢測,并將檢測信息傳送給中繼模塊和遙控終端,以實現實時顯示;2)處理中繼模塊轉發的控制命令。程序中通過兩個標志位區別是上傳檢測信息還是處理控制命令。當判斷是控制命令時,再具體分析是何命令并執行該命令,執行完畢,將新的狀態信息返回給中繼模塊和遙控終端模塊,然后等待下一條命令。
電燈控制模塊實現控制電燈1、2的開啟和關閉操作。程序中通過一個標志位判斷接收信息是否為控制命令,若是則判斷具體命令并執行,執行完畢按照協議更新狀態信息,并按照協議把狀態信息返回給中繼模塊和遙控終端模塊,然后等待下一條命令。
無線遙控小車模塊實現兩大功能:小車運動控制;小車前燈和攝像頭的打開和關閉控制。程序中通過一個標志位判斷接收信息是否為控制命令,若是則判斷具體命令,如果是運動命令,則執行相應的運行命令,延時600 ms后,停止運動,然后等待下一條命令;如果不是運動命令,則執行該命令后,按照協議更新狀態信息,并按照協議把狀態信息返回給中繼模塊和遙控終端模塊,然后等待下一條命令。
遙控終端模塊實現三大功能:在字符液晶屏上顯示系統狀態信息;按鍵檢測及發送命令;啟動和關閉蜂鳴器。程序啟動后一直判斷是否有按鍵按下,如果有按鍵按下,則檢測按鍵,并將按鍵對應的命令按照協議傳輸給其它模塊,然后延時500 ms,等待下一次按鍵。若沒有按鍵,則檢測標志位Flag是否等于1。若Flag等于1,表示接收到了其它模塊的狀態信息,然后按照信息的內容更新液晶屏對應的內容,如果來自溫濕度及人體檢測模塊的信息中有檢測到人體進入檢測區的信息,則打開蜂鳴器2 s。
系統測試分3部分:1)以通信中繼模塊為主:從上位機下發送正常合法的命令,觀察現象;之后再發送不合法的命令,觀察現象。2)以遙控終端模塊為主:依次按鍵,觀察現象。3)以人體感應模塊為主:測試人體檢測功能。測試時為方便起見,將通信中繼模塊用串口線直接連到PC上,通過串口調試助手操作并觀察[8]。
發送字符串“(g00)”:小車前進了一小段距離。
發送字符串“(ol1)”:電燈1打開。
發送字符串“(cl2)”:電燈2關閉。
發送字符串“(mmm)”:系統不做任何動作。
按“前進”按鍵,小車前進一小段距離。一直按住“左轉”按鍵,小車原地向左轉圈。
按“開燈1”按鍵,電燈1打開,同時液晶屏上的對應信息也隨之改變。
用手在該模塊上方劃過,終端模塊的蜂鳴器響起,同時液晶屏提示有人進入該范圍。串口調試助手也收到“0x28 0Xf0 0x32 0x33 0x34 0x30 0x00 0xff 0x 29” 十六進制的字符串,根據協議可得知第8個字節表示人體檢測的狀態信息,前半字節表示該功能是否開啟,后半字節表示是否有人進入檢測范圍,所以,“0xff”表示檢測到了人體進入檢測范圍[9]。
該系統以最常用也最可靠的電燈開關控制、溫濕度檢測和人體入侵檢測為主要切入點,同時加入了可擴展的移動平臺——無線遙控小車,考慮到系統的獨立性與完美性,又加入了遙控終端模塊,這樣使得整個系統可以在不依賴上位機的情況下執行各種操作。
系統難點是各模塊間通信協議的設計,經過反復的研究和查找資料,最終參考了以太網數據幀的形式,將每個模塊指定一個地址,在傳輸數據的開頭將目標模塊地址和發送模塊地址寫入,這樣接收的模塊就能根據該地址去判斷該如何處理該數據。經過反復的調試與修改,本系統最終實現了預期的所有功能。
[1]李志球.實用C語言程序設計教程[M].北京:電子工業出版社,1999.
[2]何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2001.
[3]李全利,遲榮強.單片機原理及接口技術[M].北京:高等教育出版社,2004.
[4]胡偉,季曉衡.單片機C語言程序設計及應用實例[M].北京:人民郵電出版社,2003.
[5]沙占友.單片機外圍電路設計[M].北京:電子工業出版社,2003.
[6]劉瑞新.單片機原理與應用教程[M].北京:機械工業出版社,2003.
[7]周航慈.單片機應用程序設計技術[M].北京:北京航空航大大學出版社,2005.
[8]李朝青.單片機原理及接口技術[M].3版.北京:北京航空航天大學出版社,2005.
[9]AT89C51 DATA SHEEP Philips Semiconductors[S].1999.