天天看點

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

文章目錄

  • 1 簡介
  • 2 緒論
    • 2.1 課題背景與目的
  • 3 射頻識别
    • 3.1 射頻識别技術
    • 3.2 射頻識别子產品
      • 3.2.1 RFID子產品
      • 3.2.2 RFID子產品組成
  • 4 系統設計
    • 4.1 系統架構
      • 4.1.1 硬體部分
      • 4.1.2 軟體部分
    • 4.2 軟體總體流程圖
    • 4.3 密碼子程式
    • 4.4 資料采集子程式
    • 4.5 顯示子程式
    • 4.6 存儲子程式
  • 5 指紋識别部分
    • 5.1 指紋識别子產品的程式設計
      • 5.2 指紋錄入
      • 5.3 指紋識别代碼流程
    • 5.4 顯示屏程式設計
    • 5.5 整體業務邏輯代碼流程
  • 6 最後

1 簡介

Hi,大家好,這裡是丹成學長,今天向大家介紹一個 如何使用RFID技術建構一個單片機門禁系統

基于stm32的RFID與指紋識别的門禁系統 (項目開源)

大家可用于 課程設計 或 畢業設計

🧿 項目分享:

https://gitee.com/sinonfin/sharing

實作效果

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

2 緒論

2.1 課題背景與目的

門禁安全管理系統是新型現代化安全管理系統, 它集自動識别技術和現代安全管理措施為一體。 門禁系統可有效管理門的開啟關閉, 對出入人員進行監控管理。 基于RFID的門禁系統通過對射頻IC卡的識别, 保證那些持有相應證件的人員能自由進出, 阻止外來人員或無法提供證件的人員進入。 還有些門禁是利用生物識别的技術, 通過對人體某些部位(如眼睛、 指紋) 的識别來确認來人是否經過授權。 這種門禁系統相對射頻識别的系統安全系數有很大提高, 但其成本較高, 在日 常生活中還未廣泛應用。

3 射頻識别

3.1 射頻識别技術

射頻識别(Radio Frequency Identification, RFID) 技術是從八十年代逐漸走向成熟的一種自 動識别技術, 它 是一項利用 射頻信号通過空間耦合(交變磁場或電磁場)實作無接觸資訊傳遞并通過所傳遞的資訊達到識别目 的的技術。

根據射頻卡讀寫方式的不同可分成可讀寫(RW) 卡、 一次寫入多次讀出(WORM) 卡和隻讀(RO) 卡。 RW 卡成本較 WORM 卡和 RO 卡相比要高, 而且寫入資料所花費的時間要遠大于讀取資料所花費的時間。 使用者可以一次性将資訊寫入 WORM 卡, 寫入後資料不能改變。 RO 卡存有一個唯一的号碼。 隻可讀取, 不能修改, 雖然安全性較高, 但用途有限。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

3.2 射頻識别子產品

3.2.1 RFID子產品

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

射頻識别「Radio Frequency IDentification,簡稱RFID」技術,又稱為無線射頻識别,是一種通信技術,可通過無線電訊号識别特定目标并讀寫相關資料,而無需識别系統與特定目标之間建立機械或光學接觸,普遍應用于企業/校園一卡通、公交儲值卡、高速公路收費、停車場、小區管理等。

RFID 技術利用無線射頻方式在閱讀器和射頻卡之間進行非接觸雙向資料傳輸,以達到目辨別别和資料交換的目的。

3.2.2 RFID子產品組成

  • 标簽(Tag,即射頻卡),耦合元件及晶片組成,标簽含有内置天線,用于和射頻天線間進行通信。
  • 閱讀器:讀取(在讀寫卡中還可以寫入)标簽資訊的裝置。
  • 天線:在标簽和讀取器間傳遞射頻信号。

這裡使用的RFID-RC522子產品采用MFRC522晶片,SPI通訊方式,支援Mifarel S50、S70 、Pro、Desfire等類型的卡,附帶的白卡和鑰匙扣是S50卡,每張卡都有自己的辨別(UID)。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

4 系統設計

本系統的主要電路包括: 讀卡器資料采集電路、 串行 E 2 PROM 存儲電路、 LCD1602 顯示電路、 序列槽通訊電路、 報警電路、 門控電路、 鍵盤電路。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

器件清單

    1. 主要晶片: AT89C52。
    1. 讀卡器: YHY502ATG。
    1. E 2 PROM: AT24C04。
    1. LCD 液晶: ZL1602C2。
    1. 序列槽通訊晶片: MAX232。
    1. 報警器: 1 個蜂鳴器加一個 LED 紅燈。
    1. 門控器件: 一個 LED 綠燈。

4.1 系統架構

4.1.1 硬體部分

LCD1602 顯示電路設計

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

序列槽通訊電路設計

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

報警電路設計

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

4.1.2 軟體部分

在本系統中, 軟體的設計主要包括: 資料采集子產品、 存儲子產品、 顯示子產品、 門控子產品、 報警子產品、 鍵盤子產品和上位機軟體的設計幾個方面。 本系統的軟體結構框圖如圖 4-1 所示。

    1. 資料采集子產品: 讀卡器 YHY502ATG 通過天線讀取 RFID 卡的資料,然後将資料傳送出去。
    1. 存儲子產品: AT89C52 接收到資料後, 将資料傳送給 AT24C04 進行存儲。
    1. 顯示子產品: AT89C52 接收到資料後, 将資料與 AT24C04 裡存儲的資料進行對比, 若兩者完全相同, 則液晶顯示正确的資訊; 若不相同, 則液晶顯示錯誤的資訊。
    1. 門控子產品: AT89C52 接收到資料後, 将資料與 AT24C04 裡存儲的資料進行對比, 若兩者完全相同, 則進行開門操作; 若不相同, 則不開門。
    1. 報警子產品: AT89C52 接收到資料後, 将資料與 AT24C04 裡存儲的資料進行對比, 若不相同則報警。
    1. 鍵盤子產品: 通過鍵盤輸入密碼, 并根據輸入密碼的有效性做相應的操作。
      畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

4.2 軟體總體流程圖

系統的軟體總體流程圖如圖

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

4.3 密碼子程式

當程式運作時, 會一直判斷是否有按鍵被按下, 當有按鍵被按下時, 系統會确定鍵值, 關将鍵值存入到密碼數組裡, 然後将輸入的密碼與本身的密碼做比較, 若相同, 則執行開門和顯示正确資訊的操作; 若不相同, 則執行報警和顯示錯誤資訊的操作。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

核心代碼:

P1=0x0f;
if(P1!=0x0f) compare(P1);
for(n=0;n<10;n++)
if(input[n]!=password[n]) break;
if(n==10)
{ if(m<10) continue;
WriteLcdCom(0x01);   //清屏
WriteLcdCom(0x80);  //第一行資料指針位址
for(s=0;s<16;s++)
 WriteLcdDat(str2[s]);
LEDG=0;
BUZ=0;
delay_10ms(20);
LEDG=1;
BUZ=1;
WriteLcdCom(0x01);
input[0]=" "; }
else if((n<10)&&(P1==0xbd))
{ WriteLcdCom(0x01);   //清屏
WriteLcdCom(0x80);  //第一行資料指針位址
for(s=0;s<16;s++)
WriteLcdDat(str4[s]);
LEDR=0;
for(s=0;s<5;s++)
{ BUZ=0;
delay_10ms(20);
BUZ=1;
delay_10ms(20); }
LEDR=1; }

           

4.4 資料采集子程式

執行程式之前, 首先要設定序列槽波特率等相關序列槽參數, 然後上位機通過序列槽向下位機發送指令, 并進入序列槽中斷。 下位機根據接收 SBUF 的值做相應的處理。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

核心程式

uchar uart_process(void)
{uchar cmd;
uchar cStatus;
cmd = g_cReceBuf[1];
switch(cmd)
{case 0x20: // 尋卡, 防沖突, 選擇卡傳回卡系列号(4 bytes)
cStatus =IicSendHY502(g_cReceBuf);  // 發送尋卡指令
cStatus =IicReadHY502(cp);   // 讀取卡号并存入到 cP
if((cStatus==SUCCESS)&&(cp[1]==CARD_SN))
{memcpy(&g_cReceBuf[0],&cp[2],4);
eeprom();}}//将讀取到的卡序列号與 E 2 PROM 裡存儲的進行比較
return cStatus;}
開始
上位機發送讀卡指令
Y
Y
N
N
有感應卡 ?
驗證感應卡權限
權限滿足?
開門, 顯示正确資訊
報警, 顯示錯誤資訊
延時後, 自動關門
結束

           

4.5 顯示子程式

顯示子程式的主要功能是對目前的門控狀态進行顯示, 顯示函數首先判斷是寫指令操作還是寫資料操作, 若是寫指令操作, 則根據指令進行相應的操作, 如清屏、 設定顯示模式等; 若是寫資料操作, 則在顯示器上顯示相應資料。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

核心程式

void LcdShowError()
{ WriteLcdCom(0x38);  //顯示模式設定
WriteLcdCom(0x0c);  //開顯示, 無光标, 光标不閃爍
WriteLcdCom(0x06);  //讀寫字元後位址指針加一設定
WriteLcdCom(0x80); //第一行資料指針位址
for(k=0;k<16;k++)
{WriteLcdDat(str3[k]);
delay(20); }
WriteLcdCom(0xc0); //第二行資料指針位址

for(k=0;k<16;k++)
{ WriteLcdDat(str4[k]);
delay(20);}
WriteLcdCom(0x01);  }
void WriteLcdCom(unsigned char c)
{ LCDRW =00;
LCDRS=0;   //切換到寫指令
P0=c;
LCDE=1;
LCDE=0;
for(a=0;a<20;a++);}
void WriteLcdDat(unsigned char d)
{ LCDRW =00;
LCDRS=1;    //切換到寫資料
P0=d;
LCDE=1;
LCDE=0;
for(a=0;a<20;a++);}

           

4.6 存儲子程式

本設計中資料的存儲晶片選用的是 AT24C04, 該晶片是串行的 E 2 PROM,支援 I 2 C 總線資料傳送協定。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

核心程式

void eeprom()
{write_byte(0,0x1e);
write_byte(1,0xda); write_byte(2,0x62); write_byte(3,0xb6);
write_byte(4,0x25); write_byte(5,0xee); write_byte(6,0xde);
write_byte(7,0xb6); write_byte(8,0x05); write_byte(9,0xc8);
write_byte(10,0x43);write_byte(11,0xb8);write_byte(12,0x3a);
write_byte(13,0x04);write_byte(14,0x5d);write_byte(15,0xb6);}
bit shout(uchar write_data)// 從 MCU 移出資料到 AT24C04
{uchar i; bit ack_bit;
for(i = 0; i < 8; i++) // 循環移入 8 個位
{SDA1 = (bit)(write_data & 0x80);
_nop_();
SCL1 = 1;
delayNOP();
SCL1 = 0;
write_data <<= 1; }
SDA1 = 1;  // 讀取應答
delayNOP();
SCL1 = 1;
delayNOP();
ack_bit = SDA1;
SCL1 = 0;
return ack_bit;  // 傳回 AT24C04 應答位
}
void  write_byte(uchar  addr,  uchar write_data)  //  在 指 定 地 址 addr 
處寫入資料 write_data
{ start();
shout(OP_WRITE);
shout(addr);
shout(write_data);
stop();
delay_10ms(1); }

           

5 指紋識别部分

5.1 指紋識别子產品的程式設計

指紋識别子產品需要完成的工作有:擷取指紋圖像,生成指紋特征模闆,儲存指紋特征模闆和比對指紋等工作,單片機根據子產品的指令系統,給子產品發送指令資訊,來控制子產品完成相應的工作。

5.2 指紋錄入

指紋錄入過程, 用于新使用者的注冊, 當有新使用者需要注冊時, 就先在指紋頭處擷取使用者的指紋圖像, 在将之生成指紋特征模闆, 在儲存起來, 這樣就完成了新使用者的注冊。

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

5.3 指紋識别代碼流程

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

5.4 顯示屏程式設計

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

5.5 整體業務邏輯代碼流程

軟體使用 Keil C51 版本, 主程式采用 c 語言編寫。 單片機對指紋識别子產品發送指令, 得到識别結果, 在根據這個結果來控制顯示子產品、 語音子產品和電子鎖子產品。 程式的主流程圖如下所示:

畢業設計 基于stm32的RFID與指紋識别的門禁系統 (項目開源)1 簡介2 緒論3 射頻識别4 系統設計5 指紋識别部分6 最後

6 最後

🧿 項目分享:

https://gitee.com/sinonfin/sharing

繼續閱讀