湯春球,鄧飛宇,曾豪杰
(武漢理工大學(xué) 機(jī)電工程學(xué)院,湖北 武漢 430070)
在互聯(lián)網(wǎng)技術(shù)不斷更新進(jìn)步,大數(shù)據(jù)、云計(jì)算等技術(shù)飛速發(fā)展的背景下,車(chē)聯(lián)網(wǎng)技術(shù)[1]由“萬(wàn)物互聯(lián)”的概念中衍生而來(lái)。作為實(shí)現(xiàn)車(chē)聯(lián)網(wǎng)技術(shù)的關(guān)鍵一環(huán),車(chē)輛狀態(tài)的遠(yuǎn)程監(jiān)測(cè)日益興起。Zaldivar較早地將Android智能手機(jī)用于車(chē)輛狀態(tài)監(jiān)測(cè)[2],從而驗(yàn)證了Android手機(jī)用于車(chē)輛狀態(tài)監(jiān)測(cè)的可行性。目前市面上已存在基于OBD(on-board diagnostics)系統(tǒng)的手機(jī)APP,但大多數(shù)都只能利用手機(jī)藍(lán)牙,通過(guò)OBD系統(tǒng)讀取車(chē)輛的基本信息并在移動(dòng)端顯示,并沒(méi)有實(shí)現(xiàn)車(chē)輛的遠(yuǎn)程監(jiān)測(cè),并且對(duì)于數(shù)據(jù)的處理較淺。
筆者設(shè)計(jì)了一種基于Android的車(chē)輛狀態(tài)監(jiān)測(cè)系統(tǒng),結(jié)合OBD系統(tǒng)、藍(lán)牙通信、無(wú)線網(wǎng)絡(luò)等技術(shù),實(shí)現(xiàn)了對(duì)車(chē)輛的遠(yuǎn)程監(jiān)測(cè),同時(shí)利用服務(wù)器中存儲(chǔ)的數(shù)據(jù)對(duì)車(chē)輛油耗、駕駛員駕駛行為作出分析和評(píng)估,對(duì)車(chē)聯(lián)網(wǎng)技術(shù)的發(fā)展有著積極意義。
筆者所設(shè)計(jì)的監(jiān)測(cè)系統(tǒng)由車(chē)、ELM327、Android移動(dòng)客戶(hù)端、遠(yuǎn)端服務(wù)器、Web前端5個(gè)部分構(gòu)成,整體結(jié)構(gòu)如圖1所示。
ELM327藍(lán)牙適配器通過(guò)汽車(chē)上的16針OBD接口安裝在汽車(chē)上,Android移動(dòng)客戶(hù)端(即Android智能手機(jī))通過(guò)藍(lán)牙與ELM327建立連接,進(jìn)而以ELM327作為橋梁與車(chē)輛OBDⅡ進(jìn)行交互。Android客戶(hù)端通過(guò)發(fā)送不同的指令來(lái)獲取車(chē)輛ECU(electronic control unit)中儲(chǔ)存的車(chē)輛狀態(tài)信息,如發(fā)動(dòng)機(jī)轉(zhuǎn)速、車(chē)速、空氣流量、節(jié)氣門(mén)位置及DTC(diagnostic trouble code)故障碼等信息??蛻?hù)端APP會(huì)結(jié)合手機(jī)自身的GPS(global positioning system)、陀螺儀等傳感器對(duì)獲取到的數(shù)據(jù)進(jìn)行相應(yīng)的處理和分析,繼而將車(chē)輛的實(shí)時(shí)狀態(tài)信息通過(guò)可視化界面展示給駕駛員;同時(shí),客戶(hù)端APP會(huì)通過(guò)無(wú)線網(wǎng)絡(luò)以HTTP請(qǐng)求的方式與遠(yuǎn)端服務(wù)器進(jìn)行數(shù)據(jù)交互,以完成數(shù)據(jù)上傳、查詢(xún)歷史軌跡等操作。服務(wù)器布置在云端,它作為數(shù)據(jù)的處理和存儲(chǔ)中心,同時(shí)服務(wù)于Android客戶(hù)端和Web客戶(hù)端(瀏覽器)。遠(yuǎn)程人員可以通過(guò)Web瀏覽器與服務(wù)器進(jìn)行交互,從而查詢(xún)車(chē)輛的實(shí)時(shí)狀態(tài)信息,進(jìn)而完成對(duì)車(chē)輛的實(shí)時(shí)監(jiān)測(cè)。
OBD是目前絕大多數(shù)汽車(chē)都配備的車(chē)載診斷系統(tǒng),當(dāng)前最新的標(biāo)準(zhǔn)為OBD-Ⅱ標(biāo)準(zhǔn)[3],該標(biāo)準(zhǔn)具有統(tǒng)一的16針接口,以及統(tǒng)一的診斷指令。
目前,支持OBD-Ⅱ標(biāo)準(zhǔn)的通信協(xié)議有很多,由于采用的標(biāo)準(zhǔn)是相同的,因此對(duì)于用戶(hù)而言無(wú)論是數(shù)據(jù)的傳輸模式還是診斷模式都是通用的。OBD-Ⅱ系統(tǒng)的診斷模式有9種,如表1所示,其中最常用的就是模式1和模式3。
表1 OBD-Ⅱ系統(tǒng)的診斷模式
在診斷模式中,診斷指令由模式編號(hào)和PID(parameter identification)組成,模式編號(hào)為01到09,分別對(duì)應(yīng)9種診斷模式,而PID在不同的模式下會(huì)有不同的定義,以模式1為例,其部分常見(jiàn)PID如表2所示。若要獲取車(chē)輛發(fā)動(dòng)機(jī)轉(zhuǎn)速,則發(fā)送“010C”指令給ELM327藍(lán)牙適配器即可,其中“01”代表診斷模式為模式1,“0C”代表PID。ELM327藍(lán)牙適配器接收到“010C”指令后會(huì)與車(chē)輛CAN網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互,進(jìn)而將響應(yīng)數(shù)據(jù)返回給Android客戶(hù)端,以“010C”指令為例,返回的數(shù)據(jù)格式為“410CXXXX”,其中“410C”表示為“010C”請(qǐng)求下的返回?cái)?shù)據(jù),后兩個(gè)字節(jié)“XXXX”為發(fā)動(dòng)機(jī)轉(zhuǎn)速的十六進(jìn)制表示值,按照公式解析后便可得到車(chē)輛的發(fā)動(dòng)機(jī)轉(zhuǎn)速值。
表2 模式1下部分常見(jiàn)PID及其解析公式
在OBD-Ⅱ系統(tǒng)中,模式3主要用來(lái)請(qǐng)求排放相關(guān)的動(dòng)力系統(tǒng)診斷故障碼(DTC),用戶(hù)可以利用故障碼對(duì)車(chē)輛故障進(jìn)行診斷。一般情況下,用戶(hù)會(huì)先發(fā)送“0101”指令來(lái)獲取車(chē)輛故障碼的個(gè)數(shù),若故障碼個(gè)數(shù)大于0,則發(fā)送“03”指令來(lái)獲取故障碼值。
故障碼由5個(gè)字符組成,其中前兩位是一個(gè)字母和一個(gè)數(shù)字的組合符,后3位是數(shù)字。字母數(shù)字組合為B0-B3、C0-C3、P0-P3、U0-U3,分別對(duì)應(yīng)車(chē)身、底盤(pán)、動(dòng)力系統(tǒng)和網(wǎng)絡(luò)通信。每個(gè)故障碼對(duì)應(yīng)一個(gè)車(chē)輛的故障,如“P0131”表示O2傳感器電路電壓低。
獲取OBD數(shù)據(jù),首先要建立Android客戶(hù)端與ELM327藍(lán)牙適配器之間的藍(lán)牙連接。Android SDK中對(duì)開(kāi)發(fā)者提供有操作藍(lán)牙設(shè)備的API,開(kāi)發(fā)者只需要調(diào)用相應(yīng)API便可操作本機(jī)的藍(lán)牙設(shè)備[4]。本系統(tǒng)采用經(jīng)典藍(lán)牙,Android端作為客戶(hù)端,使用ELM327(服務(wù)端)的MAC地址發(fā)起連接,從而獲得BluetoothSocket套接字,進(jìn)而與OBD系統(tǒng)進(jìn)行藍(lán)牙數(shù)據(jù)交互。
數(shù)據(jù)獲取的流程如下:①移動(dòng)端發(fā)送AT指令,初始化設(shè)置ELM327[5];②發(fā)送OBD指令,查詢(xún)車(chē)輛OBD系統(tǒng)所支持的PID;③根據(jù)第二步的PID,發(fā)送對(duì)應(yīng)的OBD指令,從而獲取OBD數(shù)據(jù);④移動(dòng)端將數(shù)據(jù)按標(biāo)準(zhǔn)協(xié)議解析處理,之后通過(guò)HTTP請(qǐng)求的方式打包上傳至服務(wù)器,并存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中。
本系統(tǒng)的核心就在于,采集車(chē)輛OBD數(shù)據(jù),并通過(guò)Android移動(dòng)端、服務(wù)器、Web前端、數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行處理,以此實(shí)現(xiàn)系統(tǒng)的功能。
Android移動(dòng)端將獲取到的OBD數(shù)據(jù)在本地按照標(biāo)準(zhǔn)協(xié)議進(jìn)行解析,并將處理過(guò)的數(shù)據(jù)打包上傳至服務(wù)器。同時(shí)移動(dòng)端會(huì)利用EventBus[6]事件發(fā)布/訂閱框架,將解析后的數(shù)據(jù)從子線程傳遞給UI主線程進(jìn)行UI顯示,將引擎負(fù)荷、冷卻液溫度、燃油壓力、發(fā)動(dòng)機(jī)轉(zhuǎn)速等動(dòng)力系統(tǒng)數(shù)據(jù)展示給車(chē)主,供其參考。除此之外,Web前端以移動(dòng)端上傳至服務(wù)器數(shù)據(jù)庫(kù)中的實(shí)時(shí)數(shù)據(jù)為基礎(chǔ),將車(chē)輛當(dāng)前的行駛狀態(tài)以網(wǎng)頁(yè)的形式展示給遠(yuǎn)端人員,以供其對(duì)車(chē)輛進(jìn)行遠(yuǎn)程監(jiān)測(cè)和管理。
系統(tǒng)對(duì)某些OBD數(shù)據(jù)設(shè)置閾值,以此對(duì)駕駛員的不規(guī)范駕駛或車(chē)輛異常狀態(tài)做出預(yù)警提示。如將冷卻液溫度的閾值設(shè)置為100 ℃,若超過(guò)閾值,則系統(tǒng)會(huì)給出“冷卻液溫度過(guò)高”的預(yù)警提示;將發(fā)動(dòng)機(jī)運(yùn)行時(shí)間的閾值設(shè)置為4小時(shí),若超過(guò)閾值,則系統(tǒng)會(huì)給出“疲勞駕駛”的預(yù)警提示。除此之外,系統(tǒng)Web前端會(huì)利用Echarts[7]繪制發(fā)動(dòng)機(jī)轉(zhuǎn)速、車(chē)速等數(shù)據(jù)的變化曲線圖,用以監(jiān)測(cè)車(chē)輛狀態(tài)的變化情況。
系統(tǒng)讀取儲(chǔ)存在車(chē)輛ECU中的故障碼,并利用自定義的TroubleCodes類(lèi)來(lái)定位故障碼所對(duì)應(yīng)的故障原因,提高車(chē)主或維修人員的維修效率。除此之外,維修完畢后,可通過(guò)移動(dòng)端發(fā)送“04”指令來(lái)消除車(chē)輛的故障碼和熄滅故障指示燈。
車(chē)輛的瞬時(shí)油耗可以通過(guò)OBD指令“015E”直接獲取,然而并不是所有的汽車(chē)都支持PID“5E”,若不支持則需要利用已知的數(shù)據(jù)進(jìn)行計(jì)算得到瞬時(shí)油耗。首先要獲取車(chē)速(簡(jiǎn)寫(xiě)V,PID為0D,單位為km/h)和進(jìn)氣空氣流量(簡(jiǎn)寫(xiě)MAF,PID為10,單位為g/s),計(jì)算過(guò)程如下:
(1)計(jì)算單位時(shí)間內(nèi)發(fā)動(dòng)機(jī)所耗燃油質(zhì)量FCPS(fuel consumptionper second):
FCPS=MAF/AF
(1)
(2)計(jì)算發(fā)動(dòng)機(jī)的燃油消耗率EFR(engine fuel rate):
EFR=(FCPS×3 600)/(ρ×1 000)=
(MAF×3.6)/(AF×ρ)
(2)
(3)計(jì)算發(fā)動(dòng)機(jī)百公里油耗FCPHK(fuel consumptionper hundred kilometers):
FCPHK=(EFR×100)/V=
(MAF×360)/(AF×V×ρ)
(3)
式中:AF為空燃比,在理想狀態(tài)下,每燃燒一克燃油需要14.7克的空氣;ρ為汽油密度,通常為0.70-0.78 g/cm3。
發(fā)動(dòng)機(jī)萬(wàn)有特性曲線是具有多參數(shù)的特性曲線[8],其橫坐標(biāo)為發(fā)動(dòng)機(jī)轉(zhuǎn)速,縱坐標(biāo)為扭矩或平均有效壓力,圖中畫(huà)出許多等油耗率曲線和等功率曲線,可以直觀地反映出車(chē)輛的經(jīng)濟(jì)性隨發(fā)動(dòng)機(jī)轉(zhuǎn)速和負(fù)荷的變化關(guān)系,其中油耗率最小的等油耗率曲線區(qū)域稱(chēng)為經(jīng)濟(jì)區(qū)。在萬(wàn)有特性曲線中,點(diǎn)越高,對(duì)應(yīng)的發(fā)動(dòng)機(jī)負(fù)荷率越大,而在一般情況下,發(fā)動(dòng)機(jī)的負(fù)荷率越小,油耗就越高。這是因?yàn)槠蜋C(jī)的負(fù)荷是由節(jié)氣門(mén)來(lái)調(diào)節(jié)的,節(jié)氣門(mén)開(kāi)啟度越小,活塞下拉時(shí)所要克服外界大氣壓力做的功就越多,這會(huì)大大消耗能量,因此油耗便會(huì)上升?;谏鲜鋈f(wàn)有特性的特點(diǎn),系統(tǒng)可以將獲取的OBD數(shù)據(jù)中的發(fā)動(dòng)機(jī)實(shí)時(shí)轉(zhuǎn)速、節(jié)氣門(mén)位置、引擎負(fù)荷,與萬(wàn)有特性曲線中的經(jīng)濟(jì)區(qū)的工作轉(zhuǎn)速和扭矩進(jìn)行對(duì)比,引導(dǎo)駕駛員在條件(包括外界路況、駕駛技術(shù)等條件)允許的情況下,盡可能將車(chē)輛發(fā)動(dòng)機(jī)的工作狀態(tài)控制在經(jīng)濟(jì)區(qū)的范圍內(nèi)。這樣不僅可以保證發(fā)動(dòng)機(jī)在一個(gè)良好的工作狀態(tài)下,以延長(zhǎng)發(fā)動(dòng)機(jī)的壽命,而且可以減少油耗,從而獲得更好的燃油經(jīng)濟(jì)性和汽車(chē)動(dòng)力性。
云端服務(wù)器的數(shù)據(jù)庫(kù)中存儲(chǔ)著大量的與車(chē)輛相關(guān)的歷史數(shù)據(jù),如OBD數(shù)據(jù)、車(chē)輛位置信息、Android移動(dòng)端的傳感器采集到的信息(如加速度)等狀態(tài)數(shù)據(jù)[9]。服務(wù)器可以選取某一車(chē)輛在某一時(shí)間段的狀態(tài)數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行處理分析,從而得到該車(chē)輛駕駛員的駕駛習(xí)慣,進(jìn)而對(duì)其進(jìn)行評(píng)估,以此輔助駕駛員在駕駛過(guò)程中保持良好的駕駛習(xí)慣。根據(jù)數(shù)據(jù)庫(kù)中已有數(shù)據(jù),可得到的駕駛習(xí)慣評(píng)估標(biāo)準(zhǔn)主要分為以下幾個(gè):
(1)急加速、急剎車(chē)。系統(tǒng)可以通過(guò)傳感器或計(jì)算速度變化率得到加速度來(lái)判斷駕駛員是否進(jìn)行了急加速或急剎車(chē)操作。設(shè)置加速度大于3 m/s2時(shí)為急加速操作,加速度小于-10 m/s2時(shí)為急剎車(chē)操作,系統(tǒng)可以分別統(tǒng)計(jì)某一時(shí)間段內(nèi)駕駛員進(jìn)行急加速操作和急剎車(chē)操作的次數(shù),并分別設(shè)置閾值。若急加速操作的次數(shù)超過(guò)閾值則說(shuō)明該駕駛員急加速操作的次數(shù)過(guò)多;若急剎車(chē)操作的次數(shù)超過(guò)閾值則說(shuō)明該駕駛員急剎車(chē)操作的次數(shù)過(guò)多。頻繁的急加速操作,不僅會(huì)加劇發(fā)動(dòng)機(jī)內(nèi)部零件的磨損,而且會(huì)影響車(chē)輛行駛的穩(wěn)定性,同時(shí)會(huì)加大燃油的消耗;頻繁的急剎車(chē)操作,不僅會(huì)對(duì)剎車(chē)裝置造成損害,以致其壽命降低,而且會(huì)加劇輪胎的磨損,同時(shí)會(huì)給車(chē)上人員帶來(lái)極差的體驗(yàn)。因此,無(wú)論是急加速,還是急剎車(chē),都是不良的駕駛習(xí)慣。
(2)加速踏板位置變化。Android移動(dòng)端可以通過(guò)OBD系統(tǒng)直接采集到車(chē)輛的加速踏板位置信息(PID為49),若OBD系統(tǒng)不支持PID“49”,也可以通過(guò)獲取絕對(duì)節(jié)氣門(mén)位置(PID為11)來(lái)間接反應(yīng)加速踏板位置。通過(guò)計(jì)算某一時(shí)間段內(nèi)加速踏板位置的平均變化幅度來(lái)判斷該時(shí)間段內(nèi)車(chē)輛加速踏板位置變化的大小。對(duì)平均變化幅度設(shè)置閾值為10%,若超過(guò)閾值,則說(shuō)明加速踏板位置變化大,反映出駕駛員不能很好地控制加速踏板、平穩(wěn)給油,從而影響到車(chē)輛行駛的平穩(wěn)性,是一種不良的駕駛習(xí)慣。
(3)油耗控制。系統(tǒng)可以獲取到某一時(shí)間段內(nèi)從OBD系統(tǒng)采集到的發(fā)動(dòng)機(jī)轉(zhuǎn)速信息,結(jié)合發(fā)動(dòng)機(jī)的萬(wàn)有特性曲線,統(tǒng)計(jì)車(chē)輛的發(fā)動(dòng)機(jī)轉(zhuǎn)速處在經(jīng)濟(jì)區(qū)轉(zhuǎn)速區(qū)間的時(shí)長(zhǎng),并計(jì)算其與該時(shí)間段總時(shí)長(zhǎng)的時(shí)間占比。對(duì)時(shí)間占比設(shè)置閾值,若小于閾值,則說(shuō)明駕駛員在駕駛汽車(chē)的過(guò)程中,并不能很好地將汽車(chē)的行駛狀態(tài)控制在經(jīng)濟(jì)區(qū)范圍內(nèi),這樣會(huì)增加燃油消耗和尾氣排放量,是一種不良的駕駛習(xí)慣。
(4)疲勞駕駛時(shí)間。根據(jù)《中華人民共和國(guó)道路交通安全法實(shí)施條例》規(guī)定,連續(xù)駕車(chē)超過(guò)4 h,即為疲勞駕駛。疲勞駕駛會(huì)嚴(yán)重影響駕駛員對(duì)車(chē)輛的控制,是造成交通事故的主要原因之一。系統(tǒng)會(huì)根據(jù)從OBD系統(tǒng)采集到的發(fā)動(dòng)機(jī)運(yùn)行時(shí)間來(lái)判斷駕駛員是否疲勞駕駛及疲勞駕駛的時(shí)間,以此來(lái)評(píng)估駕駛員是否規(guī)范駕駛。
(5)故障駕駛距離。Android移動(dòng)端可以通過(guò)OBD系統(tǒng)直接采集到車(chē)輛在故障燈亮起后行駛的距離(PID為21),優(yōu)秀的駕駛員在車(chē)輛出現(xiàn)故障后,會(huì)盡可能早地處理,避免發(fā)生事故。因此可以通過(guò)車(chē)輛在故障燈亮起后行駛的距離,對(duì)駕駛員的駕駛習(xí)慣做出評(píng)估。
根據(jù)以上5個(gè)評(píng)估標(biāo)準(zhǔn),結(jié)合云端服務(wù)器中的大量數(shù)據(jù),對(duì)駕駛員的駕駛習(xí)慣做出評(píng)估,同時(shí)可以生成評(píng)估報(bào)告推送至用戶(hù)的Android移動(dòng)端,以供駕駛員逐步糾正不良的駕駛習(xí)慣。
用戶(hù)登錄移動(dòng)端APP并通過(guò)藍(lán)牙連接車(chē)輛后,可以在“參數(shù)”界面查看車(chē)輛當(dāng)前的狀態(tài)信息,如圖2所示。普通用戶(hù)可以查看“普通參數(shù)”中的數(shù)據(jù)了解所駕車(chē)輛的當(dāng)前狀態(tài)。如,通過(guò)油耗曲線中實(shí)際油耗曲線與理想油耗曲線的差距,判斷車(chē)輛當(dāng)前的油耗經(jīng)濟(jì)性;通過(guò)故障碼判斷車(chē)輛當(dāng)前存在的故障等。專(zhuān)業(yè)人員可以查看“專(zhuān)業(yè)參數(shù)”中的專(zhuān)業(yè)車(chē)輛狀態(tài)參數(shù),如引擎負(fù)荷、空氣傳感器流量、絕對(duì)節(jié)氣門(mén)位置等,對(duì)車(chē)輛狀態(tài)從專(zhuān)業(yè)角度進(jìn)行更為全面的了解。
圖2 移動(dòng)端“參數(shù)”界面
用戶(hù)可以從個(gè)人信息界面進(jìn)入駕駛習(xí)慣評(píng)估界面,Android客戶(hù)端會(huì)根據(jù)選擇的時(shí)間向服務(wù)器發(fā)送請(qǐng)求,并根據(jù)響應(yīng)生成評(píng)估報(bào)告,效果如圖3所示。
圖3 駕駛習(xí)慣評(píng)估實(shí)現(xiàn)效果
利用Android智能手機(jī)與車(chē)輛OBD系統(tǒng)進(jìn)行數(shù)據(jù)交互,并將數(shù)據(jù)通過(guò)無(wú)線網(wǎng)絡(luò)上傳至云端服務(wù)器中,以實(shí)現(xiàn)對(duì)車(chē)輛的遠(yuǎn)程監(jiān)測(cè)及故障診斷,實(shí)現(xiàn)了車(chē)-手機(jī)-電腦的一體化,同時(shí),結(jié)合萬(wàn)有特性對(duì)車(chē)輛的油耗進(jìn)行分析。以服務(wù)器數(shù)據(jù)庫(kù)中存儲(chǔ)的大量車(chē)輛狀態(tài)信息為基礎(chǔ),將數(shù)據(jù)進(jìn)行處理后,可按照一定的標(biāo)準(zhǔn)對(duì)駕駛員的駕駛習(xí)慣進(jìn)行評(píng)估。