任志英,劉福光,王禪同,張宇杰,陳其勝
(1. 福州大學(xué)機械工程及自動化學(xué)院,福建 福州 350116; 2. 福建源光電裝有限公司,福建 福州 350002)
隨著汽車的日益普及,由車內(nèi)環(huán)境影響引起的安全事故屢見不鮮. 人員滯留車內(nèi),當(dāng)氧濃度、溫濕度等環(huán)境指標(biāo)長時間超過人體適宜的范圍時,容易出現(xiàn)缺氧、脫水、受熱受寒等生理問題,尤其是對于缺乏判別能力、行動不便的弱勢群體,更需要進行監(jiān)測和保護.
凱迪拉克公司的SRX系列前排車頂裝有乘客偵測功能,當(dāng)車主關(guān)閉車窗離開,而車內(nèi)仍留有可移動物體時,車輛便會發(fā)出鳴響和亮燈警告,提醒車外人員[1]. 但其報警形式單一,發(fā)出警報后,車外人員獲取求救信號后無法聯(lián)系車主,施救亦十分困難. 文[2]提到主動救助的方法. 當(dāng)車門上鎖后自行啟動,若檢測出環(huán)境異常,控制器發(fā)出指令控制車內(nèi)空調(diào)通風(fēng)系統(tǒng)和車窗升降系統(tǒng),使車內(nèi)與外界進行空氣交換,解決車內(nèi)環(huán)境問題. 其主要問題在于,該裝置的自主救援需與車的鎖止系統(tǒng)、通風(fēng)系統(tǒng)、車窗升降系統(tǒng)連接,驅(qū)動電路也要借助車本身,需要對車的電路進行改裝連接,改裝車的成本很高且存在影響其他電子設(shè)備的隱患. 在救助時打開車窗,會造成其他安全隱患, 如陌生人抱走車內(nèi)兒童、財物,難以廣泛應(yīng)用. 因此設(shè)計一款簡單便捷可監(jiān)控車內(nèi)環(huán)境的裝置,并實現(xiàn)與手機相連有著深遠的工程意義.
圖1 車載監(jiān)測報警系統(tǒng)總體結(jié)構(gòu)圖 Fig.1 Structure diagram of vehicle monitoring alarm system
車內(nèi)監(jiān)測報警系統(tǒng)的總體結(jié)構(gòu)如圖1所示,由車載傳感器基礎(chǔ)模塊、OneNet平臺、服務(wù)器、終端APP四個部分組成. 其中車載傳感器模塊包括監(jiān)測各環(huán)境指標(biāo)的傳感器、傳統(tǒng)顯示報警裝置及GPRS通訊模塊,實現(xiàn)監(jiān)測、數(shù)據(jù)發(fā)送和報警功能. OneNet平臺儲存、處理接收的數(shù)據(jù),提供應(yīng)用平臺API接口,實現(xiàn)與其他平臺的連入. 在服務(wù)器平臺上,可以通過接入OneNet平臺,搭建自己所需的監(jiān)測應(yīng)用,提供個性化的監(jiān)測報警服務(wù). 終端APP從OneNet平臺獲取數(shù)據(jù),并通過服務(wù)器平臺嵌入個性化的應(yīng)用,實現(xiàn)通過手機、平板等終端可以隨時隨地查詢和監(jiān)測[3-5].
系統(tǒng)層次設(shè)計需要綜合各項參考指標(biāo),在多種方案中選取最優(yōu)方案. 本研究采用AHP層次分析法進行建模和評判. 設(shè)目標(biāo)G為選取層次最優(yōu)方案; 評價指標(biāo)為Si, 其中應(yīng)用可擴展能力為S1,價格為S2,數(shù)據(jù)存儲管理能力為S3; 設(shè)備選方案為Pi, 其中傳統(tǒng)只含車載報警裝置的方案為P1, 含車載裝置并利用第三方數(shù)據(jù)平臺并自主開發(fā)應(yīng)用的方案為P2,含車載裝置且自主搭建平臺及應(yīng)用的方案為P3.
在本系統(tǒng)中,各評價指標(biāo)重要程度不同,應(yīng)用可擴展能力最重要,而數(shù)據(jù)存儲能力較不重要,因此設(shè)置指標(biāo)權(quán)重并構(gòu)造判斷矩陣A.
(1)
進行列向量歸一化及行向量求均值后,得到權(quán)向量:w=(0.63 0.26 0.11)T,并得到向量乘積:Aw=(1.96 0.8 0.32)T.根據(jù)最大特征值計算式得到最大特征值:
(2)
各層次都需要一致性檢驗,本系統(tǒng)的參考指標(biāo)為n=3個,而三階隨機一致性指標(biāo)RI=0.52. 根據(jù)一致性指標(biāo)(CI)計算公式,得到其值:
(3)
(4)
同樣計算權(quán)向量、最大特征值,并檢驗該層次的一致性. 經(jīng)驗證,均滿足一致性要求. 并得到三個方案的權(quán)矩陣:
(5)
圖2 監(jiān)測層次設(shè)計圖Fig.2 Monitoring level design
總層次權(quán)矩陣W為:W=wthree·w=(0.22 0.42 0.36)T, 可得方案二的權(quán)重值最大,應(yīng)選擇含車載報警裝置并利用第三方數(shù)據(jù)平臺,自主開發(fā)應(yīng)用. 通過系統(tǒng)總體結(jié)構(gòu)的設(shè)計,監(jiān)測層次分為三級. 如圖2所示,第一級普通層是傳統(tǒng)的聲光報警,發(fā)生危險時提醒車周圍的人員進行施救. 第二級平臺層是通過API接口連接OneNet平臺,形成專用的服務(wù)平臺,提供個性化的監(jiān)測報警服務(wù). 同時可進一步擴展,當(dāng)用戶規(guī)模擴大后,通過第三方專門管理數(shù)據(jù)、監(jiān)測報警,提供商業(yè)化定制服務(wù). 第三級移動層,車主及有關(guān)人員可通過終端APP查詢數(shù)據(jù)、接收警報信息,同時可使用服務(wù)平臺提供的個性化服務(wù). 從而實現(xiàn)多層次的監(jiān)測報警.
根據(jù)監(jiān)測層次的設(shè)計[4, 6],本系統(tǒng)軟件由車載裝置(普通層)、平臺層、移動層及其通訊部分組成. 其中硬件部分的組成包含如下: 1) 開發(fā)平臺: Arduino Uno R3; 2) 傳感器: DHT11溫濕度傳感器、Grove-Gas Sensor(O2)、HC-SR501熱釋電人體紅外傳感器、Base Shield V2 Grove傳感器擴展板; 3) 通信及顯示模塊: SIM900A、LCD1602、PCF8574IIC/I2C轉(zhuǎn)換模塊、LED等.
裝置首先進行波特率、ArduinoI/O端口及執(zhí)行器的初始化. 熱釋電傳感器檢測到車內(nèi)有人后,會輸入高電平“1”,退出檢測循環(huán),繼續(xù)執(zhí)行. 獲取到氧濃度、溫濕度數(shù)據(jù)后,經(jīng)過模數(shù)轉(zhuǎn)換,將數(shù)據(jù)顯示在LCD顯示器上. 同時,判斷各檢測指標(biāo)是否超過設(shè)定的閾值,如超出則接通車載報警. 用GPRS通訊方式,進行車載裝置與平臺的連接. 在完成車載系統(tǒng)初始化后,需要對GPRS網(wǎng)絡(luò)進行附著和參數(shù)設(shè)置.
完成數(shù)據(jù)采集、處理及GPRS附著后,通過平臺支持的RestFul API方式進行車載裝置與平臺的連接,該框架僅支持Http的POST方法. 根據(jù)json格式[7],車內(nèi)采集到的氧濃度、溫濕度參數(shù),應(yīng)分為三條數(shù)據(jù)流與三個數(shù)據(jù)點,在子函數(shù)中,應(yīng)將輸入的參數(shù)包裝成json格式,其形式如下:
sprintf(blank, "{"datastreams":[{"id":"%s", "datapoints":
[{"va lue":%s}]}]}", data_name, data_value);
其中: data_name為數(shù)據(jù)流名稱(氧濃度、溫濕度),data_value為實測數(shù)據(jù). 并撰寫POST報文,完成對發(fā)送主體的編寫,形式如下:
strcat(buffer, "POST /devices/");
strcat(buffer, *device_id*);
strcat(buffer, "/datapoints HTTP/1.1rn");
strcat(buffer, "api-key:");
strcat(buffer, *API_KEY*);
strcat(buffer, "rn");
strcat(buffer, "Host:");
strcat(buffer, *Server*);
strcat(buffer, "rn");
sprintf(tmp, "Content-Length:%drnrn", strlen (text));
strcat(buffer, tmp);
strcat(buffer, blank);
Serial.write(buffer);
構(gòu)建完成json格式的數(shù)據(jù)流和POST報文,利用終端設(shè)備與PC應(yīng)用之間的連接與通信的指令,即AT指令中的CIPSTART、CIPSEND、CIPCLOSE與主體編寫的指令共同發(fā)送子函數(shù),實現(xiàn)與平臺服務(wù)器的連接與數(shù)據(jù)發(fā)送. 經(jīng)過調(diào)試,成功實現(xiàn)網(wǎng)絡(luò)附著、與服務(wù)器平臺的連接與數(shù)據(jù)發(fā)送.
2.3.1 應(yīng)用層的數(shù)據(jù)獲取
為實現(xiàn)應(yīng)用層遠距離監(jiān)測、控制車載裝置的目的,APP需要借助網(wǎng)絡(luò)通訊,從平臺獲取車載設(shè)備發(fā)送至服務(wù)器的數(shù)據(jù)信息. 通過Http協(xié)議的GET方式,獲取服務(wù)器中以Json格式上傳、存儲的數(shù)據(jù). 根據(jù)標(biāo)準(zhǔn)接口.net,編寫URL請求如下,實現(xiàn)網(wǎng)絡(luò)連接.
URLurl = new URL(*website*+" /devices/" + *DeviceID* +"/datastreams/" + *command*);
HttpURLConnection link = (HttpURLConnection) url.openConnection();
link.setRequestMethod("GET");
link.setRequestProperty("api-key", *ApiKey*);
為獲取氧濃度、溫濕度數(shù)據(jù)信息,編寫了Togetvalue子函數(shù)加以實現(xiàn). 程序中output變量是從服務(wù)器中獲取到的Json格式的返回信息,由于包含無用信息,無法直接利用進行數(shù)據(jù)處理. 定義Json對象為datablock,通過分析返回信息,發(fā)現(xiàn)所需要的數(shù)據(jù)流信息包含在第一層“data”中,而具體數(shù)值信息包含在“data”層的下一層,即第二層“current_value”中. 通過一層層的剝離分解,得到氧濃度、溫濕度數(shù)值. 完成子函數(shù)編寫后,APP在子線程中調(diào)用Togetvalue函數(shù),獲取新的環(huán)境參數(shù)數(shù)值,而在主線程中更新UI.
2.3.2 Webview實現(xiàn)應(yīng)用嵌入
除了獲取當(dāng)前的氧濃度、溫濕度信息外,APP應(yīng)提供歷史數(shù)據(jù)查詢、更人性化觀察等功能. 在平臺層完成功能、應(yīng)用的制作后,通過APP去獲取、嵌入這些應(yīng)用. 以間接訪問方式實現(xiàn)應(yīng)用的嵌入,方法是建立一個新的html文件,將平臺應(yīng)用代碼嵌入到該html文件mypage中.
2.3.3 APP框架
APP界面的整體布局采用底部導(dǎo)航欄加主體顯示界面的框架結(jié)構(gòu),底部導(dǎo)航欄由三個部分組成,分別為數(shù)據(jù)、詳細和關(guān)于. 數(shù)據(jù)一欄的主界面中主要是由溫度、濕度及氧氣濃度三個數(shù)據(jù)構(gòu)成,詳細欄通過圖表形式實時監(jiān)測數(shù)據(jù)變化,關(guān)于一欄主要顯示制作人員等其他信息.
圖3 應(yīng)用布局程序流程圖Fig.3 Application layout flowchart
底部導(dǎo)航欄通過Fragment來實現(xiàn),首先定義APP主體布局文件,外層分別設(shè)置一個FrameLayout和一個LinearLayout, 在線性布局下層分別用三個RelativeLayout放組件,再下一層,用一個小的LinearLayout,里面分別放置ImageView和TextView,并通過修改布局參數(shù)使之上下排列.
第二步需要寫三個Fragment的布局文件,根據(jù)導(dǎo)航欄上三個不同的部分分別寫具體需要的布局. 數(shù)據(jù)欄Fragment布局寫一個LinearLayout,內(nèi)部三個TextView分別用來顯示溫度、氧濃度和濕度三個數(shù)據(jù),此外還需要一個用來承擔(dān)刷新作用的Button來刷新數(shù)據(jù). 詳細欄的圖表通過WebView功能來實現(xiàn),同樣需要先在詳細欄的Fragment布局下寫一個LinearLayout,內(nèi)層寫一個WebView和Button.
布局完成后就需要來寫Fragment的實現(xiàn)類,分別創(chuàng)建三個格式為java的類文件,其主體文件為下圖程序,由于數(shù)據(jù)欄與詳細欄分別用到了數(shù)據(jù)獲取和WebView功能,具體的實現(xiàn)方法流程圖如圖3所示. 圖3程序為關(guān)于一欄的實現(xiàn)類,其實現(xiàn)方法就是讓自定義的Fragment繼承Fragment來重寫onCreateView(),用View view = inflater. Inflate (R.layout.fg3, container, false); 來加載fg3(即關(guān)于一欄的布局文件).
最后需要編寫MainActivity即主程序來實現(xiàn)整個程序的運行,主程序的邏輯需要實現(xiàn): 點擊底部導(dǎo)航欄,其中導(dǎo)航欄內(nèi)圖片以及文字的切換,顯示對應(yīng)的Fragment通過點擊完成; 前面選中的狀態(tài)重置、導(dǎo)航欄內(nèi)圖片以及文字切換.
在搭載完所有模塊并分模塊測試完成后,進行了系統(tǒng)整體測試. 在網(wǎng)絡(luò)附著成功并檢測到有人存在后,各個傳感器采集所需環(huán)境信息,并將其顯示到LCD顯示屏上. 系統(tǒng)經(jīng)過邏輯判斷,對比各參數(shù)與閾值范圍后,針對正常、氧濃度不足、溫度過低過高等不同的環(huán)境情況,LED燈組顯示不同的顏色,加裝蜂鳴器能起到提醒周圍人員的作用. 系統(tǒng)同時在每一次程序循環(huán)中發(fā)送環(huán)境信息至服務(wù)器平臺.
服務(wù)器平臺可以穩(wěn)定地接收到車載裝置發(fā)送的環(huán)境信息,如圖4所示. 平臺層可以進行大量數(shù)據(jù)處理、存儲的工作,并與設(shè)計的應(yīng)用層對接,提供數(shù)據(jù)與相關(guān)應(yīng)用. 平臺層作為中轉(zhuǎn)站,可以擴展成為第三方監(jiān)測中心,提供個性化服務(wù). 移動終端APP可收到監(jiān)測報警信息,隨時更新數(shù)據(jù),并使用應(yīng)用查詢歷史數(shù)據(jù)與圖標(biāo)觀察,如圖5所示.
圖4 平臺層歷史數(shù)據(jù)圖Fig.4 Historical data figure of platform layer
圖5 移動終端APP界面 Fig.5 Mobile terminal APP interface
基于車載監(jiān)測報警的客觀需求,結(jié)合物聯(lián)網(wǎng)技術(shù),系統(tǒng)通過車載裝置、服務(wù)器平臺和移動終端APP實現(xiàn)了多層次的監(jiān)測報警,避免了對載體車輛、周圍環(huán)境的影響,增加了監(jiān)測報警的針對性,克服了傳統(tǒng)車載報警裝置的局限性. 同時,服務(wù)器平臺與APP可進一步擴展,形成專門管理、處理數(shù)據(jù)的第三方機構(gòu),為車主提供個性化的定制服務(wù).