宋天慧 曾建 錢進(jìn) 賈保凱 王靜








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