王 東,呂文濤
(重慶理工大學 計算機科學與工程學院, 重慶 400054)
隨著汽車保有量的劇增,停車難的問題日益嚴重[1]。我國很多城市對停車位的需求已遠超城市空間的承受能力,繼續(xù)增建停車場已無法解決車多位少的問題。因此,對城市里現有停車位統(tǒng)一管理、錯時停車是個很好的舉措。這么做的前提條件是獲取停車位的狀況信息,所以需要一套停車位管理系統(tǒng)。
對停車位的檢測技術有很多種,但每種技術都有弊端。磁感線圈[2]檢測施工難度大、成本高、需要有線供電;超聲波檢測[3]、紅外線檢測[4]、圖像檢測[5]均不能在室外使用且易受溫度、光照、雨雪等環(huán)境的影響。選用地磁傳感器[6]檢測停車位,其靈敏度高、體積小、安裝靈活方便、抗干擾能力強,既不受環(huán)境因素,如光照、天氣等的影響,又不受外界電磁波的影響。
物聯網無線傳輸技術有WiFi、藍牙、ZigBee和2G/3G/4G,它們的缺點非常明顯,前三者雖然功耗低但傳輸距離近,后三者傳輸距離遠但功耗高。自從出現了LPWAN(lower power wide area network,低功耗廣域網)技術,便可以最大程度地實現遠距離和低功耗的兼顧。作為LPWAN技術的一種——LoRa,全稱“Long Range”,是一種基于直序擴頻技術的低功耗長距離無線通信技術,抗干擾能力強,具有極好的抗多徑衰落性能[7]。
本文結合了地磁檢測技術、LoRa無線通信技術和GPRS通信技術,設計了以停車位為管理核心的停車系統(tǒng)。該系統(tǒng)與現有系統(tǒng)相比的優(yōu)勢在于:1)組網方式簡單,維護難度??;2)全程無需上位機和人力的參與;3)所有數據匯總到云服務器,便于管理。這些優(yōu)勢可以有效利用路邊的零散車位,對于解決道路交通狀況,建立良好的交通環(huán)境和秩序有著重要的意義。
系統(tǒng)總體結構如圖1所示,由終端節(jié)點、匯聚節(jié)點(網關)、云服務器和應用軟件組成。終端節(jié)點部署在每個停車位,實時監(jiān)測車輛和車位狀態(tài);它們與匯聚節(jié)點采用多對一的星狀拓撲結構,匯聚節(jié)點負責接收終端節(jié)點上傳的數據并通過GPRS上傳到云服務器;云服務器部署有數據庫(和http Server),為應用軟件提供數據接口;APP、Web、客戶端等應用軟件使用這些數據實現相應功能。
圖1 停車系統(tǒng)總體結構
相較網狀拓撲和樹狀拓撲,星狀拓撲消除了同步開銷和跳數,具有結構簡單、能耗低的特點,能夠很好地滿足物聯網的要求;而且LoRa擴頻技術將傳輸距離增加至3 km,所以可以取消額外的中繼。但是較多的終端節(jié)點連接至一個匯聚節(jié)點,會導致匯聚節(jié)點負擔過重以至于誤碼率增加和網絡癱瘓。因此,可以將其根據區(qū)域劃分為多個網絡,每個網絡分配一個匯聚節(jié)點,并使不同網絡工作在不同信道,降低信號間的干擾。
終端節(jié)點實現對停車位狀態(tài)的實時監(jiān)測,并將狀態(tài)數據通過LoRa網絡上傳至匯聚節(jié)點。該節(jié)點由主控芯片STM8L051F3、地磁傳感器HMC5883L、SX1278LoRa模塊組成,如圖2所示。為每個停車位提供一個電源接口成本太高,管理和維護的費用也較高,所以每個終端節(jié)點通過電池供電。
圖2 終端節(jié)點硬件結構
STM8L051F3是一款超低功耗的8位MCU,內置8Kb Flash。它有5種低功耗模式,其中最大功耗的模式平均電流僅5.1 μA。
地磁場受經緯度、海拔、溫度等的影響,所以在不同地點數值不同,但是在某一地點的地磁場是趨于穩(wěn)定的[8]。由于車輛是一塊大的金屬導體,因此車輛的靠近會影響該地的地磁場,導致地磁場發(fā)生偏移。而地磁傳感器能夠感知這種變化,進而判斷車輛的狀態(tài)和車位的狀態(tài)。HMC5883L是Honeywell公司的一款三軸各向異性磁阻(AMR)傳感器[9],可以讀取地磁場在X、Y、Z三軸上的分量,與主控芯片通過I2C接口連接。因為磁場變化的大小表明了車輛對地磁場的干擾程度,所以車輛的存在與否可以通過判斷磁場變化的大小來確定[10]。通過實驗確定一個閾值,有助于忽略旁邊車位的車輛,精確判斷本車位情況。
SX1278LoRa模塊是采用LoRa擴頻調制技術的無線傳輸模塊,可選發(fā)射功率、空中速率、信道等參數,支持空中喚醒,休眠時電流僅2.0 μA,通過UART與主控芯片連接。該模塊通過外部引腳設置其工作模式,上電后即加入網絡,并按照內部保存的工作參數工作。
匯聚節(jié)點接收終端節(jié)點發(fā)來的車位狀態(tài)信息,將車位狀態(tài)用LCD顯示出來,并通過GPRS網絡上傳至云服務器。該節(jié)點由主控芯片S3C2416、SX1278LoRa模塊、LCD、GPRS模塊SIM900A組成,如圖3所示。因為SIM900A需要穩(wěn)定5 V/2 A直流電源,低電壓或低電流都會導致模塊無法正常工作;況且匯聚節(jié)點可以放置在管理員處,所以匯聚節(jié)點用直流電源供電,不需考慮功耗。
圖3 匯聚節(jié)點硬件結構
S3C2416是一款基于ARM926EJ內核的低功耗、低成本、高性能的處理器[11],具有極強的性價比優(yōu)勢,內置的MMU單元為操作系統(tǒng)的運行提供了保證。
SIM900A是SIMCom公司推出的雙頻GSM/GPRS模塊[12-13],性能穩(wěn)定、性價比高。與S3C2416的UART連接,通過向模塊發(fā)送AT指令來使用SIM900A的TCP/IP協議棧。
本系統(tǒng)自定義LoRa通信協議。終端節(jié)點按照一定的格式將所傳內容封裝成幀,然后發(fā)送至匯聚節(jié)點,匯聚節(jié)點按照幀格式解析出所需內容。之后的數據傳輸任務交付于GPRS,由TCP/IP協議完成。
LoRa幀格式如表1,目的地址占2個字節(jié),給每個LoRa模塊分配一個獨一無二的地址;目的信道占1個字節(jié),每個LoRa模塊都有32個信道可供選擇。FEC前向糾錯碼是一些冗余信息,可以提升抗干擾能力,在接收端可以用它來糾錯碼片。幀負載就是要傳輸的有效信息,由停車位號和停車位狀態(tài)組成,停車位號使用LoRa模塊自身的地址,停車位狀態(tài)直接用0/1表示無車/有車。
表1 LoRa幀格式
另外,因為整個LoRa網絡使用同一信道,多個終端節(jié)點同時向匯聚節(jié)點發(fā)送數據會導致數據沖突。為避免這一情況,采用發(fā)送/應答機制,即匯聚節(jié)點收到有效信息后向源節(jié)點回復收到,若終端節(jié)點沒有收到應答幀,則隨機延時一段時間再次發(fā)送,直到發(fā)送成功。
圖4 終端節(jié)點軟件流程
終端節(jié)點直接運行裸板程序,采用睡眠-喚醒-睡眠的循環(huán)工作模式來降低功耗。喚醒后檢測停車位狀態(tài),若發(fā)生變化,則上傳數據至匯聚節(jié)點;否則繼續(xù)睡眠至下次喚醒,軟件流程如圖4所示。時間片設為1 s(即每隔1 s檢測一次停車位)。
匯聚節(jié)點運行Linux操作系統(tǒng),實現了多任務并發(fā)執(zhí)行,保證了系統(tǒng)長期穩(wěn)定地運行。
先移植U-boot到Nand Flash,然后燒寫Linux Kernel、制作根文件系統(tǒng)。該節(jié)點的軟件是以文件系統(tǒng)中的文件存在的,編寫好后交叉編譯為可執(zhí)行文件,與根文件系統(tǒng)一起制作成文件系統(tǒng),并燒錄到Nand Flash。調試時采用NFS的方式掛接文件系統(tǒng)。
圖5 匯聚節(jié)點軟件流程
軟件流程如圖5所示,LCD顯示和收發(fā)數據并發(fā)進行。由UART發(fā)送一系列的AT命令啟動GPRS數據傳輸:(1)AT+CSTT啟動任務并設置接入點APN、用戶名、密碼 ;(2)AT+CIICR激活移動場景,發(fā)起GPRS無線連接 ;(3)AT+CIFSR獲取本地IP地址 ;(4)AT+CIPSTART =“TCP”,“公網IP”,端口號,與遠程服務器建立TCP連接;(5)AT+CIPSEND發(fā)送數據,在回復“>”后輸入數據,最后輸入0x1A 啟動發(fā)送。當TCP連接保持的時候,僅進行步驟(5)即可,但若一段時間內沒有數據交互,TCP連接將會自動斷開。我們可以每次發(fā)送數據時進行(1)~(5)的步驟,也可以采用持續(xù)發(fā)送心跳包的方式保持TCP連接,一般間隔30 s。
Linux中“萬物皆文件”,匯聚節(jié)點中所有設備都被抽象為Linux中的一個文件。對它們的操作也就是讀寫相應的文件。
收發(fā)數據關鍵代碼如下:
#define LoRa_Device "/dev/ttySAC0"
#define GPRS_Device "/dev/ttySAC1"
fd1= open(LoRa_Device,O_RDWR);
serial_init(fd1); //自建函數,初始化串口
read(fd1,buf,100); //終端上傳的數據存入buf
write(fd1,"ok",strlen("ok")); //發(fā)送應答
fd2 = open(GPRS_Device,O_RDWR);
serial_init(fd2);
/*啟動GPRS發(fā)送的一系列AT指令,指令間需要的最小延時不同*/
write(fd2,"AT+CSTT ",strlen("AT+CSTT "));
sleep(1);
write(fd2,"AT+CIICR ",strlen("AT+CIICR "));
sleep(1);
write(fd2,"AT+CIFSR ",strlen("AT+CIFSR "));
sleep(1);
write(fd2,"AT+CIPSTART="TCP","119.23.219.69",4321 ",strlen("AT+CIPSTART="TCP","118.190.93.84",2317 "));
sleep(5);
write(fd2,"AT+CIPSEND ",strlen("AT+CIPSEND "));
sleep(3);
write(fd2,buf,strlen(buf));
sleep(1);
write(fd2,&hex,1);
sleep(3);
LCD顯示關鍵代碼如下:
#define LCD_Device "/dev/fb0"
fb_open(fbd,LCD_Device);
fb_draw(fbd,COLOR);
圖6 云服務器軟件流程
//總畫圖函數,利用描點、劃線的基本函數實現。
云服務器采用阿里云,操作系統(tǒng)是CentOS,在上面部署有MySQL數據庫。服務器運行Socket監(jiān)聽程序,接收GPRS上傳的數據,并存儲到數據庫中,軟件流程如圖6所示。
接收GPRS數據關鍵代碼:
sockfd = socket(AF_INET,SOCK_STREAM,0);
bind(sockfd,(struct sockaddr* )&server_sockaddr,sizeof(struct sockaddr));
listen(sockfd,MAX_QUE_NUM);
accept(sockfd,(struct sockaddr*)&client_sockaddr,&sin_size);
recv(client_fd,buf,BUFFER_SIZE,0);
MySQL數據庫操作關鍵代碼:
g_conn = mysql_init(NULL);
mysql_real_connect(g_conn,g_host_name,g_user_name,g_password,g_dbname,0,NULL,0);
executesql("set name utf8");
if(state==1)
sprintf(sql,"INSERT INTO No_");
strcat(sql,no);
strcat(sql,"(time_in) VALUES(now())");
else
sprintf(sql,"UPDATE No_");
strcat(sql,no);
strcat(sql,"SET time_out=now() WHERE ISNULL (time_out)");
executesql(sql);
該系統(tǒng)的開放性體現在:開發(fā)不同的應用軟件可以實現不同的功能。比如:繳費功能,從云服務器上得到某車位的車輛停放時間,計算出要繳費的金額,手機APP繳費即可。導航功能,事先在云服務器的數據庫中存儲停車位的位置信息,手機APP調用地圖ADK實現導航。核算功能,管理員在客戶端或Web端登入賬號密碼,查看車位停放歷史、每月收入情況等。
將地磁傳感器放置在停車位旁邊,使得y軸正方向與車輛駛入停車位的方向相同,y軸正方向水平順時針旋轉90°便是x軸,z軸垂直于水平面。測試地磁傳感器與車輛不同距離時磁場的變化量,實驗數據如表2所示。檢測結果表明,將地磁傳感器放在距車輛0.3 m范圍內,閾值設為1.3 gauss,可以有效檢測車輛的存在,并可以過濾掉旁邊停車位車輛帶來的干擾。
搭建系統(tǒng)測試環(huán)境:匯聚節(jié)點與終端節(jié)點點對點傳輸,LoRa模塊工作在433 MHz,發(fā)射功率20 dBm,空中速率2.4 kbps。直接由終端節(jié)點的控制芯片發(fā)送一定量的數據包,匯聚節(jié)點收到后顯示在LCD上。為了測試LoRa通信的有效傳輸距離,將終端節(jié)點分開放在空地上,然后移動匯聚節(jié)點并進行收發(fā)測試。測試結果如表3所示,其單跳通信距離遠大于ZigBee、WiFi和藍牙,表明LoRa技術非常適用于低功耗廣域網的構建。
表3 LoRa通信距離測試結果
實驗結果表明,LoRa傳輸的有效距離可達公里級,本文系統(tǒng)實現的LoRa網絡可以實現停車場的車位監(jiān)測工作。如果分組建網,則可以將傳輸范圍擴大到整個城市。
圖7 停車系統(tǒng)數據庫
車輛駛入和駛出停車位時,終端節(jié)點最終將信息上傳至云服務器,云服務器接收后存儲到數據庫。數據庫名為Parking_System,每個停車位對應1張表。3個停車位參與了實驗,如圖7所示。表中每行表示了1次停車行為(一進一出),如圖8所示,time_in表示進入停車位時間,time_out表示離開停車位時間。
測試證明了車輛停放時間被準確記錄到云服務器的數據庫中。
大多數現有智能停車系統(tǒng)的無線傳輸技術選擇的是ZigBee,原因是ZigBee技術比較成熟,有現成的協議棧。小米的智能家居用的就是ZigBee技術。但是ZigBee技術的重要缺點就是單跳傳輸距離近,只能通過增加中繼的方式延長傳輸距離。
圖8 停車位信息表
文獻[14]的中的仿真實驗表明,ZigBee在無中繼節(jié)點時只能傳輸80 m,增加了1個中繼后也只有150 m。根據本文LoRa通信測試結果,ZigBee要經過約12個中繼節(jié)點才能達到LoRa的傳輸距離。這正是本文系統(tǒng)的優(yōu)勢所在。
系統(tǒng)完成了物聯網系統(tǒng)的感知層和傳輸層的設計與實現,用地磁傳感器完成底層信息采集,以LoRa技術為核心搭建了底層傳輸網絡,并對應用層軟件設計提出了設計思想。
系統(tǒng)的特點如下:
1) 用地磁傳感器完成底層信息采集,靈敏度高,抗干擾能力強。
2) 采用LoRa技術作為底層傳輸網絡,傳輸距離遠,功耗小,網絡拓撲簡單,減少了額外的中繼成本。
3) 匯聚節(jié)點直接添加GPRS模塊,運行操作系統(tǒng),減少了對上位機以及人力的依賴,自動化程度更高。
4) LCD實現了停車位狀態(tài)信息的實時發(fā)布,若要用電子終端更加快捷方便地查詢預訂,可以開發(fā)相應的應用軟件實現,該系統(tǒng)為上層應用軟件的開發(fā)提供了開放性。
[1] 康正寧,周振華.試論“互聯網+停車”模式[J].上海經濟研究,2017(3):115-122.
[2] 夏發(fā)欽.利用地感應線圈檢測機動車輛的原理與實現[D].武漢:武漢科技大學,2011.
[3] 劉維波.基于Zigbee無線傳感網絡的超聲波車位檢測系統(tǒng)[D].西安:長安大學,2011.
[4] KRANIG J,MINGE E,JONES C.Field test of monitoring of urban vehicle operations using non-instrusive technologies:Final Report.1997.
[5] 李宇成,嚴娟莉,王目樹,等.利用視頻圖像檢測車位狀態(tài)的方法[J].計算機工程與設計,2012,33(1):282-285.
[6] 鄭東旭.基于地磁的智能停車系統(tǒng)設計與實現[D].杭州:浙江大學,2016.
[7] Semtech.WSG_44-Introduction-LoRa-Technology[EB/OL].[2016-12-26].https://www.semtech.com.
[8] 康國發(fā),白春華,高國明.地磁場長期變化和日長十年尺度變化的周期特征[J].地球物理學報,2008,51(2):369-375.
[9] seeedstudio.com.3-AxisDigitalCompassICHMC5883[EB/OL].[2016-01-10].https://www.seeedstudio.com/wiki/images/4/42/HMC5883.pdf.
[10] 崔遜學,左從菊.無線傳感器網絡簡明教程[M].北京:清華大學出版社,2015:38.
[11] 趙立輝,王京,霍春寶.基于物聯網的智能家居監(jiān)控系統(tǒng)設計[J].電視技術,2013,37(22):82-84,96.
[12] 梁洪晶,李平.具有領導者的多智能體系統(tǒng)協同控制研究[J].渤海大學學報(自然科學版),2017(3):271-277.
[12] 霍濤,賈振堂.基于STM32和SIM900A的無線通信模塊設計與實現[J].電子設計工程,2014,17:106-110,114.
[13] 岳學軍,劉永鑫,王葉夫,等.基于ZigBee與地磁傳感技術的停車誘導系統(tǒng)[J].計算機應用,2014,34(3):884-887.