袁 博
(南陽(yáng)理工學(xué)院信息工程學(xué)院 河南 南陽(yáng) 473004)
倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)在現(xiàn)代物流體系中至關(guān)重要,不僅關(guān)系到倉(cāng)儲(chǔ)貨物的質(zhì)量與安全,也是衡量倉(cāng)儲(chǔ)系統(tǒng)管理水平與運(yùn)行效率的重要因素。除安全考慮外,好的倉(cāng)儲(chǔ)環(huán)境檢測(cè)系統(tǒng)還能夠降低倉(cāng)儲(chǔ)損耗,節(jié)約物流成本。傳統(tǒng)倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)多數(shù)采用人工監(jiān)測(cè)或有線傳感網(wǎng)監(jiān)測(cè)[1]。無(wú)線傳感網(wǎng)WSN(Wireless Sensor Network)是融合了無(wú)線通信技術(shù)、網(wǎng)絡(luò)技術(shù)與傳感器技術(shù)等的交叉學(xué)科,不僅能克服人工監(jiān)測(cè)中實(shí)時(shí)性差、人工成本高等缺點(diǎn),也能避免有線傳感網(wǎng)監(jiān)測(cè)中布線多、移動(dòng)與擴(kuò)展困難、維護(hù)成本高等問題,是今后發(fā)展智能倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)系統(tǒng)的一種理想技術(shù)[2-4]。本文綜合利用Arduino UNO、NodeMCU與TLINK物聯(lián)網(wǎng)云平臺(tái),設(shè)計(jì)了一種倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)原型系統(tǒng),通過將溫濕度傳感器、火焰?zhèn)鞲衅髋c空氣質(zhì)量傳感器集成為一個(gè)無(wú)線傳感網(wǎng),能對(duì)多種倉(cāng)儲(chǔ)環(huán)境關(guān)鍵參數(shù)進(jìn)行實(shí)時(shí)監(jiān)測(cè)與網(wǎng)絡(luò)顯示[5-10]。
系統(tǒng)采用Arduino平臺(tái)搭建無(wú)線傳感網(wǎng),實(shí)現(xiàn)對(duì)倉(cāng)庫(kù)的溫濕度監(jiān)控、火情報(bào)警、有毒氣體監(jiān)測(cè)等功能。系統(tǒng)涉及模塊包括:Arduino UNO開發(fā)板、溫濕度傳感器、火焰?zhèn)鞲衅?、空氣質(zhì)量傳感器、NodeMCU和TLINK物聯(lián)網(wǎng)平臺(tái),結(jié)構(gòu)如圖1所示。其中,溫濕度、火焰與空氣質(zhì)量等傳感器模塊通過Arduino UNO和NodeMCU進(jìn)行匯聚、處理與無(wú)線傳輸,并通過TLINK物聯(lián)網(wǎng)云平臺(tái)形成倉(cāng)儲(chǔ)環(huán)境監(jiān)控的可視化信息,在手機(jī)等終端進(jìn)行顯示。
圖1 基于WSN的倉(cāng)儲(chǔ)環(huán)境檢測(cè)原型
從結(jié)構(gòu)上來說,WSN一般包括傳感器節(jié)點(diǎn)、匯聚節(jié)點(diǎn)和管理節(jié)點(diǎn)3部分[11]。傳感器節(jié)點(diǎn)主要用于測(cè)量與發(fā)送感興趣參數(shù);匯聚節(jié)點(diǎn)主要用于向傳感器節(jié)點(diǎn)發(fā)布監(jiān)測(cè)任務(wù),匯聚各傳感器節(jié)點(diǎn)測(cè)量信息并向外部網(wǎng)絡(luò)轉(zhuǎn)發(fā);管理節(jié)點(diǎn)主要用于配置和管理WSN,發(fā)布監(jiān)測(cè)任務(wù),收集和顯示監(jiān)測(cè)數(shù)據(jù)[12,13]。因此,基于WSN的倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)原型系統(tǒng)的技術(shù)路線如圖2所示。
首先,倉(cāng)儲(chǔ)監(jiān)控對(duì)象通常包括溫度、濕度、火警信息,以及二氧化碳等感興趣氣體濃度[14]。針對(duì)上述監(jiān)控需求,系統(tǒng)選擇DHT11數(shù)字溫濕度傳感器測(cè)量倉(cāng)庫(kù)溫度與濕度,選擇Risym紅外火源探測(cè)模塊(又稱火焰?zhèn)鞲衅?監(jiān)控火警信息,選擇MQ-135空氣質(zhì)量傳感器監(jiān)測(cè)感興趣氣體濃度,共同作為WSN的傳感器節(jié)點(diǎn)。
圖2 基于WSN的倉(cāng)儲(chǔ)環(huán)境檢測(cè)原型系統(tǒng)技術(shù)路線
其次,系統(tǒng)采用Arduino UNO結(jié)合NodeMCU作為WSN的匯聚節(jié)點(diǎn)。其中Arduino UNO開發(fā)板用于將來自管理節(jié)點(diǎn)的監(jiān)測(cè)任務(wù)或監(jiān)測(cè)指令分配給各傳感器節(jié)點(diǎn),接收和處理各傳感器節(jié)點(diǎn)測(cè)量數(shù)據(jù),并利用NodeMCU將匯聚的測(cè)量數(shù)據(jù)通過WIFI模塊傳送到網(wǎng)絡(luò)中。
最后,采用TLINK物聯(lián)網(wǎng)云平臺(tái)作為管理節(jié)點(diǎn)。系統(tǒng)利用TLINK對(duì)傳感器節(jié)點(diǎn)進(jìn)行注冊(cè)與管理,生成和分發(fā)監(jiān)測(cè)任務(wù)[10],并作為遠(yuǎn)程監(jiān)控平臺(tái),供監(jiān)控人員在手機(jī)等監(jiān)控終端查看倉(cāng)儲(chǔ)環(huán)境信息。
該原型系統(tǒng)采用面包板和杜邦線連接電路,可隨意拔插調(diào)整,如圖3所示。其中,溫濕度傳感器、火焰?zhèn)鞲衅髋c空氣質(zhì)量傳感器分別使用三根連接線,一根與Arduino UNO相連,用于傳輸測(cè)量數(shù)據(jù),另外兩根分別接電源和接地;Arduino UNO與NodeMCU除各自的電源線與接地線之外,二者之間的通信也通過相連的杜邦線實(shí)現(xiàn)。
圖3 原型系統(tǒng)硬件連接示意圖
倉(cāng)庫(kù)的溫度與濕度監(jiān)控對(duì)于防止食物或藥品變質(zhì),避免貨物損壞或損耗等具有重要意義。系統(tǒng)選擇DHT11數(shù)字溫濕度傳感器進(jìn)行倉(cāng)庫(kù)溫度與濕度的檢測(cè)。DHT11數(shù)字溫濕度傳感器包括一個(gè)NTC測(cè)溫元件和一個(gè)電阻式感濕元件,成本低廉,響應(yīng)速度快,同時(shí)具有較高的穩(wěn)定性和可靠性。DHT11通過單總線與Arduino平臺(tái)中微處理器進(jìn)行通信,系統(tǒng)集成簡(jiǎn)單便捷[15]。
DHT11為4針或3針單排引腳封裝,供電電壓3.3~5.5 V,濕度測(cè)量范圍20~90%RH,測(cè)量精度±5%RH;溫度測(cè)量范圍0~50 ℃,測(cè)量精度±2 ℃。DHT11連接微控制器(MCU)的典型電路如圖4所示,其中VDD端(1Pin)接3.3~5.5 V直流電源,DATA端(2Pin)接MCU數(shù)據(jù)線,GND端(4Pin)接地。
圖4 DHT11連接MCU典型電路
火焰?zhèn)鞲衅髂茉诘谝粫r(shí)間發(fā)現(xiàn)監(jiān)測(cè)區(qū)域內(nèi)產(chǎn)生的火焰,并發(fā)送火災(zāi)報(bào)警信號(hào)給WSN的匯聚節(jié)點(diǎn)。系統(tǒng)選擇Risym火焰?zhèn)鞲衅髂K(也稱紅外火源探測(cè)模塊)監(jiān)測(cè)倉(cāng)庫(kù)火災(zāi)隱患。該模塊可以檢測(cè)火焰或波長(zhǎng)在760~1100 nm范圍內(nèi)的光源,工作電壓3.3~5 V,探測(cè)角60°,有火光時(shí)輸出為0 V,沒火光時(shí)輸出為5 V,可通過精密電位器調(diào)節(jié)靈敏度,輸出形式包括數(shù)字開關(guān)量輸出(0或1)和模擬電壓輸出兩種[16]。
Risym火焰?zhèn)鞲衅麟娐啡鐖D5所示。其中,VCC接3.3~5 V直流電源正極,D0為開關(guān)信號(hào)輸出,接微控制器數(shù)據(jù)線。
圖5 Risym火焰?zhèn)鞲衅麟娐穲D
系統(tǒng)使用MQ-135空氣質(zhì)量傳感器作為有害氣體泄漏檢測(cè)裝置。MQ-135空氣質(zhì)量傳感器使用二氧化錫(SnO2)作為氣敏材料,二氧化錫的電導(dǎo)率在清潔空氣中較低,隨空氣中有害氣體濃度的增加而增大,通過測(cè)量電導(dǎo)率的變化,即可得到有害氣體的濃度變化情況。MQ-135適合測(cè)量氨氣、苯系蒸汽、硫化物、芳族化合物、煙霧等有害氣體濃度,特別是對(duì)一氧化碳具有很高的靈敏度。MQ-135氣敏元件的濃度測(cè)試范圍為10~1000 ppm,具有開關(guān)信號(hào)(TTL)輸出和模擬信號(hào)輸出兩種輸出形式,其中TTL輸出的有效信號(hào)為低電平,模擬信號(hào)輸出時(shí),有害氣體濃度越高則電壓越高。
MQ-135空氣質(zhì)量傳感器的基本測(cè)試電路如圖6。其中,VH為加熱器電壓,用于為傳感器提供特定的工作溫度;VC為測(cè)試電壓,用于測(cè)定與傳感器串聯(lián)的負(fù)載電阻RL上的電壓VRL;GND接地。
圖6 MQ-135空氣質(zhì)量傳感器基本測(cè)試電路
Arduino是一款基于單片機(jī)的電子產(chǎn)品開發(fā)平臺(tái),Arduino UNO是Arduino USB接口系列的最新版本。Arduino UNO工作電壓為5 V,輸入電壓為7~12 V,可以通過外部直流電源插座、電池和USB接口3種方式供電,能自動(dòng)選擇供電方式,引腳結(jié)構(gòu)如圖7所示。其中系統(tǒng)用到的引腳包括:D1~D4、A0、5V、GND與Vin。
Arduino UNO開發(fā)板作為無(wú)線傳感網(wǎng)的匯聚節(jié)點(diǎn),是整個(gè)系統(tǒng)的核心部分,上述幾種傳感器的測(cè)量數(shù)據(jù)都通過Arduino進(jìn)行接收和處理,并通過NodeMCU中的WIFI模塊進(jìn)行無(wú)線網(wǎng)絡(luò)傳輸。
圖7 Arduino UNO開發(fā)板引腳結(jié)構(gòu)
NodeMCU是一款開源的物聯(lián)網(wǎng)開發(fā)平臺(tái),MCU使用Xtensa L106芯片,RAM大小為50 K,F(xiàn)lash能儲(chǔ)存512 K的數(shù)據(jù),具備D1~D10共10個(gè)GPIO口,自帶ESP8266串口WIFI 模塊。
系統(tǒng)使用NodeMCU中的ESP8266串口WIFI模塊實(shí)現(xiàn)無(wú)線通信功能,將經(jīng)過Arduino UNO接收和處理的倉(cāng)儲(chǔ)環(huán)境監(jiān)控?cái)?shù)據(jù)傳送到外網(wǎng)中的TLINK物聯(lián)網(wǎng)云平臺(tái)。
系統(tǒng)的Arduino編程在Arduino IDE上實(shí)現(xiàn),Arduino IDE是Arduino系列開發(fā)板配套的免費(fèi)集成編譯環(huán)境,可以在Arduino官網(wǎng)下載。同時(shí)使用IDE中自帶的串口監(jiān)視器查看DHT11、MQ-135和Risym傳感器的反饋,以便調(diào)試程序。此外,需要使用串口助手對(duì)NodeMCU進(jìn)行調(diào)試并監(jiān)測(cè)其工作過程中的數(shù)據(jù)傳輸狀態(tài)。系統(tǒng)程序開發(fā)實(shí)現(xiàn)主要包括兩部分,一是Arduino UNO代碼,二是NodeMCU代碼。
Arduino UNO代碼的主要功能是讀取各傳感器的監(jiān)測(cè)數(shù)據(jù),用自定義格式封裝后發(fā)往NodeMCU的串口。此外,需要在火焰?zhèn)鞲衅鞑糠旨由弦粋€(gè)LED報(bào)警燈控制程序,即監(jiān)測(cè)到火光后LED點(diǎn)亮,未檢測(cè)到火光LED燈不點(diǎn)亮。
Arduino UNO部分關(guān)鍵代碼如下:
int chk = DHT11.read(DHT11_Sensor_Pin); // 讀取DHT11溫濕度傳感器數(shù)據(jù),返回讀取狀態(tài)
if (chk == DHTLIB_OK) //如果讀取成功
{
humidity = DHT11.humidity;
//將DHT11的濕度測(cè)量值賦給變量humidity
temperature = DHT11.temperature;
//將DHT11的溫度測(cè)量值賦給變量temperature
}
flame = digitalRead(Flame_Sensor_Pin);
//讀取火焰?zhèn)鞲衅鲾?shù)字(開關(guān))值
if (flame == HIGH) {
//如果值為“高”,火情報(bào)警燈點(diǎn)亮
digitalWrite(LED, HIGH);
}
else {
//如果值為“低”,火情報(bào)警燈不點(diǎn)亮
digitalWrite(LED, LOW);
}
NodeMCU程序功能主要包括讀取Arduino發(fā)送的串口數(shù)據(jù),連接TLINK并發(fā)送數(shù)據(jù)給TLINK服務(wù)器,監(jiān)測(cè)NodeMCU工作狀態(tài)并在串口監(jiān)視器中顯示。
NodeMCU部分關(guān)鍵代碼如下:
DataSerial.begin(9600); //數(shù)據(jù)傳輸波特率
DebugSerial.begin (115200); //調(diào)試串口波特率
DebugSerial.println(" Start ESP8266");
WiFi.disconnect(); //斷開WIFI連接
WiFi.mode(WIFI_STA); //設(shè)定NodeMCU工作模式
DebugSerial.printf("connect ssid: %s ,password: %s ",stassid,stapassword);
WiFi.begin(stassid,stapassword); //連接路由器
doTCPClientTick(); //保持與TLINK連接的函數(shù)
doUartTick(); //檢查Arduino UNO是否有數(shù)據(jù)發(fā)送
TLINK物聯(lián)網(wǎng)云平臺(tái)由深圳市模擬科技有限公司開發(fā),提供綜合性的物聯(lián)網(wǎng)應(yīng)用解決方案,能夠幫助物聯(lián)網(wǎng)開發(fā)者輕松實(shí)現(xiàn)設(shè)備接入與設(shè)備連接。TLINK兼容大多數(shù)網(wǎng)絡(luò)環(huán)境與協(xié)議,支持各類傳感器和智能硬件的快速接入,支持大數(shù)據(jù)服務(wù)。TLINK提供了豐富的API和應(yīng)用模板,支持各類行業(yè)應(yīng)用和智能硬件的開發(fā),能夠有效降低物聯(lián)網(wǎng)應(yīng)用開發(fā)和部署的成本。
基于TLINK,本系統(tǒng)不需要開發(fā)專門用于顯示倉(cāng)儲(chǔ)環(huán)境數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用或手機(jī)APP,只需將監(jiān)測(cè)數(shù)據(jù)通過無(wú)線網(wǎng)絡(luò)上傳到TLINK,在手機(jī)上下載TLINK APP,或打開TLINK Web頁(yè)面,便可在手機(jī)或電腦終端查看倉(cāng)庫(kù)環(huán)境監(jiān)測(cè)數(shù)據(jù)。
使用TLINK時(shí),首先打開TLINK的網(wǎng)站(www.tlink.io),注冊(cè)并登錄后,在設(shè)備管理中添加設(shè)備,并設(shè)置設(shè)備名稱、鏈接協(xié)議、上報(bào)周期以及設(shè)備所使用的傳感器信息。TLINK的設(shè)備設(shè)置如圖8所示,設(shè)置完成后,平臺(tái)會(huì)給出一個(gè)IP地址、一個(gè)序列號(hào)、一個(gè)端口號(hào),利用這3個(gè)信息就可以連接TLINK服務(wù)器把數(shù)據(jù)上傳到云平臺(tái)上。
圖8 TLINK設(shè)備設(shè)置
圖9 TLINK上的系統(tǒng)測(cè)試界面
連接好電路,把程序拷入Arduino UNO與NodeMCU中。上電后系統(tǒng)運(yùn)行良好,打開瀏覽器登錄TLINK,可在TLINK的數(shù)據(jù)監(jiān)視中心上查看當(dāng)前的倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)數(shù)據(jù),如圖9所示。如果要在手機(jī)上查看數(shù)據(jù),需要下載TLINK的手機(jī)APP,登錄后可看到與瀏覽器中同樣的頁(yè)面。
本文利用Arduino UNO與NodeMCU,結(jié)合TLINK物聯(lián)網(wǎng)云平臺(tái),將幾種常見傳感器搭建為無(wú)線傳感網(wǎng),實(shí)現(xiàn)了一種基于無(wú)線傳感網(wǎng)的倉(cāng)儲(chǔ)環(huán)境監(jiān)測(cè)原型系統(tǒng)。該系統(tǒng)能夠監(jiān)測(cè)倉(cāng)儲(chǔ)環(huán)境中的溫度、濕度、火警信息和空氣質(zhì)量參數(shù),并通過WIFI實(shí)時(shí)傳送到外網(wǎng),供監(jiān)控人員在手機(jī)等終端集中查看,以一種高實(shí)時(shí)性、低成本、非常便利的方式,實(shí)現(xiàn)了倉(cāng)儲(chǔ)環(huán)境中的溫濕度與空氣質(zhì)量監(jiān)測(cè),以及火警預(yù)報(bào)等常見功能。
該原型系統(tǒng)還有很多需要改進(jìn)的地方。首先,真正的倉(cāng)庫(kù)空間很大,需要布置大量傳感器,將每個(gè)傳感器都與Arduino UNO直接進(jìn)行物理連接并不現(xiàn)實(shí);可以將傳感器與NodeMCU直接相連,再通過WIFI信號(hào)傳到Arduino UNO匯聚節(jié)點(diǎn)上。其次,由于WIFI模塊耗電量大,大型倉(cāng)庫(kù)中所有傳感器節(jié)點(diǎn)都采用電源供電又難以實(shí)現(xiàn),可以使用耗電量較小的ZigBee技術(shù)代替NodeMCU的WIFI來傳輸傳感器數(shù)據(jù),這樣就可以使用電池維持傳感器節(jié)點(diǎn)長(zhǎng)時(shí)間的正常工作。第三,還可以在系統(tǒng)中加入排風(fēng)系統(tǒng)、空調(diào)系統(tǒng)與滅火系統(tǒng)等,在實(shí)現(xiàn)自動(dòng)監(jiān)測(cè)功能的同時(shí),實(shí)現(xiàn)遠(yuǎn)程、實(shí)時(shí)的倉(cāng)儲(chǔ)環(huán)境自動(dòng)調(diào)控與管理。