呂云飛,馮舒揚,蘭德鑫,劉成宇,戚諾凡
(哈爾濱理工大學 自動化學院,黑龍江哈爾濱,150080)
門禁系統存在的意義允許符合條件的人通過,禁止不符合條件的人進入宿舍。如今大多數高校的宿舍并沒有建立真正意義上的門禁系統,都是由管理人員守在宿舍門口,這種方式過于依賴管理員負責認真的心理和精力,且并不可靠,只有來往的人特征明顯不同于公寓內人員時,才能辨別出來。隨著科技的發展,信息識別技術種類越來越多,技術越來越成熟,對來往人員做身份信息識別,依靠人們的生理特征數據辨別是否符合通過門禁的條件,例如依靠人臉識別技術可以大大提高門禁系統的安全可靠性,同時減少人力資源消耗,更好地保障宿舍內同學的人身和財產安全,也為宿舍管理人員提供了很大的便利。
近兩年國內外的疫情形勢嚴峻,疫情防控已經成為了公共場所日常管理的重點工作。大學校園內人員流動密集、老師、同學和工作人員接觸頻繁,一旦發生病毒感染,就容易出現疫情的大面積擴散。體溫是新冠肺炎篩查的重要指標之一,但是平時學校并不能及時掌握學生的體溫狀況,只能通過學生自查,自覺上報的方式檢查體溫,校園中也很少設置體溫測量裝置,一些高校會在食堂、教學樓等學生來往密集的地方設置溫度檢測裝置,即使這樣,學校對學生進行體溫監測的覆蓋面積也并不全面,宿舍是同學們每天必經的場所,而每一位同學進出宿舍的時候都會經過門禁,所以在門禁系統處增加測溫裝置可以實現對每一位同學進行體溫監測,及時掌握進入宿舍的同學的溫度狀況,為學校疫情防控加上一把有力的“門鎖”。
單片機作為一種具有強大的數據存儲和指令發布能力的微型的計算機處理系統,隨著單片機技術的發展,單片機的功能逐漸強大。在宿舍安全未能實現智能化、信息化的今天,可以將單片機的使用投入到宿舍安全管理體系中,利用單片機同時實現采集、分析、處理溫度和身份信息數據,既可以提高門禁系統信息識別的可信程度,又可以讓建設科技校園更進一步,具有提高宿舍管理的便捷程度和門禁的可靠性,為宿舍內人員提供更好的安全保障的重大意義。
本文設計的系統以單片機為控制器,驅動圖像采集模塊,溫度采集模塊,信號燈模塊和顯示模塊,由上位機完成人臉識別和用戶界面設計,攝像頭和溫度傳感器分別負責采集包含人臉信息的圖像和體溫,單片機對采集到的數據進行分析和處理,將處理好的數據顯示在顯示模塊并傳遞給上位機,數據經過上位機解析顯示在用戶界面,系統對圖像數據進行人臉檢測和識別,將檢測結果返回給單片機,單片機綜合溫度檢測結果和人臉識別結果,如果符合條件,則允許通過,不符合條件則給出相應提示。系統結構框圖如圖1 所示。

圖1 系統結構框圖
在本次設計中,單片機需要驅動的設備有攝像頭、顯示屏和紅外溫度傳感器,分別使用SCCB 協議、SPI 協議和I2C 協議控制設備,除了控制外設,單片機還需要從讀取設備中的和數據進行分析處理,并與上位機建立通訊渠道。單片機從紅外溫度傳感器中讀取到數據之后進行數據處理,通過串口將數據發送到上位機,顯示在用戶界面上,從攝像機模塊讀取數據之后直接發送給上位機,由Qt 平臺進行數據解析,同時單片機對讀取到的數據進行分析處理,將攝像機捕獲的畫面復原,顯示在LCD 上。最后,單片機需要根據溫度數據比較結果和上位機反饋的人臉識別結果控制警示燈的狀態,提示工作人員。系統硬件執行流程圖如圖2 所示。

圖2 硬件執行流程圖
2.2.1 單片機的性能STM32 單片機采用了具有哈佛結構的ARM Cortex-M3系列的CPU,單片機的片上資源非常豐富,配備了 FLASH存儲器、靜態隨機存取存儲器,多個基本定時器和通用定時器,DMA 控制器。在通訊方面,單片機支持SPI 通訊、I2C 通訊和串口通訊,內置三個SPI 通訊接口,2 個I2C 通訊接口和5 個串口通訊接口,單片機兼容2.0V ~3.6V 的電源供電和I/O 口的供電電壓,內嵌多種頻率的晶振,可用于中央處理器的鎖相環和實時時鐘,芯片的最高工作頻率可達72MHz。
2.2.2 單片機的引腳
STM32 單片機共有144 個引腳,其中包括11 個3.3V的VDD 供電引腳,11 個GND 接地信號線,112 個I/O 口PA[15:0] ~ PG[15:0],這些I/O 口中,多數具有復用功能,可用作普通I/O 口驅動自己的外設。STM32 單片機的每個I/O口都具備7個控制寄存器,每個寄存器都需要32位數據控制,每一個端口的初始化都需要為其打開相應的時鐘,配置相應寄存器,選擇工作模式和工作速率,最后拉高端口電位。
圖像采集模塊使用了帶FIFO 存儲器的OV7725 鷹眼攝像頭,它的優勢在于體積小,靈敏度高且工作電壓低,使用單片機驅動時只需要接3.3V 的供電電壓。攝像頭支持SCCB 總線通訊,可以輸出分辨率為小于等于640×480 的8 位影像數據,每次輸出一幀,輸出的格式有很多種,有RGB、YUV 等,本設計中使用的輸出格式為RGB565。另外,攝像頭還支持多種自動控制和圖像質量控制,可以調節圖像的輸出質量。
溫度檢測部分采用MLX90614 測溫器,芯片根據Stefan-Boltzmann 定律進行工作,即所有物體都會放射IR能量,并且該能量的強度與物體的溫度成正比。傳感器中的感應器測量出目標物體發射的紅外能量,經過計算單元使用ADC 轉換為溫度值,傳感器在測量物體溫度時也會測量環境的溫度用來校準溫度值,最后再把數據通過IIC 總線發送至單片機。
MLX90614 的工作電壓在3.6V ~5V 之間,可測量的物體溫度范圍是-70℃~382.2℃,可以適應的環境溫度是-40℃~125℃,分辨率為0.02℃。測量物體的距離與傳感器視野范圍相關,視野范圍越寬,測量距離越近,本次設計采用10cm 左右的測溫距離。
芯片共有四個外接引腳,VCC 是芯片的供電引腳,可接3.3V 和5V 電源,GND 為接地引腳,SCL 是I2C 總線的時鐘線,用來控制數據傳輸,SDA 為數據總線,可供通訊雙方傳遞數據信息。
系統軟件執行流程圖如圖3 所示。

圖3 軟件執行流程圖
人臉識別部分代碼編寫是在Qt creator 平臺上完成的,分為兩個功能模塊:人臉識別和人臉數據添加。人臉識別技術需要先采集包含人臉信息的圖像,從獲取的圖像中框選出人臉部分區域,之后提取出人臉的特征與庫中的數據做對比,最后輸出對比結果,從而達到識別的目的,人臉識別具有唯一性和不可復制性的特點,非常適合應用于身份鑒別。
攝像頭采用OV7725 鷹眼攝像頭,其引腳分為數據線、信號線和控制線三大類。驅動攝像頭需要拉低片選信號,通過控制線寫入寄存器,達到控制攝像頭輸出的目的,數據線有FIFO 寄存器連接,攝像頭輸出的數據會先保存在存儲器中,單片機通過讀取存儲器獲取數據。
OV7725 使用的控制總線是SCCB 總線,它與I2C 總線相似,有兩線也有三線,兩線默認SIO_E 信號線為低電平,攝像頭上采用的是兩線制,也就是負責傳送數據的SIO_D(數據線)和提供時鐘源的SIO_C(時鐘線)。時鐘信號由單片機發出,高電平有效。啟動傳輸之后,時鐘引腳被拉低時數據開始傳輸,隨后信號線被拉高表示數據正在傳輸,在下一個數據開始傳送之前拉低引腳,如此反復指導全部數據被傳輸完畢。SIO_D 引腳的信號可雙向傳輸,這里被用來傳輸數據。其中,SCCB 總線時序圖如圖4 所示。

圖4 SCCB 總線時序圖
SCCB 總線的主要作用是寫寄存器,OV7725 共有172個寄存器,使用攝像頭模塊時需要先配置好寄存器才能使攝像頭的圖像傳感器正常工作,輸出畫質較好的圖像,但是這些寄存器并不是都需要配置,很多寄存器可以采用默認的值,寄存器初始化時只需要配置與視頻圖像流、采樣畫質、輸出格式等有關的幾個比較重要的寄存器就可以了。SCCB寫寄存器的流程是先發送設備的ID 地址,再發送要配置的目的寄存器的地址,最后傳輸要寫入的數據,如果是連續給寄存器寫地址,寫完一個寄存器后,寄存器地址會自動加1,配置OV7725 攝像頭寄存器時,采用了連續寫寄存器的方式,先寫入設備ID,再循環寫入寄存器數據。寄存器初始化完成之后,可以通過寫入對應寄存器進行色度、對比度、白平衡等功能設置,為配合顯示器,圖像窗口輸出要設置為QVGA 模式。OV7725 電路圖如圖5 所示。

圖5 OV7725 電路圖
在讀FIFO 存儲器中的數據時,單片機先向攝像頭發送允許寫入FIFO 的指令,等待場同步信號VSYNC 觸發中斷,表示寫入FIFO 完成,單片機再開始復位讀指針,復位結束之后讀取像素點,每讀取一個像素點,就要將讀數據時鐘拉低,讀取完成再拉高,以此類推按照從左往右,從上往下的順序讀取所有像素點。
系統測溫模塊采用MLX90614 紅外非接觸式溫度計,模塊支持PWM 和SMBus(系統管理總線)兩種輸出模式,默認為SMBus 輸出,單片機可以使用I2C 總線來驅動MLX90614 模塊,模塊中有一個EEPROM 和一個RAM,EEPROM 可讀可寫入,RAM 只能讀取,前者用來控制模塊,設置模塊的工作模式,后者用來讀取處理好的溫度數據。MLX90614 的控制信號線只有時鐘線SCL 和數據線SDA,與上述攝像頭數據傳遞方式相同,時鐘線被拉低時開始傳送數據,數據將在SCL 上升沿被主機讀取,每次按照先發送低八位,再發送高第八位的順序傳送一個字節的數據,模塊每完成一個字節的數據傳送,就要向主機發送校驗位數據表示發送完成,單片機讀取出來的數據是浮點型數據,使用顯示器顯示或者向上位機發送時,需要先拆分數據,按數字位操作。溫度傳感器引腳時序圖如圖6 所示。MLX90614 電路圖如圖7 所示。

圖6 溫度傳感器引腳時序圖

圖7 MLX90614 電路圖

圖8 ILI9341 內部結構圖
本次設計使用的顯示屏是由ILI9341 驅動IC 驅動的TFT_LCD,支持SPI 總線控制,圖像分辨率是320×240,在完成顯示屏驅動時,只需要向ILI9341 控制器發送指令和讀寫數據即可。
ILI9341 驅動IC 主要由GRAM、LCD 驅動電路,電源、接口電路等組成,GRAM 被稱為幀存儲器,用來存儲將要被顯示在屏幕上的圖像的信息,被顯示在屏幕上的每一幀圖像都是被分割成一個一個的像素,使用18 位的數據來表示像素的顏色,然后將一幀畫面中包含的所有的數據存放在幀存儲器中等待被使用。驅動顯示屏之后需要向控制寄存器中寫入需要放置圖像的位置,之后芯片計算出每個像素的地址并寫入相應的數據,從而改變GRAM 存儲器的內容,刷新顯示屏的顯示界面。
TFT-LCD 的常用控制指令包括讀取驅動器ID,幀存儲器掃描方向控制指令,設置顯示窗口像素格式控制指令,寫存儲器指令,讀存儲器指令以及初始化。顯示屏的初始化工作包括將LCD 復位,初始化寄存器和設置LCD 顯示方向,LCD 顯示方向是通過給LCD 重要參數結構體中的參數賦值實現的,像素格式和窗口顯示可以通過配置寄存器改變,寫存儲器和都存儲器通過SPI 總線實現。寫入數據之前,需要先寫入0x2C 指令,使行寄存器和列寄存器自動復位,此時發送的數據會被寫入幀存儲器對應的地址中。顯示屏刷新同樣需要先寫入0x2C 指令,再寫入數據,數據是從設置窗口的起始地址開始寫入,先寫行,行地址自增到該行的終止地址,列地址會自動加1,數據再從下一行的起始地址開始寫入,如此循環直到將窗口顯示的所有數據寫入幀存儲器中。設置幀存儲器掃描方向時,先發送0x36 指令,再發送18位的設置參數,其中2 ~7 位是有效位。
下位機操作主要由兩個按鍵完成,單片機復位后顯示屏被清屏,顯示為白色屏幕,當按下兩個按鍵中的任意一個時,信息采集外設開始工作。
按下KEY_UP 鍵后,紅外溫度傳感器開始工作,測得的題為被顯示在屏幕上,并且屏幕上有提示文字,當溫度符合要求時,屏幕上顯示The temperature is normal(溫度正常)字樣,同時,LED0 被點亮,若溫度不符合要求,屏幕上顯示Temperature abnormalities(溫度異常)字樣。如果用戶體溫檢測結果正常但還未進行人臉識別的檢測,屏幕中會出現Press another key 的字樣提示用戶下一步操作。測溫模塊工作顯示如圖9 所示。

圖9 測溫模塊工作顯示
按下另一個按鍵之后攝像頭開始工作,攝像頭每讀取一個像素點,就向LCD 存儲器中寫入數據,單片機同時將數據發送給上位機,當上位機判斷人臉識別成功時,單片機接收到信號,屏幕上顯示Recognition success(識別成功)字樣,同時LED1 被點亮,若未接收到識別成功的信號,顯示屏上會顯示Identification failed!(識別失?。┑淖謽?,如果兩盞燈都被點亮,屏幕上顯示Detection complete(檢測成功),表示用戶符合通過門禁的要求,兩秒之后兩盞燈都熄滅。如果第一次按下的按鍵是圖像采集的按鍵,人臉識別成功之后,LED1 被點亮,屏幕上顯示識別成功,并顯示按下另外一個按鍵的提示語,提示進行溫度檢測,若溫度符合要求,LED0 被點亮,屏幕顯示提示語Detection complete,表示檢測完成,隨后經過兩秒的延時,兩盞燈同時熄滅。人臉識別工作顯示如圖10 所示。

圖10 人臉識別工作顯示
本次設計綜合了單片機、傳感器、顯示屏和OpenCV的使用,完成了基于單片機的宿舍安全管理門禁系統的設計,設計使用STM32 單片機控制驅動硬件設備并且實現與上位機的通訊,單片機驅動攝像頭、溫度傳感器采集用戶信息,使用顯示屏展示信息采集結果,采集到的數據信息分別使用單片機和上位機識別程序進行分析處理,實現了對用戶進行測溫和人臉識別的功能。