亢雄偉,高澤華,高峰,房延鵬
(北京郵電大學(xué),北京100876)
亢雄偉、房延鵬(碩士研究生),研究領(lǐng)域?yàn)槲锫?lián)網(wǎng)中RFID和ZigBee技術(shù);高澤華(副教授),研究領(lǐng)域?yàn)闊o線移動(dòng)IP與增值業(yè)務(wù)、射頻識(shí)別RFID與智能交通;高峰(博士),研究領(lǐng)域?yàn)閃LAN技術(shù)。
門禁系統(tǒng)的關(guān)鍵在于當(dāng)前物體位置的確定,只要能確定位置,就可以進(jìn)行具體的邏輯判斷,本系統(tǒng)是基于接收信號(hào)強(qiáng)度指示(Receive Signal Strength Indicator,RSSI)定位原理而設(shè)計(jì)的,目前主要用來做貴重物品的防盜處理,當(dāng)物品從屋內(nèi)移到屋外時(shí),會(huì)發(fā)出警報(bào)信息,引起管理者的注意,從而達(dá)到防盜效果。
整個(gè)系統(tǒng)由3部分組成,分別是電路設(shè)計(jì)、硬件程序以及服務(wù)器端程序。
CC1110是TI公司的一款低功耗射頻識(shí)別芯片,硬件設(shè)計(jì)參考CC1110數(shù)據(jù)手冊中的推薦應(yīng)用電路[1],電子標(biāo)簽和讀卡器的射頻部分電路如圖1所示。
圖1 標(biāo)簽和讀卡器的射頻電路
讀卡器由兩部分組成,除了上文所述的射頻電路外,還需要有一個(gè)能將串口數(shù)據(jù)轉(zhuǎn)成網(wǎng)口數(shù)據(jù)的模塊,本系統(tǒng)采用HLK-RM04模塊來實(shí)現(xiàn)這部分功能,通過配置參數(shù),可以自動(dòng)將速率為57 600kbps的串口數(shù)據(jù)轉(zhuǎn)成網(wǎng)口數(shù)據(jù)。另外,配置參數(shù)時(shí)還需要指定遠(yuǎn)端IP地址和端口,這里的IP地址應(yīng)該設(shè)置成服務(wù)器的IP地址,端口號(hào)可以任意,但是服務(wù)器端程序監(jiān)聽的端口要與此處保持一致,因此,只要將讀卡器、路由器和服務(wù)器通過網(wǎng)線連接起來,就可以把讀卡器接收到的數(shù)據(jù)上傳到服務(wù)器。
系統(tǒng)硬件相關(guān)程序分成兩部分(一部分用來數(shù)據(jù)發(fā)送,另一部分用來數(shù)據(jù)接收),最后分別下載到標(biāo)簽和讀卡器中,使得標(biāo)簽和讀卡器可以正常工作,程序使用C語言開發(fā),采用IAR集成開發(fā)環(huán)境。
發(fā)送端的作用是發(fā)送數(shù)據(jù),該部分的防碰撞算法如下:當(dāng)信道被占用時(shí),會(huì)等待一個(gè)1~10ms的隨機(jī)時(shí)間后再次發(fā)送數(shù)據(jù),如果連續(xù)發(fā)送3次都沒有成功,則表明發(fā)送失敗。為了實(shí)現(xiàn)低功耗,采用隨機(jī)休眠喚醒機(jī)制,休眠時(shí)間為0.7~1.7s的一個(gè)隨機(jī)數(shù),這樣就使得每個(gè)標(biāo)簽的喚醒時(shí)間不同,從而提高該算法的魯棒性。
接收端除了接收8個(gè)字節(jié)的標(biāo)簽信息外,還要接收RSSI的值,CC1110提供了兩種獲得RSSI的方式:一種是配置寄存器PKTCTRL1.APPEND_STATUS=1,在這種方式下,RSSI值會(huì)自動(dòng)添加到接收數(shù)據(jù)幀的后面;另一種是直接讀取RSSI寄存器的值[1]。為了方便處理,本系統(tǒng)采用第一種方式,配置寄存器PKTCTRL1=0x04,將接收到的數(shù)據(jù)存儲(chǔ)后再取得下一位接收的數(shù)據(jù),即本次接收得到的RSSI。
讀取到的RSSI是以二進(jìn)制補(bǔ)碼的形式存放的,需要將單位轉(zhuǎn)為dBm,轉(zhuǎn)換方式如下:
① 將讀取的十六進(jìn)制數(shù)轉(zhuǎn)成十進(jìn)制,記為RSSI_dec;
② 如果RSSI_dec≥128,則 RSSI_dBm = (RSSI_dec-128)/2-RSSI_offset;
③ 如果RSSI_dec<128,則 RSSI_dBm = RSSI_dec/2-RSSI_offset。
通過以上步驟,得到的RSSI_dBm就是RSSI轉(zhuǎn)為dBm后的值,其中,RSSI_offset是一個(gè)偏移值,由于本系統(tǒng)的主頻為433MHz,數(shù)據(jù)速率為250kbps,根據(jù)CC1110的數(shù)據(jù)手冊,這個(gè)值取為73。硬件發(fā)送端和接收端的程序流程圖分別如圖2和圖3所示。
標(biāo)簽負(fù)責(zé)發(fā)送攜帶自身ID信息的數(shù)據(jù)幀,幀結(jié)構(gòu)如圖4所示。
幀中第1個(gè)字節(jié)為固定的0x4C,用來在接收端進(jìn)行驗(yàn)證和同步,第2個(gè)字節(jié)代表標(biāo)簽的電量信息,0x00表示電量正常,0x10表示電量過低,這一位被接收端解析后,會(huì)重新設(shè)為0x00。第3~8個(gè)字節(jié)是一個(gè)不重復(fù)的序列號(hào),整個(gè)數(shù)據(jù)幀構(gòu)成一個(gè)標(biāo)簽的ID號(hào)碼。讀卡器接收數(shù)據(jù)成功后,可以獲得指向該數(shù)據(jù)幀幀頭的指針,從這個(gè)指針開始讀取數(shù)據(jù),讀到的前8個(gè)字節(jié)就是標(biāo)簽發(fā)送的數(shù)據(jù)幀,第9個(gè)字節(jié)是本次接收的RSSI值。
圖2 標(biāo)簽端的發(fā)送程序流程
圖3 讀卡器端的接收程序流程
讀卡器負(fù)責(zé)接收數(shù)據(jù),并將其解析并重新封裝成新的數(shù)據(jù)幀發(fā)給服務(wù)器,幀結(jié)構(gòu)如圖5所示。
幀中的第1個(gè)字節(jié)為幀頭,固定取值為0xE5;第3個(gè)字節(jié)為總幀長,因?yàn)槭?8個(gè)字節(jié),因此取值為0x12;第7~8個(gè)字節(jié)是讀卡器ID;第9~16個(gè)字節(jié)是標(biāo)簽的ID號(hào)碼;第17個(gè)字節(jié)是RSSI值。
圖4 標(biāo)簽發(fā)送的數(shù)據(jù)幀結(jié)構(gòu)
圖5 讀卡器發(fā)送的數(shù)據(jù)幀結(jié)構(gòu)
服務(wù)器端程序采用Java編寫,編程依據(jù)是通過讀卡器接收到的RSSI值來確定當(dāng)前標(biāo)簽與讀卡器之間的距離,最后利用定位算法來確定該標(biāo)簽的坐標(biāo)。該部分用來實(shí)時(shí)監(jiān)測每個(gè)讀卡器上報(bào)的信息,最后進(jìn)行數(shù)據(jù)的分析和處理,并將結(jié)果顯示出來,具體流程如圖6所示。
首先對(duì)讀卡器的RM04模塊進(jìn)行設(shè)置,網(wǎng)絡(luò)協(xié)議選擇為TCP客戶端,遠(yuǎn)端IP設(shè)置為服務(wù)器的IP地址,端口設(shè)置為6000,串口參數(shù)波特率選擇57 600,并啟用DHCP,這樣就可以通過網(wǎng)絡(luò)將讀卡器封裝的數(shù)據(jù)幀上傳到服務(wù)器。
服務(wù)器端啟用一條線程一直監(jiān)聽6000端口,網(wǎng)絡(luò)中每接入一個(gè)讀卡器,服務(wù)器就會(huì)啟用一條新線程作為客戶端線程,該線程專門用來接收該讀卡器上傳的數(shù)據(jù),因?yàn)樽x卡器封裝的數(shù)據(jù)幀以18個(gè)字節(jié)為單位,所以這條線程以18個(gè)字節(jié)為單位不斷接收網(wǎng)線上傳的數(shù)據(jù),每接收到一幀數(shù)據(jù)就進(jìn)行解析,并根據(jù)RSSI和距離的關(guān)系換算出當(dāng)前標(biāo)簽到讀卡器的距離d,最后將讀卡器ID和距離以鍵值對(duì)的形式保存在同一個(gè)Map中。
圖6 服務(wù)器端程序流程
同時(shí),再額外啟用一條線程,專門對(duì)各個(gè)讀卡器保存在Map中的數(shù)據(jù)做統(tǒng)一處理。這條線程和其他的線程之間通過Java的線程同步技術(shù)CyclicBarrier來實(shí)現(xiàn)同步,所有的線程之間彼此等待,當(dāng)所有客戶端都讀取一幀數(shù)據(jù)之后喚醒數(shù)據(jù)處理線程來處理數(shù)據(jù),處理的方式是根據(jù)定位算法計(jì)算出當(dāng)前標(biāo)簽的坐標(biāo),并把計(jì)算結(jié)果顯示出來,處理完成后再通知其他線程繼續(xù)讀取數(shù)據(jù),如此循環(huán)。
RSSI反映了特定信道下的接收信號(hào)強(qiáng)度等級(jí),在無線應(yīng)用中,可以通過RSSI來評(píng)估當(dāng)前發(fā)送者到接收者的距離,計(jì)算公式如下:
式中,P(d)代表收發(fā)距離為d時(shí)接收的RSSI值,單位為dBm;p(d0)為路徑損耗指數(shù),一般取值2~5;ε是一個(gè)均值為0的高斯隨機(jī)變量。
選取d0為1m時(shí),就可以得到RSSI和距離的關(guān)系,但是RSSI在實(shí)際中受到環(huán)境變化的影響較大,需要進(jìn)行擬合,才能降低誤差。
圖7是距離為1m時(shí)實(shí)際測量的135個(gè)RSSI值,從中可以看出,當(dāng)距離不變、環(huán)境不變的情況下,讀取到的RSSI值變化幅度很小,故可以測量不同距離下的RSSI并計(jì)算其平均值,最后根據(jù)平均值來擬合RSSI和距離的關(guān)系。
圖7 距離為1m時(shí)RSSI的實(shí)測值
與測量距離為1m時(shí)的方法相同,再去測量不同距離下的RSSI值,測量距離分別為2m、3m、4m、5m、7.5m、9m、12.4m、14.7m、17.8m,最后取平均值,并使用 Matlab進(jìn)行曲線擬合,擬合結(jié)果如圖8所示。
從圖8中可以看出,隨著距離的增大,RSSI不斷降低,當(dāng)距離超過10m時(shí),趨于穩(wěn)定,最后通過擬合的曲線來驗(yàn)證誤差,得到誤差的均值為1.27,方差為1.44。這說明擬合結(jié)果精確度較高,最后擬合的多項(xiàng)式是RSSI=-0.02d3+0.8d2-10.77d-28.35,d的取值范圍為0~18m,這樣就得到了RSSI和距離的關(guān)系,根據(jù)每次接收到的RSSI,解這個(gè)方程就能得到距離d的值。
圖8 RSSI和距離的擬合關(guān)系
給服務(wù)器連接3個(gè)讀卡器,并為其選取合適的中心坐標(biāo),記為 A(x1,y1)、B(x2,y2)、C(x3,y3),每個(gè)讀卡器都讀取一幀數(shù)據(jù),并通過RSSI值來計(jì)算當(dāng)前標(biāo)簽到各個(gè)讀卡器的距離,得到d1、d2、d3,以 A、B、C為圓心、d1、d2、d3為半徑,可以畫出3個(gè)圓,根據(jù)這3個(gè)圓來確定標(biāo)簽當(dāng)前的位置,定位算法示意圖如圖9所示。
圖9 定位算法示意圖
將3個(gè)固定坐標(biāo)設(shè)置為(-3.04,0)、(4.15,4.05)、(3.87,0),單位為 m。當(dāng)標(biāo)簽處于坐標(biāo)(1,1)時(shí),程序進(jìn)行了100組的坐標(biāo)計(jì)算,最后計(jì)算平均值,得到的結(jié)果是(1.27,1.48),與實(shí)際位置非常接近,方差為0.15。
門禁系統(tǒng)的實(shí)現(xiàn)需要確定門的坐標(biāo),坐標(biāo)的設(shè)定和門的寬度w、厚度t有關(guān)。首先需要確定門的一邊的中點(diǎn)為坐標(biāo)原點(diǎn)(0,0),其次設(shè)定4個(gè)坐標(biāo)作為門限值,分別為(0,-t/2-1)、(0,t/2+1)、(w,-t/2-1)、(w,t/2+1);然后將3個(gè)讀卡器中的兩個(gè)放在門外,一個(gè)放在門內(nèi),使得三者的交叉區(qū)覆蓋門的范圍;最后將程序計(jì)算出來的坐標(biāo)(x,y)和門的坐標(biāo)進(jìn)行對(duì)比,當(dāng)x>t/2+1+0.15、標(biāo)簽當(dāng)前狀態(tài)在門外同時(shí)成立,或者t/2<x<t/2+1+0.15、y>w或y<0,并且標(biāo)簽當(dāng)前狀態(tài)在門外同時(shí)成立時(shí),判決為進(jìn)門,并更新標(biāo)簽的狀態(tài)為門內(nèi);當(dāng)x<-t/2-1-0.15、標(biāo)簽當(dāng)前狀態(tài)在門內(nèi)同時(shí)成立,或者-t/2-1-0.15<x<-t/2、y>w或y<0并且標(biāo)簽當(dāng)前狀態(tài)在門內(nèi)同時(shí)成立時(shí),判決為出門,并更新標(biāo)簽的狀態(tài)為門外。
本文介紹了一種以RSSI定位原理為基礎(chǔ)而設(shè)計(jì)的物品管理門禁系統(tǒng),重點(diǎn)做了RSSI與距離關(guān)系的擬合,效果較為理想。系統(tǒng)的設(shè)計(jì)難點(diǎn)在于硬件相關(guān)程序的編寫、RSSI的測量,以及服務(wù)器端程序的控制。通過借鑒Web開發(fā)中的分層思想,使得整個(gè)系統(tǒng)結(jié)構(gòu)清晰,分成了3級(jí),每一級(jí)各司其職,標(biāo)簽和讀卡器之間可通過無線電波進(jìn)行交互,讀卡器和服務(wù)器之間通過網(wǎng)絡(luò)交互,這種設(shè)計(jì)有利于日后進(jìn)行系統(tǒng)維護(hù)并提高擴(kuò)充性。
[1]TexasInstruments.CC1110PRELIMINARY Data Sheet[EB/OL].(2010-07)[2015-06].http://www.lierda.com/upload/product/down_path/070122/032237200 1169 434729.pdf.
[2]丁海強(qiáng),何熊熊,莊華亮,等.基于RFID的監(jiān)獄智能定位系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].杭州電子科技大學(xué)學(xué)報(bào),2014,34(1):71-73.
[3]李文仲,段朝玉.CC1110/CC2510無線單片機(jī)和無線自組織網(wǎng)絡(luò)入門與實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2008.
[4]李文仲,段朝玉.CC1010無線SoC高級(jí)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2007.
[5]劉艷,吳蒙.基于ZigBee技術(shù)的室內(nèi)定位系統(tǒng)的研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(4):181-183.
[6]張潔穎,孫懋珩,王俠.基于RSSI和LQI的動(dòng)態(tài)距離估計(jì)算法[J].電子測量技術(shù),2007,30(2):141-144.
[7]張潔穎.基于ZigBee網(wǎng)絡(luò)的定位跟蹤研究與實(shí)現(xiàn)[D].上海:同濟(jì)大學(xué),2007.
[8]侯亞娜,胡維平.無線傳感器網(wǎng)絡(luò)中基于聚類平均的定位算法[J].計(jì)算機(jī)應(yīng)用研究,2010,27(4):1455-1457.
單片機(jī)與嵌入式系統(tǒng)應(yīng)用2015年11期