宋天慧 曾建 錢進 賈保凱 王靜
關(guān)鍵詞:門禁系統(tǒng);STM32;人臉識別;WiFi;二維碼;GSM
0 引言
隨著物聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展和科技服務(wù)生活理念的深入人心,人們對家庭門禁系統(tǒng)的安全性、便捷性和智能性的要求逐步提高[1-3]。在現(xiàn)有的門禁系統(tǒng)中,2016年廖杰和黃文強提出了基于云計算的動態(tài)密碼門禁系統(tǒng),通過手機App和云平臺獲取隨機動態(tài)密碼開鎖[4],解決了密碼遺忘和易破解的問題,安全性高,但操作復(fù)雜。2021年金陵科技學(xué)院的顧姍姍等人提出了基于STM32的智能指紋門禁系統(tǒng),將指紋作為開門密鑰,具備便捷性的優(yōu)點[5],但存在指紋可復(fù)制,破損或潮濕的指紋難以識別的問題。2021年淮南師范學(xué)院的蔡俊等人提出了基于二維碼識別的門禁系統(tǒng),將用戶信息制作成唯一的二維碼,掃碼后開門,該系統(tǒng)操作方便[6],但二維碼圖片丟失被他人獲取即可開門,存在一定的安全問題。以上設(shè)計的開門方式均較為單一,無法滿足復(fù)雜多變的應(yīng)用情況。
本論文結(jié)合以上三種門禁系統(tǒng)的優(yōu)勢,設(shè)計了基于STM32的智能家庭門禁系統(tǒng),該系統(tǒng)以難以復(fù)制的人臉信息作為開門密鑰,訪客到來時可通過手機App、WiFi和云平臺實現(xiàn)遠程開門。若家中斷網(wǎng),可通過手機App生成加密二維碼發(fā)給訪客開門。若有入侵者企圖撬門,則啟動報警模塊警告,并發(fā)送短信提醒用戶。該系統(tǒng)通過生物識別技術(shù)、無線通信技術(shù)等,提高了門禁系統(tǒng)的安全性能和用戶使用的便利性,采用多種開門方式,提高了門禁系統(tǒng)的穩(wěn)定性。
1 系統(tǒng)設(shè)計
該門禁系統(tǒng)以STM32F103C8T6最小核心板為主控,接收并處理紅外傳感器和震動傳感器采集的信息,同時通過ESP8266和云平臺接收App發(fā)送的指令進行開關(guān)門,通過MF1進行人臉識別,GM65進行二維碼識別,識別的信息經(jīng)主控模塊分析處理,判斷是否開門,若感受到威脅,主控發(fā)送相應(yīng)指令控制GSM模塊發(fā)送短信提醒。外設(shè)與主控采用星形拓撲結(jié)構(gòu)連接,人臉識別、二維碼、WiFi、GSM 四個模塊分別與STM32的不同串行通信接口進行通信,任一模塊出現(xiàn)故障并不會影響其他模塊,門禁系統(tǒng)仍能保持正常工作,且出現(xiàn)故障易診斷,系統(tǒng)構(gòu)架圖如圖1所示。
1.1 系統(tǒng)電路設(shè)計
1.1.1 人臉識別模塊
本系統(tǒng)采用了Sipeed公司設(shè)計的基于K210的AI視覺處理模組(Sipeed MF1) 作為人臉識別的核心圖像處理單元[7]。如圖2所示,本設(shè)計中MF1與STM32共地,TX、RX引腳連接STM32的串口2進行通信,MF1的引腳VSYS、USB與PNP晶體三極管IRF5210的漏極連接,三極管的源極接5V電源,柵極接STM32的B15引腳,通過光電傳感器控制MF1上電工作,如圖3所示,光電傳感器的輸出引腳連接STM32的B14,若感應(yīng)到人,輸入低電平,此時STM32向B15引腳輸出低電平,三極管導(dǎo)通,人臉識別模塊上電啟動。
1.1.2 二維碼識別模塊
本系統(tǒng)使用GM65實現(xiàn)二維碼掃描,能識別手機屏幕上的二維碼,在本系統(tǒng)中用TTL232串行通信接口與STM32的串口1連接,若串口1收到的二維碼數(shù)據(jù)經(jīng)過異或運算解密后與設(shè)定的密碼相同,STM32控制舵機開門,電路圖如圖4所示。
1.1.3 WiFi 模塊
ESP8266與STM32通過串口3連接,二者共地,手機App通過云服務(wù)器向ESP8266模塊發(fā)送開門指令,識別到指令后,ESP8266 模塊通過串口發(fā)送相應(yīng)數(shù)據(jù),STM32接收到數(shù)據(jù)后進行判斷,一致則控制舵機轉(zhuǎn)動,模塊電路圖如圖5所示。
1.1.4 系統(tǒng)報警模塊
震動傳感器電路圖如圖6所示,其數(shù)字量輸出口DO與STM32的A1引腳連接,感受到震動時,震動勢能傳到傳感器內(nèi)的彈簧末端引起共振,彈簧觸碰到金屬內(nèi)壁形成通路,此時A1輸入低電平,若同時光電傳感器感應(yīng)到人,STM32控制有源蜂鳴器連接的B0口為低電平,蜂鳴器長鳴,并通過虛擬串口向GSM模塊發(fā)送AT指令,控制GSM發(fā)送短信給戶主進行提醒,電路圖如圖7和圖8所示。
1.2 系統(tǒng)軟件設(shè)計
1.2.1 人臉識別模塊程序設(shè)計
該系統(tǒng)采用的人臉識別算法是K210官方提供的開源人臉識別模型,檢測到人臉后,獲取左右眼、鼻子、左右嘴角五個關(guān)鍵點的坐標,根據(jù)該坐標與標準正臉坐標獲取仿射變換矩陣,對原始的人臉圖像進行仿射變換,變?yōu)檎槇D像,接著計算并存儲正臉圖像的196維特征值,再次識別到人臉時,將該人臉圖像計算出的特征值與存儲的特征值一一對比,若最大分數(shù)大于85,則被認定為同一人。
本系統(tǒng)使用2個按鍵進行人臉圖像的存儲和刪除。以增加人臉數(shù)據(jù)為例,按下按鍵1,首先清屏,準備增加人臉數(shù)據(jù)。若按下的時間小于等于1秒,UID加一,將該UID添加到數(shù)組中,再次按下按鍵1,若時間大于1秒,根據(jù)K210的串口通信協(xié)議,STM32通過串口發(fā)送“指定UID添加人臉”的信息,發(fā)送完數(shù)據(jù)后初始化發(fā)送緩沖區(qū),為下一次發(fā)送數(shù)據(jù)做準備。K210接收到指令后將人臉數(shù)據(jù)存儲在內(nèi)存中并返回添加結(jié)果,添加人臉數(shù)據(jù)的流程圖如圖9所示。下面是發(fā)送指令的代碼。
1.2.2 二維碼開門模塊程序設(shè)計
二維碼加密方法為異或加密,該方法易于實現(xiàn),計算成本小。信息論的創(chuàng)始人香農(nóng)(Claude ElwoodShannon) 證明了在滿足以下兩個條件的情況下,異或加密是無法破解的。
(1) 密鑰的長度大于等于信息。
(2) 密鑰必須是一次性的,且每次都隨機產(chǎn)生。
于是在本設(shè)計中,將開門信息初始化為四位數(shù),每生成一次二維碼該信息加一,加密的密鑰初始化為六位數(shù),每次減一,來保證二者異或生成的二維碼數(shù)據(jù)的一次性和隨機性,提高門禁系統(tǒng)的安全性。使用localstorage本地存儲這些數(shù)據(jù),確保App關(guān)閉后重新打開時這些數(shù)據(jù)保持不變。
二維碼開門模塊中,GM65模塊掃描加密二維碼,STM32預(yù)先存儲了初始信息和加密信息在數(shù)組中,每接收到串口1傳來的二維碼信息,將初始信息加一,加密信息減一,通過函數(shù)將加密信息字符串和串口接收的字符串轉(zhuǎn)換成整形數(shù)字,并進行異或運算,得到結(jié)果后將數(shù)字轉(zhuǎn)換成字符串,然后與初始信息字符串對比,相同則開門。
1.2.3 WiFi 模塊程序設(shè)計
本設(shè)計選擇貝殼物聯(lián)作為手機App和ESP8266溝通的橋梁,設(shè)計ESP8266與云平臺之間進行TCP通信,手機端與云平臺通過websocket 協(xié)議通信。ESP8266的STA工作模式可實現(xiàn)硬件設(shè)備的遠程控制,于是設(shè)計ESP8266工作在STA模式下作為客戶端接收家庭路由器的信號進行聯(lián)網(wǎng)。ESP8266與STM32之間通過串口3進行通信,這部分的通信連接示意圖如圖10所示。
申請貝殼物聯(lián)的設(shè)備編號和密鑰,開啟串口后,根據(jù)ssid和密碼連接家中路由器,連接成功后根據(jù)貝殼物聯(lián)服務(wù)器的網(wǎng)址和TCP端口創(chuàng)建TCP連接,進行數(shù)據(jù)透傳。根據(jù)申請的設(shè)備編號和密鑰向服務(wù)器發(fā)送登錄指令,服務(wù)器收到指令后會判斷登錄信息是否正確,若正確,將返回登錄成功的結(jié)果。此時可與其他設(shè)備互相收發(fā)信息。
在手機App中點擊開門按鍵,觸發(fā)send事件發(fā)送內(nèi)容為“sw”的指令,用相應(yīng)ID 指示發(fā)送目標為ESP8266端設(shè)備,在ESP8266端,對收到的信息JSON解析,信息中的ID指示該指令來源為手機端設(shè)備,若M 的內(nèi)容為“say”且C 的內(nèi)容為“sw”,通過串口向STM32發(fā)送“9”,STM32判斷接收的數(shù)據(jù)為0x39,則控制舵機開門,并向WiFi模塊發(fā)送字符“o”,WiFi模塊收到字符“o”就向手機端設(shè)備發(fā)送內(nèi)容為“the door'sopen!”的指令,手機端設(shè)備解析出指令內(nèi)容就在div框中打印開門信息。
1.2.4 短信報警模塊程序設(shè)計
短信報警模塊首先對相應(yīng)的串口和I/O口初始化,判斷若紅外傳感器感應(yīng)到人且同時震動傳感器感受到震動,即PB14和PA1輸入為低電平時,STM32向串口4發(fā)送AT指令,將發(fā)送的短信設(shè)置為文本格式,然后設(shè)置接收短信的手機號碼,接著發(fā)送短信信息,最后發(fā)送“0x1a”,即短信發(fā)送標志。
GSM模塊連接的是虛擬串口,在模擬串口時,本設(shè)計采用的是延時法,發(fā)送數(shù)據(jù)時先是發(fā)送一位起始位,再從低位到高位發(fā)送8位數(shù)據(jù),最后發(fā)送一位停止位,串口通信的波特率,是每位電平持續(xù)的時間,波特率越高,持續(xù)的時間越短。如波特率為9600bps,表示1 秒傳輸9600 位數(shù)據(jù),傳輸一位數(shù)據(jù)需要1s/9600=104us。在代碼中可以通過每發(fā)送或接收一位數(shù)據(jù)就延時104us來實現(xiàn)串口的數(shù)據(jù)傳輸。
1.2.5 舵機控制模塊程序設(shè)計
使用STM32控制SG90舵機,首先需產(chǎn)生基本的PWM 脈沖信號,本設(shè)計中舵機的信號線連接在STM32的PB9引腳,所以利用TIM4的CH4產(chǎn)生一路20ms 的脈沖信號,在該信號中,0.5ms 對應(yīng)-90 度,1.0ms對應(yīng)-45度,依次類推。其次是調(diào)整占空比,占空比為信號在整個信號周期內(nèi)處于高電平的時間百分比。PWM所使用的公式如下:
時鐘頻率f=f0(/ TIM_Prescaler+1)
其中,f0表示對應(yīng)定時器頻率,本設(shè)計中取值為72MHz。
脈沖周期T=(TIM_Period+1)/f
占空比N=TIM_Pulse M/ T
為使脈沖周期為20ms,在設(shè)計中令TIM_Period為1 999,TIM_Prescaler 為719,(2 000*720) /72 000 000=0.02=20ms,由于PB9 引腳是TIM4 的4 路PWM 輸出口,所以使用TIM_SetCompare4(TIM4,Compare4) 函數(shù)控制PWM輸出,想要舵機轉(zhuǎn)到0度位置,即TIM_Pulse為1.5ms,占空比為1.5ms/20ms=7.5%,只需令Com?pare4的值為2 000-2 000*0.075=1 850。
2 系統(tǒng)測試
2.1 人臉識別模塊測試
人臉識別模塊測試,如圖11所示。按下按鍵,在屏幕上顯示相應(yīng)的UID,未錄入人臉信息時進行人臉識別,舵機無法轉(zhuǎn)動,不能開門;錄入人臉信息后,進行人臉識別,識別成功后舵機能正常轉(zhuǎn)動,且屏幕上顯示W(wǎng)elcome字樣,如圖12所示,人臉識別模塊功能正常。而使用照片或錄制的人像視頻進行人臉識別時,識別不通過,進一步保證了門禁系統(tǒng)的安全性。
2.2 手機App 測試
本設(shè)計中實現(xiàn)的App可通過用戶手機錄入的指紋登錄或以貝殼物聯(lián)的設(shè)備號及密鑰作為用戶名和密碼登錄,如圖13所示,點擊開門按鈕后,舵機成功轉(zhuǎn)動后,主界面div框中打印相應(yīng)的時間和信息提示用戶門已打開。如圖14和15所示,每點擊一次生成二維碼按鈕,輸入框中的數(shù)值都相應(yīng)變化,考慮到若門禁系統(tǒng)斷電重啟,門禁端的開門密碼將變?yōu)槌跏贾?,所以在手機App上增加了重置按鈕,點擊該按鈕,密碼和加密密鑰都將變?yōu)槌跏贾?,確保手機端和門禁端密碼相同,手機App的功能均正常實現(xiàn)。
3 結(jié)論
針對目前存在的幾種門禁系統(tǒng)存在的安全性低、操作復(fù)雜、指紋磨損或臟污難以識別等問題,設(shè)計了以STM32F103C8T6最小核心板為主控,集人臉識別開門的便捷性、二維碼識別開門的安全性、App遠程開門的智能性為一體,兼具防盜報警功能的家庭智能門禁系統(tǒng)。經(jīng)軟硬件測試,本設(shè)計的功能均能夠?qū)崿F(xiàn),紅外傳感器一旦感應(yīng)到人,MF1模塊上電,可通過人臉識別開門,訪客到來可用手機App遠程一鍵開門,如果斷網(wǎng)可以通過手機App生成加密的一次性二維碼發(fā)給訪客掃碼開門,紅外傳感器感應(yīng)到人且震動傳感器感受到震動則觸發(fā)蜂鳴器響,短信模塊發(fā)送短信提醒。整個設(shè)計實現(xiàn)了智能門禁所需要的智能性、安全性、便利性等優(yōu)點。當(dāng)然,本次設(shè)計也有很多不足之處,比如手機App中無法保存開門數(shù)據(jù)等,后續(xù)可以與SQL數(shù)據(jù)庫結(jié)合進行優(yōu)化。