劉林真
(陽光學院電子信息工程系,福建福州 350015)
在中國傳統節日中,人們往往會燃放煙花爆竹為節日增添喜慶氣氛.然而煙花爆竹易燃易爆,其在生產、經營、運輸、燃放過程中都應注意安全.煙花溯源系統是分析目前煙花爆竹行業現狀,結合當前先進物聯網技術,建立一套由煙花爆竹生產商、批發商、零售商、安全監管人員、消費者共同參與數據建立、維護和查詢的煙花爆竹安全溯源系統,用以規范煙花爆竹安全監督以及管理工作,實現煙花爆竹產品的可溯源性[1].系統將利用物聯網中先進的RFID技術并依托 .NET平臺、網絡技術、嵌入式技術、多媒體技術、數據庫技術,對煙花產品生命周期的每一個階段(包括生產、倉儲、運輸、流通)提供合理決策.通過建立一個完整的煙花爆竹產品安全控制體系,實現煙花爆竹產品的源頭追蹤.本研究主要針對煙花爆竹在倉庫存儲過程中的溫、濕度監控模塊進行闡述.
相關條例指出,煙花必須儲存在專用倉庫,儲存方式須符合國家標準,并由專人管理,設置相應的監控系統,使用場所應設置通訊、報警裝置,并保證在任何情況下處于正常適用狀態.為此,利用先進的電子通訊技術對煙花倉庫的溫度、濕度等環境參量的自動檢測和智能化監控,是實現煙花存儲安全的一個重要手段.本系統設計基于STM32和nRF2401的煙花倉庫溫濕度監控系統.系統以STM32F103處理器為控制中心,通過溫、濕度傳感器,采樣環境信息,采用嵌入式μC/GUI設計圖形用戶界面,提高用戶操作性;移植嵌入式μC/OS操作系統,簡化程序設計,提高系統實時性.
系統主要由三部分組成:溫、濕度采集模塊,數據接收模塊及PC端監控模塊.溫、濕度采集器分布于監測環境的各位置,自動進行溫、濕度數據采集.當溫度或者濕度超過閾值時,系統報警(燈閃爍,蜂鳴器響起),并將數據傳輸至數據接收模塊.數據接收模塊接收到環境參數信息后,通過串口通信方式將采集的溫濕度數據信息以及對應的監測位置上報給PC端監測模塊.監測模塊對數據進行分析、處理并進行實時顯示.系統總體框圖如圖1所示.

圖1 系統總體框圖Fig.1 Block diagram of overall system
溫、濕度采集分站在嵌入式設備上實現,硬件平臺采用STM32F103處理器為控制器,外接電源、串口、JTAG接口、LCD觸摸屏,溫、濕度傳感器采用DHT11,無線通信模塊采用nRF2401無線收發器芯片.
硬件重點考慮主控模塊、無線通信模塊、溫濕度采集模塊.主控模塊采用技術較為成熟且功能強大的ARM Cortex-M3T體系的STM32單片機[2].考慮用STM32,主要是因為其實時性能出色,具有較大的集成性,易于開發,性價比遠高于51單片機,能移植μC/OS操作系統.要使STM32能工作起來,至少分別需要幾部分電路,包括供電電源、晶振電路、復位電路、BOOT電路等.
無線通信模塊采用nRF24L01.nRF24L01是一款工作在2.4 GHz全球開放ISM頻段的無線射頻收發芯片,具有自動應答及自動重發功能.STM32通過SPI接口、IO口外部中斷與nRF2401連接[3],SPI為數據通信,IO口控制模塊的使能端,當發送或者接收到數據通過外部中斷引腳進入中斷處理程序.圖2為nRF2401與STM32連接圖.
溫、濕度傳感器采用DHT11.DHTll作為一種新型的單總線數字溫濕度傳感器,不再需要外置的A/D轉換模塊,而且體積小、功耗低、響應速度快、抗干擾能力強.濕度測量范圍為20%~90% ,溫度測量范圍為0~+50℃,濕度測量精度為±5.0% ,溫度測量精度為±1.0℃[4].DHTll與STM32通信只需要一個IO口,固將其DATA線連接到STM32的IO口上,通過IO口模擬單總線時序.系統硬件如圖3所示.

圖2 nRF2401與STM32連接圖Fig.2 Connection diagram between nRF2401 and STM32

圖3 系統硬件實物圖Fig.3 System hardware diagram
軟件平臺為嵌入式μC/OS操作系統,版本為V2.86,移植μC/GUI 3.9設計圖形界面[5].開發環境為RealView MDK-ARM3.80a,采用STM32標準庫3.5.0.開發流程具體包括:① μC/OS內核裁剪移植;②μC/GUI移植;③ 編寫多任務;④ 代碼測試.
系統的程序主要包括這幾部分:多任務創建、無線NRF2401數據發送接收、DHT11溫濕度數據采集、μC/GUI界面顯示、串口數據接收發送、系統與運行及報警指示燈等.
系統的流程為:系統上電復位后,首先對系統的各部分硬件進行初始化.初始化后μC/OS完成6個任務的創建,分別包括界面任務APP_TASK_USER_IF、觸屏任務APP_TASK_KBD、DHT11溫濕度采集任務APP_TASK_THC、LED燈閃爍任務APP_TASK_LED、蜂鳴器報警任務 APP_TASK_BEE、nRF2401發送數據任務APP_TASK_NRF.然后,系統開始執行第一個已經就緒的并且任務優先級最高的任務.系統中,界面任務和觸屏任務啟動,兩個任務都調用延時函數 OSTimeDlyHMSM(0,0,0,100)延時100 ms,然后刷新屏幕.溫濕度采集任務每500 ms采集一次DHT11的溫、濕度數據,并根據數據的結果決定是否啟動燈閃爍任務、蜂鳴器報警任務以及nRF2401發送數據任務.基于μC/OS操作系統應用程序的主函數流程如圖4所示.

圖4 系統程序總流程圖Fig.4 Flow diagram of system program
μC/OS是一個可移植、可固化的、可裁剪的、可剝奪的多任務實時內核,它適用于多種微處理器、微控制器和數字處理芯片(已經移植到超過100種以上的微處理器應用中)[6].同時,該系統源代碼開放,有詳細的注釋,適合系統開發[6].
μC/OS是專門為計算機的嵌入式應用設計的,絕大部分代碼是用C語言編寫的[7].CPU硬件相關部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,便于移植到任意CPU上.用戶只要有標準的ANSI的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS嵌入到開發的產品中[8].μC/OS具有執行效率高、占用空間小、實時性能優良和可擴展性強等特點,最小內核可編譯至2 kB.μC/OS已經移植到了幾乎所有知名的CPU上[9].
消息郵箱是μC/OS內核中用來實現任務間通信的一種機制,它能使一個任務或中斷服務向另一個任務發送一個指針型的變量,這個指針指向一個包含特定消息的數據結構[10].μC/OS內核提供了與消息郵箱相關的7個函數:OSMboxCreate()-創建消息郵箱、OSMboxDel()-刪除消息郵箱、OSMboxPend()-請求消息郵箱、OSMboxAccept()-無等待地請求消息郵箱、OSMboxPostOpt()-可選擇發送方式的發送消息郵箱、OSMboxPost()-發送消息郵箱和OSMboxQuery()-查詢消息郵箱.
系統要求溫度或者濕度高于給定閾值的情況下能喚醒3個任務:LED燈閃爍任務、蜂鳴器報警任務、nRF2401發送數據任務,所以采用可選擇的廣播方式發送郵箱.考慮到溫度值或者濕度值都可喚醒以上3個任務,可設計2個消息郵箱,分別用來監控兩類數據.同時,較大面積的倉庫中需多個點同時采集溫、濕度值,為了記錄每個點的具體位置,設計一個結構體專門用來存儲每個點的溫、濕度值以及對應的位置,結構體定義如下:

如此,只要將消息郵箱中的指針指向該結構體,當報警時能實時讀出具體的位置,對后續的處理爭取了更多的時間.
μC/OS具有源代碼開放的特性,從μC/OS關于發送消息郵箱相關函數得到一個結論:如果消息郵箱中已有消息,則返回錯誤代碼.說明消息郵箱已滿,立即返回調用者,并丟棄新消息.從實際應用角度考慮,如果消息郵箱中已經存放有相關的超值信息,但還未處理,此時如果有新的消息進來,不能簡單屏蔽新消息或者舊消息,而應該根據實際保留數值較高的那個消息,目的是可以保證實時同步,也能第一時間監控到更危險區域.這樣就需要對μC/OS中OSMboxPostOpt()函數進行修改.
OSMboxPostOpt()函數中對已有消息的處理為:

監控主站通過串口與數據的接收總站進行通信,考慮到現在的PC機較少提供串口,而在下位機端串口是較普遍、簡單的通信方式,于是在PC端利用USB接口虛擬串口,及安裝USB虛擬串口驅動.
監控總站在啟動監控之前可以根據需要修改默認的下位機報警閾值,啟動監控后從下位機接收超過閾值的溫濕度數據以及對應的位置,將報警數據通過特殊顏色標注出來,提醒監控人員.系統還具有停止監控、清除警報、歷史查詢等功能.PC端軟件基于.NET平臺設計,采用C#語言進行開發,開發工具使用Visual Studio 2013.
系統在11 m×8 m的實驗室環境下進行了測試.
實驗設備包括4個溫濕度監控模塊,放置于實驗室4個角落.一個無線數據接收模塊(STM32+nRF2401接收模塊)以及一臺PC機(STM32與PC機通過USB轉虛擬串口連接),放置于實驗室教師機位置(與其中兩個監控模塊較近,與另外兩個監控模塊距離較遠).設置溫度閾值為28℃,相對濕度閾值為75%.系統開啟后,4個監控模塊開始作業,每500 ms采集一次溫、濕度.當溫、濕度超過閾值時,會產生聲光報警,同時,PC機的調試串口終端會顯示報警的位置以及當前的溫、濕度值.結果如圖5所示.

圖5 PC端系統主界面Fig.5 Main interface of PCterminal system
實驗過程采集多組溫度以及濕度的數據,并將這些數據與標準溫濕度進行對比,測量數據以及對比結果如表1所示.
由表1的對比結果可以看出,測量溫度與標準溫度的偏差小等于1.0℃ ,測量濕度和標準濕度的偏差小于等于3.0%,滿足煙花溫濕度監控系統的應用設計要求.
實驗結果表明,該套系統能完成既定目標、反應時間以及傳輸速率基本能達到實時的特性,PC端能實時且不遺漏地顯示溫、濕度超過閾值的位置,性價比較高,適合推廣.系統的特色有如下幾點:
①采用STM32控制器,STM32控制器性價比高,低端的51或52單片機無法移植μC/OS、μC/GUI,高端的ARM處理器價格卻高于STM32較多,而且學習難度較大;STM32有官方提供的庫函數,開發速度快,周期短,而且系統穩定性較高.
②移植μC/OS操作系統,μC/OS操作系統實現了多任務,而且通過消息郵箱、消息隊列實現了多任務的通信.系統為保證能不丟失地顯示溫濕度超過閾值的位置,選擇了消息隊列機制,消息隊列能存取多則消息,適合多個發送者和接收者之間復雜的交互操作[10].

表1 測量分析數據Tab.1 Analysis of measurement data
結合嵌入式技術、無線通信技術、μC/OS操作系統、μC/GUI圖形界面軟件,綜合設計了煙花倉庫溫濕度監測系統.經過方案的選擇和比較、方案的設計、芯片的選型、原理圖的設計,設計出基于STM32和nRF2401無線報警的硬件系統和軟件系統.主機硬件系統設計規范,實現液晶顯示控制、溫濕度采集、無線發送、報警信息和串口通信控制等功能.主機軟件系統設計合理,其中軟件移植μC/OS操作系統,簡化了程序設計.各模塊相互獨立,提高任務的并行性.改進消息郵箱算法,使消息郵箱中廣播發送函數更適合本系統.μC/OS操作系統的開源特性得到具體應用,提高系統的可靠性和可擴展性.移植μC/GUI,使整個界面更加整潔,并且有相對較好地交互性.實驗證明:該系統能實時對煙花溫濕度進行監測,能實現一定的報警裝置.當超過上限時能進行聲光報警,并將數據傳到服務器進行相應處理,整個系統具有較高的性價比.
[1]劉曉青.基于物聯網的煙花爆竹流通安全監管系統的設計[J].電腦知識與技術,2012,8(29):6 921-6 923.
[2]陳志旺.STM32嵌入式微控制器快速上手[M].北京:電子工業出版社,2012:58-60.
[3]李慶山,戴曙光,穆平安.nRF2401無線模塊在測控系統中的應用[J].電測與儀表,2006(8):58-59.
[4]曹昌勇,賈偉建.基于AT89C52和DHT11數字式糧庫溫濕度監控系統設計[J].齊齊哈爾大學學報:自然科學版,2014,30(1):32-34.
[5]王蘭英.基于STM32嵌入式系統的uCGUI移植與實現[J].四川理工學院學報:自然科學版,2012,25(1):56-58.
[6]嚴明貴.嵌入式軸承故障診斷系統中基于ARM S3C2410A的Linux平臺設計與實現[D].杭州:浙江大學,2006.
[7]李正軍.基于NiosII軟核CPU的TCP/IP協議實現[D].西安:西安電子科技大學,2006.
[8]任玉帥.SD存儲方案的研究與實現[D].大連:遼寧師范大學,2009.
[9]王慶,季振洲,劉濤.基于嵌入式eCos多核平臺的OpenMP并行算法的研究[J].黑龍江大學學報:自然科學版,2010,27(1):69-72.
[10]吳永忠.嵌入式實時操作系統μC/OS-II教程[M].西安:西安電子科技大學出版社,2007:36;139-162.