??本課題為基于單片機的智能門禁系統,整個系統由AS608指紋識別模塊,矩陣鍵盤,STM32F103單片機,OLED液晶,RFID識別模塊,繼電器,蜂鳴器等構成,在使用時,用戶可以錄入新的指紋信息,注冊新的IC卡,修改新的密碼,也可以刪除舊的指紋,注銷舊的IC卡,用戶可以通過密碼,IC卡或者指紋三種方式打開門禁,當輸入信息正確時繼電器會動作打開門禁,如果信息錯誤蜂鳴器會進行報警提示。本系統從原理圖設計,C語言編寫等多個角度完成了整個系統的設計,并最終通過制作實物完全了目標,經過測試達到了預期效果。
??資料下載:待更新。。。。
1、實現功能
(1)用戶管理需求
注冊新用戶:系統需要提供注冊新用戶的功能,包括錄入新的指紋信息、注冊新的IC卡和設置新的密碼。用戶可以通過其中一種或多種方式進行身份驗證。刪除用戶:系統需要提供刪除舊用戶的功能,允許管理員刪除指紋信息、注銷IC卡或重置密碼。
(2)身份驗證需求
密碼驗證:系統需要支持用戶通過輸入正確的密碼來驗證身份。IC卡驗證:系統需要支持用戶通過刷卡的方式進行身份驗證。指紋驗證:系統需要支持用戶通過指紋識別模塊進行身份驗證。
(3)門禁控制需求
繼電器控制:系統需要通過繼電器實現對門禁的控制。當用戶通過正確的身份驗證方式后,繼電器應該動作,打開門禁。報警提示:系統需要通過蜂鳴器進行報警提示,當用戶輸入的信息不正確時,蜂鳴器應該發出警報。
(4)用戶界面需求
顯示屏:系統需要配備OLED液晶屏幕,用于顯示用戶信息、菜單選項和操作結果等。用戶可以通過液晶屏幕進行交互和操作。
(5)安全性需求
數據保護:系統需要保護用戶數據的安全性,包括指紋信息、IC卡數據和密碼。數據應該被加密存儲,并采取相應的措施防止未經授權的訪問。防止暴力破解:系統應該設置安全機制,如密碼輸入錯誤次數限制、防止暴力破解的策略。
(6)擴展性需求
RFID識別模塊支持:系統需要支持RFID識別模塊,允許用戶通過刷卡方式進行身份驗證。多用戶管理:系統需要支持多個用戶的管理,包括新增用戶、刪除用戶和權限設置等功能。
可增加的功能:
主要元器件:
??STM32F103C8T6最小系統板、
目錄
- ??資料下載:待更新。。。。
- 1、實現功能
- 2、硬件
- 3、代碼
- 4、原理圖/PCB
- 5、論文
2、硬件
硬件框圖
本課題為基于單片機的智能門禁系統,整個系統由AS608指紋識別模塊,矩陣鍵盤,STM32F103單片機,OLED液晶,RFID識別模塊,繼電器,蜂鳴器等構成,在使用時,用戶可以錄入新的指紋信息,注冊新的IC卡,修改新的密碼,也可以刪除舊的指紋,注銷舊的IC卡,用戶可以通過密碼,IC卡或者指紋三種方式打開門禁,當輸入信息正確時繼電器會動作打開門禁,如果信息錯誤蜂鳴器會進行報警提示。
實物
3、代碼
?? STM32代碼采用C語言,標準庫編寫,軟件是keil5,關鍵代碼有中文注釋,看不懂可以VX問我
#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "usart.h"
#include "timer.h"
#include "key4_4.h"
#include "stmflash.h"
#include "OLED.h"
#include "as608.h"
#include "rc522.h"
#include "rc522_user.h"
#include "IO_Init.h"
extern void Beep_Init(void); //蜂鳴器
int key;
u8 open_door_flag=0; //開門標志位
u16 user_ID=0; //保存指紋模塊返回的用戶ID,用于判斷用戶
u8 Password[6], Password2[6]={"123456"}; //六位用戶密碼,管理員密碼
u8 password_eeror,rc522_error,figer_error; //錯誤次數
u16 Locked_time;
void open_door() //開門函數
{u8 i;if(open_door_flag>0) //ok,就開門{OLED_Clear();Relay=0;for(i=58;i<62;i++) //門已打開{OLED_ShowCH(32+i*16-16*58,1,i);}delay_ms(1700);delay_ms(1700);OLED_Clear();Relay=1;if(open_door_flag==1) //非管理員密碼,自動回復原始狀態open_door_flag=0;USART1_RX_STA=0;memset(USART1_RX_BUF,0,sizeof(USART1_RX_BUF));}
}void admin_show() //總管理界面顯示
{int i;OLED_ShowStr(0,0,"A:",2);for(i=9;i<=10;i++) //指紋{OLED_ShowCH(i*16-16*8,0,i);}for(i=111;i<=112;i++) //管理{OLED_ShowCH(i*16-16*108,0,i);}OLED_ShowStr(0,4,"C:",2);for(i=17;i<=18;i++) //密碼{OLED_ShowCH(i*16-16*16,4,i);}for(i=111;i<=112;i++) //管理{OLED_ShowCH(i*16-16*108,4,i);}OLED_ShowStr(0,6,"D:IC",2);for(i=111;i<=112;i++) //管理{OLED_ShowCH(i*16-16*108,6,i);}}
void oled_show() //界面顯示
{u8 i;for(i=42;i<=45;i++) //歡迎使用{OLED_ShowCH(32+i*16-16*42,0,i);}for(i=115;i<=117;i++) //多功能{OLED_ShowCH(i*16-16*114,2,i);}for(i=39;i<=41;i++) //電子鎖{OLED_ShowCH(i*16-16*35,2,i);}for(i=46;i<=49;i++) //請您開鎖{OLED_ShowCH(32+i*16-16*46,6,i);}
// u16 i;
// for(i=116;i<=118;i++) //實驗室
// {
// OLED_ShowCH(40+i*16-16*116,0,i);
// }
// for(i=119;i<=124;i++) //智能門禁系統
// {
// OLED_ShowCH(16+i*16-16*119,2,i);
// }
// for(i=125;i<=129;i++) // 設計與實現
// {
// OLED_ShowCH(24+i*16-16*125,6,i);
// }
}
void oled_init_show() //初始化界面顯示
{u8 i;for(i=42;i<=45;i++) //歡迎使用{OLED_ShowCH(32+i*16-16*42,0,i);}for(i=113;i<=115;i++) //多功能{OLED_ShowCH(i*16-16*112,2,i);}for(i=39;i<=41;i++) //電子鎖{OLED_ShowCH(i*16-16*35,2,i);}for(i=46;i<=49;i++) //請您開鎖{OLED_ShowCH(32+i*16-16*46,6,i);}
}
void finger_check() //刷指紋開門驗證
{u16 uid,i;uid=press_FR();if((uid<300)&&(uid>0)){open_door_flag=1;OLED_Clear(); //清屏 for(i=70;i<72;i++) //用戶{OLED_ShowCH(i*16-16*70,4,i);}OLED_ShowStr(32,4,"ID:",2);figer_error=0;OLED_ShowNum(56,4,uid,3,16);delay_ms(1000);OLED_Clear(); //清屏}else if(uid==0xffff){ OLED_Clear(); //清屏 for(i=66;i<70;i++) //指紋錯誤{OLED_ShowCH(32+i*16-16*66,1,i);}Beep_Work(500,4);figer_error++;OLED_Clear(); //清屏}
}
void ADD_finger() //添加指紋
{int i=0;OLED_Clear();for(i=23;i<27;i++) //請按手指{OLED_ShowCH(16*i-23*16,0,i);}i=Add_FR();if(i>0){for(i=27;i<31;i++) //添加成功{OLED_ShowCH(16*i-16*27,4,i);}for(i=70;i<72;i++) //用戶{OLED_ShowCH(i*16-16*70,6,i);}OLED_ShowStr(32,6,"ID:",2);OLED_ShowNum(56,6,user_ID,3,16);delay_ms(1000);}else{ for(i=31;i<35;i++) //添加失敗{OLED_ShowCH(16*i-16*30,4,i);}delay_ms(1000);}OLED_Clear();
}
void figer_show() //指紋管理界面顯示
{int i;OLED_ShowStr(0,0,"A:",2);for(i=7;i<=10;i++) //添加指紋{OLED_ShowCH(i*16-16*6,0,i);}OLED_ShowStr(0,2,"B:",2);for(i=11;i<=14;i++) //刪除指紋{OLED_ShowCH(i*16-16*10,2,i);}
}
void finger_admin() //指紋管理
{int i;OLED_Clear();while(key!='*') //*退出{key=Key44_Scan();switch (key){case'A' :ADD_finger();break;//添加case'B' :PS_Empty();OLED_Clear(); for(i=97;i<103;i++) { OLED_ShowCH(16+16*i-16*97,2,i);}delay_ms(1800); OLED_Clear();break;//刪除default :figer_show();break;//管理顯示界面 }}OLED_Clear();
}void Esp8266_AP_Init() //ESP8266局域網開熱點等待手機APP鏈接
{UsartPrintf(USART1,"AT\r\n"); delay_ms(1000);OLED_Clear();OLED_printf(0,0,"1 AT+CWMODE ");UsartPrintf(USART1,"AT+CWMODE=2\r\n"); //設置路由器模式1 station,模式2 AP,模式3 station+AP混合模式 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"2 AT+CWSAP ");UsartPrintf(USART1,"AT+CWSAP=\"WIFI\",\"123456789\",11,4\r\n"); //AT+CWSAP="wifi_yuan","123456789",11,4 設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK) delay_ms(1000);OLED_Clear();OLED_printf(0,0,"3 AT+CIPMUX ");UsartPrintf(USART1,"AT+CIPMUX=1\r\n"); //開啟多連接模式,允許多個各客戶端接入 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"4 AT+CIPSERVER ");UsartPrintf(USART1,"AT+CIPSERVER=1,5000\r\n"); //啟動TCP/IP 實現基于網絡//控制 delay_ms(1000);OLED_Clear();OLED_printf(0,0,"5 AT+CIPSTO ");UsartPrintf(USART1,"AT+CIPSTO=0\r\n"); delay_ms(1000);OLED_Clear();
}int main(void) //主函數
{ vu16 falsh,reclen,t;SystemInit();delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2組中斷分組Relay_Init(); //繼電器初始化Relay=0;Beep_Init(); //蜂鳴器初始化Beep = 0;OLED_Init(); //OLED初始化Relay=1;Beep =1;usart2_Init(57600); //串口2初始化 RC522_Init();Key44_Init(); //矩陣按鍵初始化oled_show(); //界面顯示STMFLASH_Read(FLASH_PASSWORD_SAVE_ADDR,(u16*)Password,6); //讀取密碼 下載程序后,數據是0XFFSTMFLASH_Read(FLASH_ICcard_SAVE_ADDR,(u16*)ICCard_Name,IC_Card_Num*4); //讀取密碼 下載程序后,數據是0XFFTIM2_Int_Init(4999,7199);while(1){delay_ms(1);if(pass_cnt==0) //沒有在密碼輸入的時候{IC_check();if(t++>50){t=0;finger_check(); //指紋檢驗}}password_cheak(); //密碼檢驗oled_show(); //顯示open_door(); //開門函數if(password_eeror>=3){password_eeror=2;Locked_time = 30;while(Locked_time--){OLED_printf(0,4," Locked:%d ",Locked_time);Beep_Work(1000,1);}OLED_printf(0,4," ");}while(open_door_flag==2) //輸入管理員密碼進入設置{key=Key44_Scan();switch (key){case'C' :password_admin();break; //密碼管理case'A' :finger_admin(); break; //指紋管理case'D' :rc522_admin();break; //IC卡管理case'*' :open_door_flag=0;OLED_Clear(); break;//退出default :admin_show();break; //管理顯示界面}}}
}
4、原理圖/PCB
??原理圖和PCB都使用立創EDA繪制,對新手較為友好。可以導出為AD格式的文件
5、論文
本設計基于單片機的智能門禁系統,主要是結合單片機技術立足于產業應用而展開,全文針對目標功能進行關鍵器件的選擇,電路圖繪制,軟件程序編寫等等,在整個文章的章節結構上,大致如下:在第一章緒論對基于單片機的智能門禁系統課題的理論背景進行分析并引申出設計的必要性,在第二章則圍繞基于單片機的智能門禁系統課題進行總體框架設計,確定整個系統中使用到的關鍵器件,在第三章則從硬件設計的角度,對每個模塊完成硬件電路設計,從單片機最小系統到各個傳感器應用電路,在第四章則對各模塊完成程序流程的分析和繪制,在第五章則進行系統測試,針對硬件和軟件進行聯調,并最終完成整個系統的功能和測試。