1 簡(jiǎn)介
Hi,大家好,這里是丹成學(xué)長(zhǎng),今天向大家介紹一個(gè) 如何使用RFID技術(shù)構(gòu)建一個(gè)單片機(jī)門(mén)禁系統(tǒng)
基于RFID的門(mén)禁系統(tǒng)
大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì)
單片機(jī)-嵌入式畢設(shè)選題大全及項(xiàng)目分享:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-777517.html
https://blog.csdn.net/m0_71572576/article/details/125409052文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777517.html
本篇博客,學(xué)長(zhǎng)先向大家介紹射頻識(shí)別技術(shù)的概念、 分類(lèi)及工作原。然后介紹 本次使用的射頻芯片 MFRC522。
RFID 系統(tǒng)設(shè)計(jì)可分為硬件部分和軟件部分。
硬件部分以 MFRC522 射頻識(shí)別模塊為核心, 結(jié)合主控模塊 STC89C52 設(shè)計(jì)系統(tǒng)的外圍硬件電路, 實(shí)現(xiàn)對(duì)射頻卡的控制與 MCU 之間的互通。 軟件部分采用 C 語(yǔ)言進(jìn)行系統(tǒng)的下位機(jī)程序的開(kāi)發(fā), 完成與 IC 卡之間的通信, 實(shí)現(xiàn)數(shù)據(jù)交換功能。
2 緒論
2.1 課題背景與目的
門(mén)禁安全管理系統(tǒng)是新型現(xiàn)代化安全管理系統(tǒng), 它集自動(dòng)識(shí)別技術(shù)和現(xiàn)代安全管理措施為一體。 門(mén)禁系統(tǒng)可有效管理門(mén)的開(kāi)啟關(guān)閉, 對(duì)出入人員進(jìn)行監(jiān)控管理。 基于RFID的門(mén)禁系統(tǒng)通過(guò)對(duì)射頻IC卡的識(shí)別, 保證那些持有相應(yīng)證件的人員能自由進(jìn)出, 阻止外來(lái)人員或無(wú)法提供證件的人員進(jìn)入。 還有些門(mén)禁是利用生物識(shí)別的技術(shù), 通過(guò)對(duì)人體某些部位(如眼睛、 指紋) 的識(shí)別來(lái)確認(rèn)來(lái)人是否經(jīng)過(guò)授權(quán)。 這種門(mén)禁系統(tǒng)相對(duì)射頻識(shí)別的系統(tǒng)安全系數(shù)有很大提高, 但其成本較高, 在日 常生活中還未廣泛應(yīng)用。
3 射頻識(shí)別
3.1 射頻識(shí)別技術(shù)
射頻識(shí)別(Radio Frequency Identification, RFID) 技術(shù)是從八十年代逐漸走向成熟的一種自 動(dòng)識(shí)別技術(shù), 它 是一項(xiàng)利用 射頻信號(hào)通過(guò)空間耦合(交變磁場(chǎng)或電磁場(chǎng))實(shí)現(xiàn)無(wú)接觸信息傳遞并通過(guò)所傳遞的信息達(dá)到識(shí)別目 的的技術(shù)。
根據(jù)射頻卡讀寫(xiě)方式的不同可分成可讀寫(xiě)(RW) 卡、 一次寫(xiě)入多次讀出(WORM) 卡和只讀(RO) 卡。 RW 卡成本較 WORM 卡和 RO 卡相比要高, 而且寫(xiě)入數(shù)據(jù)所花費(fèi)的時(shí)間要遠(yuǎn)大于讀取數(shù)據(jù)所花費(fèi)的時(shí)間。 用戶(hù)可以一次性將信息寫(xiě)入 WORM 卡, 寫(xiě)入后數(shù)據(jù)不能改變。 RO 卡存有一個(gè)唯一的號(hào)碼。 只可讀取, 不能修改, 雖然安全性較高, 但用途有限。
3.2 射頻識(shí)別模塊
3.2.1 RFID模塊
射頻識(shí)別「Radio Frequency IDentification,簡(jiǎn)稱(chēng)RFID」技術(shù),又稱(chēng)為無(wú)線(xiàn)射頻識(shí)別,是一種通信技術(shù),可通過(guò)無(wú)線(xiàn)電訊號(hào)識(shí)別特定目標(biāo)并讀寫(xiě)相關(guān)數(shù)據(jù),而無(wú)需識(shí)別系統(tǒng)與特定目標(biāo)之間建立機(jī)械或光學(xué)接觸,普遍應(yīng)用于企業(yè)/校園一卡通、公交儲(chǔ)值卡、高速公路收費(fèi)、停車(chē)場(chǎng)、小區(qū)管理等。
RFID 技術(shù)利用無(wú)線(xiàn)射頻方式在閱讀器和射頻卡之間進(jìn)行非接觸雙向數(shù)據(jù)傳輸,以達(dá)到目標(biāo)識(shí)別和數(shù)據(jù)交換的目的。
3.2.2 RFID模塊組成
- 標(biāo)簽(Tag,即射頻卡),耦合元件及芯片組成,標(biāo)簽含有內(nèi)置天線(xiàn),用于和射頻天線(xiàn)間進(jìn)行通信。
- 閱讀器:讀取(在讀寫(xiě)卡中還可以寫(xiě)入)標(biāo)簽信息的設(shè)備。
- 天線(xiàn):在標(biāo)簽和讀取器間傳遞射頻信號(hào)。
這里使用的RFID-RC522模塊采用MFRC522芯片,SPI通訊方式,支持Mifarel S50、S70 、Pro、Desfire等類(lèi)型的卡,附帶的白卡和鑰匙扣是S50卡,每張卡都有自己的標(biāo)識(shí)(UID)。
4 系統(tǒng)設(shè)計(jì)
本系統(tǒng)的主要電路包括: 讀卡器數(shù)據(jù)采集電路、 串行 E 2 PROM 存儲(chǔ)電路、 LCD1602 顯示電路、 串口通訊電路、 報(bào)警電路、 門(mén)控電路、 鍵盤(pán)電路。
器件列表
-
- 主控芯片: AT89C52。
-
- 讀卡器: YHY502ATG。
-
- E 2 PROM: AT24C04。
-
- LCD 液晶: ZL1602C2。
-
- 串口通訊芯片: MAX232。
-
- 報(bào)警器: 1 個(gè)蜂鳴器加一個(gè) LED 紅燈。
-
- 門(mén)控器件: 一個(gè) LED 綠燈。
4.1 系統(tǒng)架構(gòu)
4.1.1 硬件部分
LCD1602 顯示電路設(shè)計(jì)
串口通訊電路設(shè)計(jì)
報(bào)警電路設(shè)計(jì)
4.1.2 軟件部分
在本系統(tǒng)中, 軟件的設(shè)計(jì)主要包括: 數(shù)據(jù)采集模塊、 存儲(chǔ)模塊、 顯示模塊、 門(mén)控模塊、 報(bào)警模塊、 鍵盤(pán)模塊和上位機(jī)軟件的設(shè)計(jì)幾個(gè)方面。 本系統(tǒng)的軟件結(jié)構(gòu)框圖如圖 4-1 所示。
-
- 數(shù)據(jù)采集模塊: 讀卡器 YHY502ATG 通過(guò)天線(xiàn)讀取 RFID 卡的數(shù)據(jù),然后將數(shù)據(jù)傳送出去。
-
- 存儲(chǔ)模塊: AT89C52 接收到數(shù)據(jù)后, 將數(shù)據(jù)傳送給 AT24C04 進(jìn)行存儲(chǔ)。
-
- 顯示模塊: AT89C52 接收到數(shù)據(jù)后, 將數(shù)據(jù)與 AT24C04 里存儲(chǔ)的數(shù)據(jù)進(jìn)行對(duì)比, 若兩者完全相同, 則液晶顯示正確的信息; 若不相同, 則液晶顯示錯(cuò)誤的信息。
-
- 門(mén)控模塊: AT89C52 接收到數(shù)據(jù)后, 將數(shù)據(jù)與 AT24C04 里存儲(chǔ)的數(shù)據(jù)進(jìn)行對(duì)比, 若兩者完全相同, 則進(jìn)行開(kāi)門(mén)操作; 若不相同, 則不開(kāi)門(mén)。
-
- 報(bào)警模塊: AT89C52 接收到數(shù)據(jù)后, 將數(shù)據(jù)與 AT24C04 里存儲(chǔ)的數(shù)據(jù)進(jìn)行對(duì)比, 若不相同則報(bào)警。
-
- 鍵盤(pán)模塊: 通過(guò)鍵盤(pán)輸入密碼, 并根據(jù)輸入密碼的有效性做相應(yīng)的操作。
- 鍵盤(pán)模塊: 通過(guò)鍵盤(pán)輸入密碼, 并根據(jù)輸入密碼的有效性做相應(yīng)的操作。
4.2 軟件總體流程圖
系統(tǒng)的軟件總體流程圖如圖
4.3 密碼子程序
當(dāng)程序運(yùn)行時(shí), 會(huì)一直判斷是否有按鍵被按下, 當(dāng)有按鍵被按下時(shí), 系統(tǒng)會(huì)確定鍵值, 關(guān)將鍵值存入到密碼數(shù)組里, 然后將輸入的密碼與本身的密碼做比較, 若相同, 則執(zhí)行開(kāi)門(mén)和顯示正確信息的操作; 若不相同, 則執(zhí)行報(bào)警和顯示錯(cuò)誤信息的操作。
核心代碼:
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); //第一行數(shù)據(jù)指針地址
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); //第一行數(shù)據(jù)指針地址
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 數(shù)據(jù)采集子程序
執(zhí)行程序之前, 首先要設(shè)置串口波特率等相關(guān)串口參數(shù), 然后上位機(jī)通過(guò)串口向下位機(jī)發(fā)送命令, 并進(jìn)入串口中斷。 下位機(jī)根據(jù)接收 SBUF 的值做相應(yīng)的處理。
核心程序
uchar uart_process(void)
{uchar cmd;
uchar cStatus;
cmd = g_cReceBuf[1];
switch(cmd)
{case 0x20: // 尋卡, 防沖突, 選擇卡返回卡系列號(hào)(4 bytes)
cStatus =IicSendHY502(g_cReceBuf); // 發(fā)送尋卡命令
cStatus =IicReadHY502(cp); // 讀取卡號(hào)并存入到 cP
if((cStatus==SUCCESS)&&(cp[1]==CARD_SN))
{memcpy(&g_cReceBuf[0],&cp[2],4);
eeprom();}}//將讀取到的卡序列號(hào)與 E 2 PROM 里存儲(chǔ)的進(jìn)行比較
return cStatus;}
開(kāi)始
上位機(jī)發(fā)送讀卡命令
Y
Y
N
N
有感應(yīng)卡 ?
驗(yàn)證感應(yīng)卡權(quán)限
權(quán)限滿(mǎn)足?
開(kāi)門(mén), 顯示正確信息
報(bào)警, 顯示錯(cuò)誤信息
延時(shí)后, 自動(dòng)關(guān)門(mén)
結(jié)束
4.5 顯示子程序
顯示子程序的主要功能是對(duì)當(dāng)前的門(mén)控狀態(tài)進(jìn)行顯示, 顯示函數(shù)首先判斷是寫(xiě)命令操作還是寫(xiě)數(shù)據(jù)操作, 若是寫(xiě)命令操作, 則根據(jù)命令進(jìn)行相應(yīng)的操作, 如清屏、 設(shè)置顯示模式等; 若是寫(xiě)數(shù)據(jù)操作, 則在顯示器上顯示相應(yīng)數(shù)據(jù)。
核心程序
void LcdShowError()
{ WriteLcdCom(0x38); //顯示模式設(shè)置
WriteLcdCom(0x0c); //開(kāi)顯示, 無(wú)光標(biāo), 光標(biāo)不閃爍
WriteLcdCom(0x06); //讀寫(xiě)字符后地址指針加一設(shè)置
WriteLcdCom(0x80); //第一行數(shù)據(jù)指針地址
for(k=0;k<16;k++)
{WriteLcdDat(str3[k]);
delay(20); }
WriteLcdCom(0xc0); //第二行數(shù)據(jù)指針地址
for(k=0;k<16;k++)
{ WriteLcdDat(str4[k]);
delay(20);}
WriteLcdCom(0x01); }
void WriteLcdCom(unsigned char c)
{ LCDRW =00;
LCDRS=0; //切換到寫(xiě)命令
P0=c;
LCDE=1;
LCDE=0;
for(a=0;a<20;a++);}
void WriteLcdDat(unsigned char d)
{ LCDRW =00;
LCDRS=1; //切換到寫(xiě)數(shù)據(jù)
P0=d;
LCDE=1;
LCDE=0;
for(a=0;a<20;a++);}
4.6 存儲(chǔ)子程序
本設(shè)計(jì)中數(shù)據(jù)的存儲(chǔ)芯片選用的是 AT24C04, 該芯片是串行的 E 2 PROM,支持 I 2 C 總線(xiàn)數(shù)據(jù)傳送協(xié)議。
核心程序
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 移出數(shù)據(jù)到 AT24C04
{uchar i; bit ack_bit;
for(i = 0; i < 8; i++) // 循環(huán)移入 8 個(gè)位
{SDA1 = (bit)(write_data & 0x80);
_nop_();
SCL1 = 1;
delayNOP();
SCL1 = 0;
write_data <<= 1; }
SDA1 = 1; // 讀取應(yīng)答
delayNOP();
SCL1 = 1;
delayNOP();
ack_bit = SDA1;
SCL1 = 0;
return ack_bit; // 返回 AT24C04 應(yīng)答位
}
void write_byte(uchar addr, uchar write_data) // 在 指 定 地 址 addr
處寫(xiě)入數(shù)據(jù) write_data
{ start();
shout(OP_WRITE);
shout(addr);
shout(write_data);
stop();
delay_10ms(1); }
5 實(shí)現(xiàn)效果
我們還可以把系統(tǒng)裝到盒子里
單片機(jī)-嵌入式畢設(shè)選題大全及項(xiàng)目分享:
https://blog.csdn.net/m0_71572576/article/details/125409052
6 最后
到了這里,關(guān)于【畢業(yè)設(shè)計(jì)】基于RFID的門(mén)禁系統(tǒng) - 單片機(jī) 物聯(lián)網(wǎng) 嵌入式 stm32的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!