王 斌,施 杰,孫 鵬,董子琨,沈 鵬,寧旺云
(云南農(nóng)業(yè)大學機電工程學院,云南 昆明 650201)
由于住宅、辦公樓等場所盜竊、傷害等事件頻發(fā)[1],因此對門禁系統(tǒng)的安全性要求越來越高。目前常見的門禁系統(tǒng)主要有機械式、電子密碼式、射頻識別式、生物識別式(指紋識別、人臉識別)等,一般都是單重認證,它們在使用安全性、制造成本等方面各有優(yōu)劣。如傳統(tǒng)的機械門鎖使用不隱蔽且鑰匙易遺失、損壞;普通電子密碼鎖存在密碼易泄露、按鍵易失靈的缺點[2];射頻識別門禁系統(tǒng)雖然應用最廣泛,成本也較低,但存在認卡不認人的缺陷;生物識別門禁系統(tǒng)無需攜帶卡片等介質(zhì),識別重復率低,安全性也高,但識別速度慢、制造成本較高。除機械式門禁系統(tǒng)外,其他門禁系統(tǒng)還普遍存在系統(tǒng)斷電時無法開鎖的缺陷。
本文在Proteus軟件平臺上,設計了一種以Arduino單片機為控制單元,將密碼判斷與射頻識別有機結合的雙重認證門禁系統(tǒng),通過多次Proteus仿真與對原型系統(tǒng)功能實際測試,結果表明:該系統(tǒng)具有斷電定時開鎖、聲光報警、門禁管理、人機交互等功能,與目前常見單重認證門禁系統(tǒng)相比具有成本低、安全性高、維護方便等優(yōu)點,可推廣使用。
如圖1所示,該系統(tǒng)具有斷電定時開鎖、身份認證、聲光報警、門禁管理(密碼修改、IC卡授權與撤銷,IC卡個人信息修改)、人機交互(時間顯示、持卡人信息顯示、歡迎與警告界面顯示)等功能。
雙重認證門禁系統(tǒng)的工作流程如圖2所示。當系統(tǒng)運行時,顯示模塊顯示當前時間,并提示用戶輸入密碼,系統(tǒng)將輸入的密碼與系統(tǒng)設定的密碼進行比較,若正確,綠燈點亮同時顯示模塊提示用戶輸入IC卡,接著射頻識別模塊檢測是否有IC卡靠近,若有,讀取IC卡的ID號,同時判斷該卡是否已經(jīng)授權,若授權,顯示模塊和聲光報警模塊開啟歡迎模式,開鎖控制模塊完成開鎖動作;若密碼輸入錯誤2次或IC卡為未授權卡,聲光報警模塊則開啟報警模式。
圖1 系統(tǒng)功能結構圖
該雙重認證門禁系統(tǒng)主要由單片機控制單元、射頻識別模塊、矩陣鍵盤密碼輸入模塊、LCD1602顯示模塊、聲光報警模塊、時鐘模塊、開鎖控制模塊、斷電定時開鎖模塊組成。經(jīng)綜合考慮,系統(tǒng)選擇Arduino Mega 2560單片機作為核心控制單元。
Arduino Mega 2560單片機是Arduino單片機中的高端產(chǎn)品,它的處理器為ATmega 2560,具有54個數(shù)字輸入輸出接口、16個模擬輸入輸出接口、1個USB接口及8KB RAM和4KB EEPROM、128KB閃存[3],因此能最大程度地滿足系統(tǒng)開發(fā)的要求。
圖2 系統(tǒng)工作流程圖
系統(tǒng)硬件結構如圖3所示,各模塊與Arduino Mega 2560單片機不同的引腳連接完成后就組成了雙重認證門禁系統(tǒng)的硬件。
圖3 系統(tǒng)硬件結構圖
1)射頻識別模塊。
選取MFRC522作為系統(tǒng)的射頻識別模塊。由于其天線是內(nèi)置在芯片中的,因此該模塊具有體積小、安全系數(shù)高等優(yōu)點。該模塊與單片機之間采用SPI接口進行通信,精度高且工作穩(wěn)定。用戶使用S50 IC卡與該射頻識別模塊中的讀卡器進行無線通信以達到身份驗證的目的,讀卡器還支持寫的工作模式,修改用戶信息較簡便。
2)時鐘模塊。
從方便使用的角度考慮,該模塊采用美國DALLAS公司推出的一種高性能、低功耗、帶RAM的RTC實時鐘——DS1307時鐘芯片[4]。DS1307時鐘芯片外接頻率為32.768kHz的晶體諧振器和3V的銀芯紐扣電池以及100μF的電容,因為32.768kHz=215Hz,即分頻15次后為1Hz,周期=1s,所以選用32.768kHz的晶體諧振器較合適[5]。3V銀芯紐扣電池為備份電源,保證主電源關閉后時鐘仍能正常運行。時鐘電路原理圖如圖4所示。
圖4 DS1307時鐘芯片電路原理圖
3)開鎖控制模塊。
如圖5所示,開鎖控制模塊由繼電器、1N4001型二極管、2N2222型三極管、電阻、外部電源以及電磁門鎖裝置構成。由于Arduino單片機的數(shù)字引腳最大輸出電流小于40mA,而該模塊中繼電器的工作吸合電流為65mA,單片機引腳輸出電流達不到驅(qū)動繼電器的吸合電流,故必須選用合適的三極管來放大電流。
圖5 開鎖控制模塊電路原理圖
當三極管由放大狀態(tài)變?yōu)榻刂範顟B(tài)時,繼電器線圈會產(chǎn)生一個過大的反向電壓即自感電動勢,該反向電壓與電源電壓疊加后加到三極管集電極、發(fā)射極上,可能導致發(fā)射極被擊穿。為防止反向擊穿,在繼電器線圈兩端反向并聯(lián)一個續(xù)流二極管,通過續(xù)流二極管導通形成的環(huán)流將自感電壓釋放,起到保護三極管的作用。由于本模塊中電磁鎖的額定電壓為直流12V,與單片機額定電壓5V不同,為方便起見,采用4節(jié)3V可充電電池供電。
4)聲光報警模塊。
如圖6所示,該模塊由紅色LED、綠色LED、蜂鳴器、限流電阻組成。單片機控制單元將檢測到的數(shù)據(jù)與存儲的數(shù)據(jù)進行比對,若相同則綠色LED亮,蜂鳴器發(fā)出樂曲聲,反之則紅色LED亮,蜂鳴器發(fā)出警報聲。發(fā)光二極管也具有單向?qū)ㄐ裕ㄟ^5mA左右的電流即可正常發(fā)光,且電流越大,二極管亮度越高,但是倘若電流過大,則影響其壽命甚至直接燒毀。Arduino電源額定電壓VCC為5V,據(jù)此可算出發(fā)光二極管的限流電阻R1=R2=5V/5mA=1kΩ,因此在發(fā)光二極管一側加上阻值為1kΩ的限流電阻即可保證其正常發(fā)光。聲光報警模塊不僅包括發(fā)光二極管還應包括一只蜂鳴器用于發(fā)出警報。只有當大于20mA的電流通過時,蜂鳴器才發(fā)出警報聲,據(jù)此計算出其限流電阻值為R9=5V/20mA=250Ω。因此在蜂鳴器一側串聯(lián)1個100Ω的電阻,即可保證蜂鳴器正常工作。
圖6 聲光報警模塊電路原理圖
5)斷電定時開鎖模塊。
目前常見的門禁系統(tǒng)普遍存在系統(tǒng)斷電時無法開鎖的問題。為解決此問題,本系統(tǒng)特別設計了斷電定時開鎖模塊,如圖7所示,該模塊由按鈕、開關、下拉電阻組成。當系統(tǒng)斷電時,用戶可先通過充電寶等外接電源給系統(tǒng)供電,然后進入設定時間界面:當開關1或開關2被按下時,數(shù)字引腳13為+5V(高電平),未按下時接地為0V(低電平),讀取該引腳的電平值,可以知道是處于時間設置模式(引腳13為高電平)還是開鎖觸發(fā)模式(引腳12為高電平),或是只處于顯示時間模式(引腳13和引腳12都為低電平)。若引腳13為高電平,則進入設定時間模式,為防止陌生人利用系統(tǒng)斷電的情況給系統(tǒng)外接電源進行開鎖,系統(tǒng)首先要求用戶輸入密碼,密碼正確才能設定時鐘和分鐘。當按下按鈕1或按鈕2時,系統(tǒng)檢測到引腳11或引腳10為高電平,分別增加時鐘或分鐘,然后按下按鈕2,系統(tǒng)顯示當前時間,最后按下按鈕1,觸發(fā)開鎖模式,以此來實現(xiàn)斷電定時開鎖的功能。綜合考慮功耗節(jié)約與足夠的電流驅(qū)動,選用330Ω的下拉電阻。
圖7 斷電定時開鎖模塊電路原理圖
6)其他模塊。
矩陣鍵盤密碼輸入模塊采用的是4×4矩陣鍵盤。用戶通過鍵盤輸入密碼,控制單元根據(jù)輸入密碼的有效性控制其他模塊做出相應的操作。
LCD1602顯示模塊由LCD1602顯示屏和電位器構成,可顯示數(shù)字、字符和字母,實現(xiàn)人機信息交互,其工作電壓為3.3V~5V。顯示屏的對比度由電位器調(diào)節(jié)。正常運行狀態(tài)下顯示當前時間,開鎖過程中顯示輸入密碼位數(shù)和IC卡的ID號等。
系統(tǒng)硬件模塊只是門禁系統(tǒng)的骨骼,要讓它們發(fā)揮各自的作用就得靠軟件的幫助。軟件設計包括應用程序流程和算法設計兩部分,門禁系統(tǒng)程序包括密碼輸入及比對程序、控制系統(tǒng)讀取ID號及比對程序、密碼修改程序、斷電定時開鎖程序、開鎖控制程序、時鐘電路讀寫以及LCD顯示程序。系統(tǒng)程序流程圖如圖8所示。
系統(tǒng)軟件采用C語言編程,以Arduino IDE為開發(fā)環(huán)境。系統(tǒng)程序要求用戶先通過矩陣鍵盤輸入密碼,正確后系統(tǒng)再對用戶出示的射頻識別IC卡進行授權驗證,若二者皆符合則執(zhí)行開鎖命令。以下僅列出系統(tǒng)的幾個主要算法——密碼輸入及比對算法、系統(tǒng)讀取ID號及比對算法、斷電定時開鎖算法。
1)密碼輸入及比對算法。
void keypad( ){
char key = getKey();
圖8 程序流程圖
codeBuffer[keypressCount]=key;
if( key != 0) {
keypressCount++;
if (keypressCount==6){
delay(500);
if (memcmp(codeBuffer, code,6)==0) {
rfid( );}//調(diào)用射頻識別子函數(shù)
memset(codeBuffer, 0, 6);//密碼達6位重輸入
keypressCount=0; }}}
2)系統(tǒng)讀取ID號及比對算法。
void rfid( ){
uchar status;
uchar str[MAX_LEN]; //搜尋卡片
status=MFRC522_Request(PICC_REQIDL, str); if (status != MI_OK) { return; }
status = MFRC522_Anticoll(str);
if (status == MI_OK)
{memcpy(serNum, str, 5);
ShowCardID(serNum);//輸出卡ID號
uchar* id = serNum; // 檢測IC卡是否授權
if(id[0]==0x49&&id[1]==0x6F&&id[2]==0x0D&&id[3]==0x23) {
unlock();} } } //調(diào)用開鎖子函數(shù)
3)斷電定時開鎖算法。
void timing ( ){
int alarmArmed=digitalRead
(alarmArmedPin); //讀取12引腳電平值
if (alarmArmed==HIGH){armed=true;
} else {armed=false;}
if(armed){ if (!alarm){
checkAlarm(); } else {unlock();//開鎖
alarm=false;}}
int setMode = digitalRead(alarmSetPin);
if (setMode==HIGH){//讀取13引腳電平值
displayAlarmSet=true;
setAlarm(); }//設定時間
else { displayAlarmSet=false;}}
對于一個實際應用項目,如果設計方案存在原理性錯誤,將會浪費許多不必要的開銷和時間。利用Proteus仿真軟件對原理電路進行仿真,可以及時發(fā)現(xiàn)設計中的問題[7]。
Proteus 最新的8.4版本中集成了Arduino編譯器,只需要設置好編譯器就能直接進行仿真實驗。由于Proteus元件庫沒有電磁鎖和射頻識別模塊,這里用一只12V白熾燈元件等效代替電磁鎖。射頻識別模塊功能的檢驗放在原型系統(tǒng)中進行,這里只對密碼輸入及比對功能和斷電定時開鎖功能進行仿真。在Proteus軟件中進行電氣規(guī)則檢查無誤后,點擊仿真按鈕,得到密碼輸入及比對功能與斷電定時開鎖功能仿真結果如圖9所示。
圖9(a)顯示,當密碼輸入正確后綠色LED點亮,蜂鳴器發(fā)出樂曲聲,顯示模塊顯示密碼輸入正確同時提示用戶輸入IC卡,隨后白熾燈也被點亮,表示開鎖控制模塊工作正常。
圖9(b)顯示,當斷電定時開鎖模塊按鈕2被按下,用戶輸入密碼正確后,顯示模塊提示用戶設定開鎖小時與分鐘,表示該模塊工作正常。
通過Proteus仿真,各個模塊都能實現(xiàn)其相應的功能,驗證了系統(tǒng)總體設計的可行性。
圖10所示為原型系統(tǒng)硬件結構實物圖。
系統(tǒng)實現(xiàn)結果也表明:各個模塊都能實現(xiàn)其相應的功能,且運行穩(wěn)定、防盜保密效果好,原型系統(tǒng)成功實現(xiàn)了系統(tǒng)總體設計要求。
圖9 Proteus仿真結果
本文設計了一種以Arduino單片機作為控制單元、密碼和射頻識別相結合的雙重認證門禁系統(tǒng)。運用Proteus軟件進行仿真,有效驗證了前期理論設計結果的正確性。對制作的原型系統(tǒng)進行試驗,系統(tǒng)各模塊工作正常且平穩(wěn),安全性高。該系統(tǒng)有效彌補了目前單重認證門禁系統(tǒng)普遍存在的安全性低、成本高、斷電無法開鎖等不足,其成功的設計對于Arduino單片機在其他場合的應用有一定的參考價值。
圖10 原型系統(tǒng)硬件結構實物圖