鄭俊錦,陳鐘榮
(南京信息工程大學 中國氣象局氣溶膠與云降水重點開放實驗室,南京 210044)
銀耳又稱白木耳,是優質的藥食兼可的菌類[1]。我國的銀耳產區主要集中在四川通江和福建等地[2],其中以有著“銀耳之鄉”美譽的福建省古田縣為多,銀耳產量占全國總產量的95%以上,世界銀耳總產的80%以上[3]。然而,該縣的銀耳生產方式主要以規模較小的家庭作坊式栽培為主,菇房環境的監控手段較為落后。由于銀耳菇房的濕度較大(尤其是出耳后,相對濕度常高達100%),因此菇農通常不觀測菇房的相對濕度,而只對菇房溫度進行監控。當前大部分菇農采用玻璃溫度表來觀測菇房溫度,這不僅使得監控效率低下,而且無法自動記錄溫度數據。
為此,本文為提高菇房溫度監控的效率,應用了傳感器、GSM/GPRS、微處理器和物聯網等技術,采用了有限狀態機思想編程,實現了20路以上的溫度傳感器的長距離讀取。并通過GSM/GPRS技術,使得用戶可以通過語音通話、短信和Web網頁等多種方式來獲取菇房信息(如溫度數據、日光燈等設備的開關狀態)和遠程控制菇房設備。同時,在數據中心建立了菇房信息數據庫,可自動記錄栽培全程的菇房信息(如溫度數據、各設備開關狀態改變的時間點等),為研究菇房溫度、光照時間、通風時間等環境要素與銀耳的產量和品質的關系提供了數據樣本。
本系統主要構成為微處理器、溫度傳感器、按鍵和顯示模塊、繼電器模塊、聲光報警模塊、GSM/GPRS模塊,數據中心和菇房電器設備等。系統框圖如圖1所示。

圖1 系統總體結構框圖Fig.1 Schematic drawing of the system general structure
用戶除了能通過按鍵顯示模塊和聲光報警模塊與系統現場交互,還可通過GSM/GPRS技術與系統遠程交互。利用GSM網絡,用戶可以通過電話和短信向系統發出查詢或設置指令 (如查詢溫度,控制菇房電器開關和設置溫度閾值等系統參數),系統以短信形式發送當前菇房信息和向用戶撥打電話的方式報警;利用GPRS網絡,系統定時將菇房電器的開關狀態以及溫度數據等信息發往數據中心,用戶可通過瀏覽Web網頁來獲取相關信息和控制菇房電器設備。同時,數據中心將記錄栽培全程的菇房信息,以便菇農和研究人員進行后期分析。
由于大多菇房的加溫措施采用設置加溫煙道(通過燒火來加溫),降溫措施采用開啟門窗和鼓風機(栽培季節為春、秋、冬季,室外溫度低于室內溫度)。因此,本系統只能實現單向的溫度調節 (降溫)。當菇房溫度太低并達到一定的時間,系統通過繼電器模塊來關閉門窗并發出報警信息;當菇房溫度太高并達到一定的時間,則開啟門窗和鼓風機并發出報警信息;當菇房設備切換為人工模式時,完全由菇農控制菇房電器設備的開關。
本系統采用12 V外部電源,給聲光報警模塊和繼電器模塊供電,12 V電壓經LM2596-5.0降壓形成5 V電壓,給單片機、溫度傳感器供電,5 V電壓經過MIC29302BU降壓,形成4 V的電壓,給GSM/GPRS模塊供電。
STC15F2K60S2是宏晶公司生產的單時鐘/機器周期的單片機,內部集成高精度R/C時鐘(±0.3%),ISP編程時5~35 MHz可設置,可省掉外部晶振和外部復位電路。其片內具有60 KB的Flash程序存儲器、2 KB的SRAM和1 KB的E2PROM。其所有I/O口均可由軟件配置成4種工作模式(準雙向口/弱上拉、推挽輸出/強上拉、僅為輸入(高阻)、開漏輸出)之一。
DS18B20是美國DALLAS公司生產的單線數字溫度傳感器,測量范圍為-55℃~+125℃,在-10℃~+85℃范圍內,精度為±0.5℃。每個DS18B20都有一個唯一的64位ROM序列號,應用時,通過查詢此序列號可識別一根總線上掛接的多個DS18B20,實現對對象的準確控制。
利用DS18B20進行多點測溫的方法有2種[4]:
(1)單端口單總線驅動法。優點:節省單片機I/O口、連接簡單、節約導線。缺點:電氣特性相互影響、實時性變差(逐個操作,并且要先匹配序列號)。
(2)多端口并行驅動法,即并行處理均獨立分配有一個I/O口的DS18B20。優點:實時性好。缺點:單片機I/O口消耗較大。
每個菇房中間布設一個具有不銹鋼防水封裝的DS18B20。由于菇房(一般寬5 m,長14 m)并行排列,若采用單端口單總線驅動法,每增加一個傳感器只需加長12 m,可以有效減少線纜成本。菇房分布以及DS18B20的連接方式如圖2所示。
根據相關文獻介紹,當單總線上掛接超過8個DS18B20時,需要增加單片機總線驅動器。當采用普通信號線纜傳輸長度大于50 m時,讀取的測溫數據會發生錯誤;當采用屏蔽雙絞線電纜時,通信距離可達500 m[6]。

圖2 傳感器分布示意圖Fig.2 Schematic diagram of the sensor distribution
本文在使用普通線纜(RVV,3*0.3的護套線)和不加總線驅動器的情況下,通過改變上拉電阻的阻值和單片機IO口(該IO口連接DS18B20的數據端口)的工作模式,在保證通信正常的情況下,測試所能掛接的傳感器數目和通信距離,實驗結果如表1所示(表中,準雙向表示使用單片機I/O口的準雙向口模式;高阻推挽表示當該IO口為輸入時配置為高阻輸入,當該IO口為輸出時配置為推挽輸出/強上拉的工作模式)。因此,可通過以下2種方式來增強單片機的驅動能力,以擴展傳感器數目以及線纜長度:①將單片機I/O口配置為高阻推挽模式(STC15系列單片機的I/O口在推挽輸出/強上拉模式下,驅動能力可達20 mA);②適當減少上拉電阻的阻值。

表1 溫度傳感器擴展實驗結果Tab.1 Experimental results of temperature sensor expansion
SIM900A是芯訊通(SIMCom)公司的無線通信GSM/GPRS模塊。它支持GPRS multi-slot class10/class 8(可選)和 GPRS 編碼格式 CS-1、CS-2、CS-3以及CS-4。它內嵌TCP/IP協議,擴展的TCP/IP AT命令讓用戶能夠容易地使用TCP/IP協議,在數據傳輸方面應用廣泛[6]。同時,模塊還可通過升級固件來增加TTS語音合成功能,使得本系統具備本地語音播報的功能。
本系統采用的報警器型號為JS-103(12 V,0.3 A)。單片機IO可以通過N溝道場效應管(AO3402)來直接驅動,電路圖如圖3所示。

圖3 報警器驅動電路Fig.3 Drive circuit of the alarm
由于菇房使用的日光燈、鼓風機和單鏈條開窗器的數目較多,并且采用220 V供電,因此需要采用較多的繼電器。本文使用可級連的74HC595來擴展單片機IO口,然后經過ULN2003A放大后驅動繼電器,來控制各個房間的日光燈、鼓風機和電動單鏈條開窗器模塊等。
系統軟件設計包括數據中心的上位機軟件設計和硬件部分的下位機軟件設計。
本系統的數據中心是基于Linux平臺、使用Node.JS開發的云端系統。通過TCP/IP協議使服務器與下位機建立和保持Socket長連接,來實現實時數據交換[7]。云端通過Web網頁向用戶提供了友好的人機交互界面。云端還將下位機定時發來的菇房溫度和窗戶開關等信息保存于數據庫中。數據庫使用了一款NoSQL數據庫—MongoDB[8],使得數據中心可以輕松地在云端保存并處理下位機高并發上傳的菇房信息數據。用戶可以通過Web網頁查看和下載菇房信息,如實時溫度和歷史溫度記錄等[9],并可以在Web網頁直接對日光燈、鼓風機及開窗器模塊等進行控制。另外,云端還可對數據進行分析,針對銀耳的生長階段給出相應的菇房環境控制的建議。
下位機軟件設計采用模塊化思想編程,以下主要介紹單片機與SIM900A的通訊和程序流程圖。
單片機通過串口使用AT命令與SIM900A通訊。SIM900A提供的AT命令包含符合GSM07.05、GSM07.07、和 ITU-T Recommendation V.25ter的指令,以及SIMCom自己開發的指令[10]。
由于SIM900A對某些AT命令的回復較慢。如果采用發出AT命令后,采用延時等待回復的方法,將犧牲系統的實時性。由于發送AT命令的函數可以劃分為3個狀態。因此,此處采用有限狀態機思想[11]取代死延時等待的方法進行編程,該函數狀態機轉換圖如圖4所示,箭頭上方內容為狀態切換條件,狀態2在“驗證回復”后,就切回到狀態0,以便執行下一次AT命令。

圖4 狀態機轉換圖Fig.4 State machine transition diagram
提高實時性的原理如下:當系統調用該函數且該函數沒執行完畢時,該函數就會處于在主函數的while循環內。程序每執行到這個函數時,只會執行它的一個狀態所對應的代碼 (先判斷處于哪個狀態,再執行相應的代碼)。例如當該函數處于等待回復狀態時,進入該函數后只判斷是否“出現回復”,然后就跳出該函數,執行其他函數。直到下次再進入該函數,再執行判斷。這相當于把執行其他函數所花費的時間當作延時,從而提高系統實時性。
本文主要介紹以下3個模塊的軟件設計:主程序模塊,包括初始化和調用各功能子程序,流程圖如圖5所示;串口服務子程序,負責處理SIM900A發來的內容,根據發來的內容進行相應的處理,流程圖如圖6所示;SIM900A通訊服務子程序,主要包括撥打電話,發送短信和發送GPRS數據,由于它們的流程相似,因此該子程序的流程圖只畫出發送短信部分 (電話撥打失敗和GPRS發送失敗的故障代碼分別為 “E2”、“E3”),其中m為發送失敗的次數,當發送失敗次數達10次,則通過重啟SIM900A模塊來嘗試恢復信號,流程圖如圖7所示。

圖5 主程序流程圖Fig.5 Flow chart of main program

圖6 串口服務子程序流程圖Fig.6 Flow chart of uart service routine

圖7 短信發送流程圖Fig.7 Flow chart of sending short message
本系統已在福建省古田縣的銀耳種植戶中應用,工作穩定可靠,效果良好。圖8為數據中心的網頁界面,圖中選擇顯示菇房1的實時情況,在圖中可以方便地查看菇房的溫度信息以及日光燈等設備的開關狀態。網頁的右下方顯示了當前菇房的實時溫度數據曲線,并且能夠選擇和放大任意時間段的溫度曲線,以查看相關細節。

圖8 數據中心的網頁界面Fig.8 Web page of data center
根據數據中心的溫度記錄,圖9繪制了某批次銀耳栽培全程的溫度走勢圖 (由于菇房一般在野外,通訊失敗和停電等原因造成了部分數據缺失)。由于這3個菇房的銀耳處于同一批次,因此溫度走勢大致相同。在栽培的中后期,菇房溫度發生較大幅度的震蕩,這是因為從銀耳出耳(約第17天)開始,為保持菇房空氣新鮮,防止銀耳長期處于高溫高濕的環境下發生爛耳或病菌滋生等病害,而定時給菇房進行通風操作。

圖9 銀耳菇房溫度走勢圖Fig.9 Temperature profile of tremella fuciformis plantation
菇房信息的遠程獲取和菇房電器設備的遠程控制,能及時發現菇房環境異常,并且能減少菇農進出菇房的頻率,從而減少雜菌感染率和減輕工作量。同時,本系統還記錄有日光燈、窗戶以及鼓風機開關狀態切換的時間點,菇農和研究人員可據此計算出各生長階段的累計光照時間、累計開窗時間和累計鼓風機工作時間等相關參數,來進一步研究總結得出最佳的菇房環境控制方法。
本文針對銀耳栽培的溫度監控現狀和菇農的實際需求,采用有限狀態機思想編程,改善了單片機在不使用操作系統時控制GSM/GPRS模塊的實時性,并且能夠簡潔有效地實現20路以上的溫度傳感器的長距離讀取,并且通過GSM/GPRS實現溫度數據等菇房信息的多渠道獲取和菇房環境的遠程控制,滿足了菇房溫度監控的需求,極大地方便了菇農的栽培管理工作。同時,數據中心的菇房信息數據庫為研究人員提供了大量的數據樣本。本系統廉價可靠,具有一定的推廣意義。
[1]李建.食用菌與藥用菌栽培工藝手冊[M].北京:中國展望出版社,1991.
[2]彭衛紅,王勇,黃忠乾,等.我國銀耳研究現狀與存在問題[J].食用菌學報,2005,12(1):51-56.
[3]李怡彬,陳虹,鄭明初,等.罐藏新鮮銀耳生產工藝參數的研究[J].福建輕紡,2006(11):86-90.
[4]李會聰.DS18B20多點測溫方法探討[J].微計算機信息,2010,26(9):166-167.
[5]劉雨剛,洪炳林,郝文慧.基于DS18B20的高精度礦用溫度傳感器設計[J].國外電子元器件,2006(12):35-37.
[6]孔慶霞,朱全銀.基于DS18B20的遠距離分布式溫度數據采集系統[J].電子測量技術,2009,32(4):154-156.
[7]SIMCom.SIM900A_hardware design_v1.03[EB/OL].(2012-11-29)[2014-07-01]http://www.sim.com/wm.
[8]樸靈.深入淺出Node.js[M].北京:人民郵電出版社,2013.
[9]Banker K.MongoDB實戰[M].丁雪豐,譯.北京:人民郵電出版社,2012.
[10]Brown E.Web Development with Node and Express:Leveraging the JavaScript Stack[M].O’Reilly Media,Inc.,2014.
[11]SIMCom.SIM900A_AT Command manual_v1.05[EB/OL].(2012-11-29)[2014-07-01]http://www.sim.com/wm.
[12]劉媛媛.51單片機用有限狀態機算法實現順序控制[J].機械工程與自動化,2011(4):42-44.