(廣東交通職業(yè)技術(shù)學(xué)院,廣東 廣州 510650)
與其他的公用自行車相比,“無樁”理念的共享單車隨時取用和停車的方式給市民帶來了極大便利。但由于沒有固定的取車、還車地點(diǎn),用戶使用完之后可以隨意停放,隨著車輛規(guī)模的擴(kuò)大,用戶不按規(guī)則騎行、隨意亂停放等不良行為給城市管理帶來了很多問題。而政府部門目前只有相關(guān)行政手段進(jìn)行管理,例如深圳市在2017年發(fā)布的《深圳市自行車停放區(qū)(路側(cè)帶)設(shè)置指引(試行)》規(guī)定:自行車不適宜停放區(qū)域包括人行天橋及通道出入口、綠化帶、盲道、井蓋等區(qū)域。然而目前迫于管理人員缺乏以及缺少相關(guān)技術(shù)支撐,該類《指引》只能靠市民自覺程度去執(zhí)行,無法保證其得以有效實(shí)施?;诋?dāng)前政府部門迫切地需要對共享自行車進(jìn)行有效地統(tǒng)一規(guī)范管理,本文針對市民使用共享單車后亂停放的問題,將通過GPS技術(shù)實(shí)現(xiàn)對單車位置坐標(biāo)化,利用百度地圖開發(fā)平臺實(shí)現(xiàn)對地理位置的區(qū)域劃分,進(jìn)而用戶可以方便地設(shè)定自行車允許停放的區(qū)域,并通過自行車當(dāng)前經(jīng)緯度位置與停放區(qū)域的位置對比判定其是否在允許停車的區(qū)域內(nèi),從而在技術(shù)上限定了共享自行車只有在固定的區(qū)域內(nèi)才允許鎖車實(shí)現(xiàn)共享單車規(guī)范停放的問題。
本系統(tǒng)是一個基于百度地圖、單片機(jī)控制系統(tǒng)、GPRS無線數(shù)據(jù)通信模塊、車載GPS(GPS/北斗)定位以及中心監(jiān)控管理平臺于一體的多技術(shù)融合系統(tǒng)。中心監(jiān)控管理平臺基于Visual Studio開發(fā)軟件設(shè)計(jì),監(jiān)控界面調(diào)用百度電子地圖API進(jìn)行車輛實(shí)時位置的顯示,由服務(wù)器、數(shù)據(jù)庫等構(gòu)成,主要功能為監(jiān)控前自行車車輛信息的登記、車載位置信息的接收存儲、電子地圖區(qū)域?qū)Ρ忍幚硪约皵?shù)據(jù)庫的管理等功能;車載GPS主要負(fù)責(zé)車輛的位置信息、經(jīng)緯度數(shù)據(jù)等信息,通過單片機(jī)控制器將數(shù)據(jù)進(jìn)行處理后利用GPRS無線數(shù)據(jù)通信模塊將數(shù)據(jù)上傳至監(jiān)控平臺的服務(wù)器上,從而通過Visual Studio2015監(jiān)控平臺可以調(diào)用百度地圖直觀地看到車輛的實(shí)時位置狀態(tài)。并通過安裝在自行車內(nèi)部的車輛位置定位信息與監(jiān)控平臺中設(shè)置的允許停車區(qū)域坐標(biāo)相對比,如車輛自身位置在允許停車區(qū)域內(nèi)則允許該車輛鎖車停止使用,否則系統(tǒng)將禁止該自行車鎖車,如果用戶強(qiáng)行鎖車系統(tǒng)將發(fā)出報警信息并記錄該用戶不良行為,從而實(shí)現(xiàn)對已登記的自行車車輛進(jìn)行有效地管理。
圖1 系統(tǒng)結(jié)構(gòu)框圖
本方案中GPS定位系統(tǒng)采用BH-ATGM332D-5N-31模塊進(jìn)行設(shè)計(jì),ATGM332D是由中科微電子公司設(shè)計(jì)的 GPS+北斗雙模定位芯片。它具有快速搜索衛(wèi)星的能力以及精準(zhǔn)的定位效果,非常適合符合高性能、低功耗的應(yīng)用場合并可以通過串口方便簡單地向單片機(jī)系統(tǒng)和電腦輸出GPS和北斗定位信息。
BH-ATGM332D-5N-31芯片與外圍電路組成的定位系統(tǒng)硬件結(jié)構(gòu)如圖2所示。VCC管腳為電源線,正常電壓范圍為3.3~5 V,VBAT接有XH414法拉電容,參數(shù)為:3.3 V,0.07F。其功能與鋰電池一樣,當(dāng)主電源掉電時可以為定位模塊的RTC部分供電,使定位模塊在下次啟動時能夠快速地搜索到衛(wèi)星;IPX接口用于連接有源天線;PPS為時鐘脈沖信號線,模塊接受到GPS時間信息后,輸出可調(diào)節(jié)的脈沖信號,默認(rèn)為1 Hz,脈沖上升沿與UTC時間對齊;TXD1和RXD1為串口數(shù)據(jù)發(fā)送信號線,使用TTL電平[1]。
圖2 ATGM332D電路圖
無線通信系統(tǒng)需要穩(wěn)定的性能、功耗低、抗干擾能力強(qiáng)等特點(diǎn),而GPRS系統(tǒng)就能夠很好地滿足以上要求。在此選用SIMCOM基于MT6261芯片平臺設(shè)計(jì)的新一代GSM/GPRS工業(yè)模塊SIM800A。SIM800A是SMT封裝的雙頻GSM/GPRS模塊,其性能穩(wěn)定,外觀小巧,性價比高,能滿足客戶的多種需求。SIM800A工作頻率為GSM/GPRS 900/1800 MHz,能夠在極低的功耗下進(jìn)行語音、SMS和數(shù)據(jù)信息的傳輸。并且SIM800A尺寸較小,僅為24*24*3 mm,可以適用于各種緊湊型產(chǎn)品設(shè)計(jì)需求[2]。
SIM800A支持TTL電平標(biāo)準(zhǔn)的串口通訊標(biāo)準(zhǔn),可以非常方便地使用單片機(jī)系統(tǒng)進(jìn)行控制。單片機(jī)系統(tǒng)VCC、GND、串口RXD、TXD引腳分別與SIM800A模塊的SIM900A_VCC、SIM900A_GND、SIM900A_TXD、SIM900A_RXD引腳相連,即可通過單片機(jī)系統(tǒng)向模塊通過串口發(fā)送AT控制指令。
該系統(tǒng)中應(yīng)用于共享單車平臺,故必然要求其工作電源長期保持有效狀態(tài),傳統(tǒng)的鋰電池隨工作時間長但也會有電量用完的一刻,因此該系統(tǒng)中亦注重電池的長期工作有效性。在此,選用凹凸科技(中國)有限公司研發(fā)的OZ1C105C高性能充電管理芯片作本系統(tǒng)的鋰電池進(jìn)行充電管理。OZ1C105C其內(nèi)部構(gòu)架復(fù)用,具有高效率、精度高、瞬態(tài)響應(yīng)快等特點(diǎn),可實(shí)現(xiàn)最高3 A的充電電流,并能夠提供5~16 V的寬電壓。太陽能板模式下支持在各種天氣環(huán)境:陰天、雨天、弱光、強(qiáng)光等極端條件下的充電,正常環(huán)境下可支持達(dá)到十幾毫安至700毫安的充電。同時支持適配器2A左右下的充電,從而在共享單車生產(chǎn)出廠或者是維修時能夠快速地給鋰電池充滿電能。
圖3 ATGM332D電路圖
系統(tǒng)主程序主要是單片機(jī)控制器對程序進(jìn)行I/O初始化處理、串口初始化、車輛地理位置經(jīng)緯度上傳等,數(shù)據(jù)初始化之后對GPRS模塊進(jìn)行信息查詢,若查詢失敗則一直查詢直至成功。單片機(jī)還對車載GPS模塊進(jìn)行檢測,當(dāng)檢測到GPGGA幀頭時單片機(jī)開始接收GPS數(shù)據(jù),其中接收到的數(shù)據(jù)通過單片機(jī)分離出來后將形成車輛的經(jīng)度、緯度、時間和高度等信息。單片機(jī)再將分離出的信息通過GPRS模塊傳輸至監(jiān)控管理平臺,其中位置信息將與平臺劃定的停車坐標(biāo)向?qū)Ρ?,以確定是否允許停車,程序流程如4所示。
圖4 主程序工作流程圖
BH-ATGM332D模塊默認(rèn)采用NMEA-01834.0 協(xié)議,通過TTL串口輸出定位數(shù)據(jù)信息。NMEA 是美國國家海洋電子協(xié)會(National Marine Electronics Association )為海用電子設(shè)備制定的標(biāo)準(zhǔn)格式。其為一套定義接收機(jī)輸出的標(biāo)準(zhǔn)信息,有幾種不同的格式,每種都是獨(dú)立相關(guān)的ASCII 格式,使用逗號隔開數(shù)據(jù),數(shù)據(jù)流長度從30-100 字符不等,通常以每秒間隔選擇輸出,最常用的格式為"GGA",它包含了定位時間,緯度,經(jīng)度,高度,定位所用的衛(wèi)星數(shù),DOP 值,差分狀態(tài)和校正時段等,其他的有速度,跟蹤,日期等[3]。
單片機(jī)系統(tǒng)通過串口與BH-ATGM332D 模塊通訊,通過USART 串口獲取GPS 模塊輸出的原始信息,并把解碼結(jié)果使用USART1 輸出。在控制器在處理數(shù)據(jù)的同時,串口會源源不斷地接收GPS 數(shù)據(jù),需要協(xié)調(diào)好接收數(shù)據(jù)和解碼數(shù)據(jù)的關(guān)系,使用DMA 串口緩沖區(qū)解決。當(dāng)因坐標(biāo)系不一致產(chǎn)生定位偏差時,需要調(diào)用“原始坐標(biāo)轉(zhuǎn)化為百度坐標(biāo)的”API,并輸入WGS-84坐標(biāo)系的經(jīng)緯度才能進(jìn)行坐標(biāo)糾錯[4]。其程序段如下:
var gpsPoint = new BMap.Point(Longitude, Latitude);//gps 坐標(biāo)糾偏
BMap.Convertor.translate(gpsPoint, 0, translateCallback); //真實(shí)經(jīng)緯度轉(zhuǎn)成百度坐標(biāo)
本系統(tǒng)MCU除了需要接收處理GPS數(shù)據(jù)的同時還需要將位置信息通過GPRS發(fā)送至上位機(jī)系統(tǒng)中,因此MCU需要選用具有雙全公串口且有較大的數(shù)據(jù)存儲器來緩存GPS數(shù)據(jù),在此選用STM32系列單片機(jī)作為控制器。WF-SIM800A支持TTL電平標(biāo)準(zhǔn)的串口通訊標(biāo)準(zhǔn),非常方便使用STM32單片機(jī)系統(tǒng)來控制。
主程序通過對串口讀中斷服務(wù)和寫操作,實(shí)現(xiàn)對模塊的控制;對串口讀中斷服務(wù)實(shí)現(xiàn)定位信息的提取,主程序首先初始化串口和定時器,實(shí)現(xiàn)對GPS和GPRS模塊的控制。系統(tǒng)啟動后SIM800A進(jìn)行網(wǎng)絡(luò)注冊及連接GPRS,并發(fā)送測試信息確保連接GPRS網(wǎng)絡(luò)。GPS模塊上電工作后首先處于冷啟動階段,在此階段進(jìn)行搜星、下載星歷等過程(BH-ATGM332D冷啟時間≤32 s),此時輸出的定位信息是無效的。冷啟完成后進(jìn)行TCP連接,將經(jīng)、緯度數(shù)據(jù)信息發(fā)送到網(wǎng)絡(luò)中心服務(wù)器。
監(jiān)控平臺基于Visual Studio2015平臺進(jìn)行開發(fā),Visual Studio2015是目前最流行的Windows平臺應(yīng)用程序的集成開發(fā)環(huán)境,它是由微軟集團(tuán)推出的開發(fā)工具,可以利用通用的代碼庫在 Win/Mac/Linux 大操作系統(tǒng)上快速開發(fā)自己的應(yīng)用軟件。本項(xiàng)目中使用C#語言編程,快速可視化搭建監(jiān)控平臺,建立C/S程序框架,監(jiān)控中心即為服務(wù)器,同時可以作為PC客戶端可視化監(jiān)控?cái)?shù)據(jù),使用C#提供的Socket接口,通過GPRS與單片機(jī)系統(tǒng)客戶端進(jìn)行實(shí)時通訊;PC客戶端主要使用了button、textbox、panel、treeview、label、timer、checkbox、dataset等相關(guān)控件[5]。
圖5 監(jiān)控系統(tǒng)登陸界面
監(jiān)控管理平臺顯示界面調(diào)用百度地圖顯示車輛位置信息,在次使用百度地圖JavaScript API進(jìn)行設(shè)計(jì)。百度地圖JavaScript API是一套由Java Script語言編寫的應(yīng)用程序接口,可在瀏覽器網(wǎng)站中構(gòu)建功能豐富、交互性強(qiáng)的地圖應(yīng)用,免費(fèi)對外開放,接口無使用次數(shù)限制,但使用時需申請一個密匙(ak)才可使用[6]。
由于虛擬電子圍欄可隨意劃定,其形狀具有不規(guī)則性,因此需采用百度地圖API來實(shí)現(xiàn)不規(guī)則多邊形地理圍欄,可使用百度API中的GeoUtils庫來實(shí)現(xiàn)。GeoUtils庫除了能夠用于地理圍欄設(shè)置之外還可以用于測距、求面積等用途[7]。在此監(jiān)控人員可以在Visual Studio2015監(jiān)控平臺使用鼠標(biāo)任意勾畫出允許停車區(qū)域(可以為不規(guī)則圖形),并定時獲取車載GPS經(jīng)緯度位置信息,如果車載位置不在勾畫出的多邊形區(qū)域內(nèi)則發(fā)出相應(yīng)的監(jiān)控警告信息,其中利用監(jiān)控平臺進(jìn)行任意區(qū)域的勾畫程序如下所示:
添加多邊形(地理圍欄)
var polygon = new BMap.Polygon([
new BMap.Point(113.359219,23.187118),
new BMap.Point(113.359003,23.187483),
new BMap.Point(113.358608,23.188364),
new BMap.Point(113.358374,23.189078),
new BMap.Point(113.357943,23.189859),
new BMap.Point(113.357943,23.190589),
new BMap.Point(113.358338,23.190838),
new BMap.Point(113.358841,23.190772),
new BMap.Point(113.359542,23.190589),
new BMap.Point(113.360351,23.190108),
], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});//創(chuàng)建多邊形
map.addOverlay(polygon);
該程序?qū)?yīng)監(jiān)控平臺勾畫出的地圖區(qū)域如圖6所示。
圖6 自定義虛擬地理圍欄圖
劃定虛擬地理圍欄后可通過setInterval定時兩秒刷新一次的方式獲得車輛的最新位置信息,調(diào)用BMapLib.GeoUtils.isPointInPolygon方法判斷用戶是否在預(yù)設(shè)區(qū)域,如果在則返回true,控制輸出:“在地理圍欄內(nèi)”;如果不在預(yù)設(shè)區(qū)域則返回false,彈出警告框:“非地理圍欄內(nèi)”。判斷用戶是否在地理圍欄內(nèi),相關(guān)程序如下:
var geolocation = new BMap.Geolocation();
var dingwei=setInterval(function () {
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
map.panTo(r.point);
if( BMapLib.GeoUtils.isPointInPolygon(r.point,polygon)){
console.log("在地理圍欄內(nèi)")
}else{
alert("非地理圍欄內(nèi)")}
}
},{enableHighAccuracy: true})
},2000);
系統(tǒng)硬件搭建完成及軟件平臺編寫好后,經(jīng)過調(diào)試進(jìn)行了現(xiàn)場測試。將監(jiān)控模塊安裝于自行車上待車載GPS模塊進(jìn)行位置的不斷變化,可以通過監(jiān)控平臺地圖位置清楚地看到自行車對應(yīng)的位置,結(jié)合虛擬電子圍欄區(qū)域可以準(zhǔn)確地判斷自行車的位置是否所在虛擬地理圍欄區(qū)域位置以內(nèi)。數(shù)據(jù)處理過程為:
1)初始化監(jiān)控平臺數(shù)據(jù)。在Visual Studio2015平臺啟動時,初始化監(jiān)控平臺數(shù)據(jù),主要作用為查詢自行車實(shí)時的GPS坐標(biāo)串,登記待監(jiān)控自行車車輛信息。
2)開啟定時中斷。操作人員可通過Visual Studio2015監(jiān)控平臺在允許的區(qū)域內(nèi)劃定虛擬地理圍欄區(qū)域,Visual Studio2015監(jiān)控平臺在定時中斷中對自行車監(jiān)控模塊即車載GPS模塊中的坐標(biāo)進(jìn)行判斷,判斷當(dāng)前自行車否進(jìn)入允許停車的區(qū)域之內(nèi)。
3)在Visual Studio2015監(jiān)控平臺軟件系統(tǒng)界面顯示出圍欄內(nèi)的自行車車輛信息,并向已登記并且未進(jìn)入允許停車區(qū)域內(nèi)的自行車發(fā)出禁止鎖車的通訊控制信號,此外Visual Studio2015監(jiān)控平臺還有記錄車輛進(jìn)、出區(qū)域內(nèi)的數(shù)據(jù),區(qū)域內(nèi)停放的車輛數(shù)據(jù)等。
在此監(jiān)控處理過程中,技術(shù)難點(diǎn)在于判斷自行車車輛實(shí)時位置(GPS坐標(biāo))是否屬于Visual Studio2015監(jiān)控平臺上勾畫的虛擬地理圍欄內(nèi)。此外,通過GPS模塊獲得的經(jīng)緯度如果不進(jìn)行處理直接用于百度地圖API的話將會出現(xiàn)較大的誤差。因此需要將自行車GPS實(shí)時坐標(biāo)轉(zhuǎn)化為百度地圖坐標(biāo),其方法為利用Web界面讀取原始坐標(biāo)然后通過百度地圖提供的BMap.Convertor.transMore函數(shù)進(jìn)行坐標(biāo)位置的批量轉(zhuǎn)換[8],相關(guān)轉(zhuǎn)換程序如下:
include
include
struct ZuoBiao
{double JingDu; //經(jīng)度坐標(biāo)
double WeiDu;}; //緯度坐標(biāo)
double transformWeiDu(double x,double y); //將GPS坐標(biāo)轉(zhuǎn)換為google緯度坐標(biāo)輔助函數(shù)
double transformJingDu(double x,double y); //將GPS坐標(biāo)轉(zhuǎn)換為google經(jīng)度坐標(biāo)輔助函數(shù)
ZuoBiao transform(ZuoBiao gps);//將GPS坐標(biāo)轉(zhuǎn)換為google地圖
ZuoBiao bd_encrypt(ZuoBiao gg);//將谷歌坐標(biāo)轉(zhuǎn)換為百度坐標(biāo)
在判斷車輛實(shí)時坐標(biāo)是否在虛擬電子圍欄時監(jiān)控系統(tǒng)中利用網(wǎng)格化的設(shè)計(jì)思路,在地圖中設(shè)置1000 *1000 米,100 *100 米,10 *10 米三個等級的地圖網(wǎng)格。此時車載GPS所在位置通過坐標(biāo)比較就可以確認(rèn)出落在哪個網(wǎng)格內(nèi),從而判斷是否屬于虛擬停車區(qū)域[9]。例如:車載GPS位置為“113.358841,23.190772”,通過簡單的計(jì)算可以得出該位置位于“113352319”的千米網(wǎng)格、位于“11335823190”的百米網(wǎng)格和“1133588231907”的十米網(wǎng)格內(nèi)。
圖7 系統(tǒng)監(jiān)測界面
本系統(tǒng)使用GPS、GPRS、MUC等電子硬件結(jié)合百度地圖、Visual Studio軟件進(jìn)行開發(fā),實(shí)現(xiàn)了一種在電腦監(jiān)控平臺上可以方便劃分一個區(qū)域虛擬電子圍欄的方式,并利用地圖網(wǎng)格比較法在監(jiān)控平臺上實(shí)現(xiàn)了共享單車中的車載位置信息是否屬于虛擬電子圍欄中的停車區(qū)域內(nèi)。并可通過監(jiān)控平臺實(shí)現(xiàn)對超出區(qū)域內(nèi)的共享單車進(jìn)行監(jiān)測并報警等處理,從而利用該系統(tǒng)可以用于當(dāng)前我國共享單車市場的管理,從而解決亂停車引起的社會管理問題,具有較強(qiáng)的應(yīng)用價值和市場前景。