基于STM32的智能門鎖(含代碼、PCB)(4種解鎖方式)
前言
1、如今STM32F4價格昂貴,制作成本太高,于是花費了近一個月的空閑時間來研究用最低的成本制作擁有F4智能門鎖一樣甚至更多的功能。點擊領取相關資料
一、項目簡介
(一)功能概述
F4版本:
1、可通過指紋模塊增刪查改家庭成員的指紋信息,增刪查改是否成功的相關信息顯示在OLED屏幕上
2、在指紋匹配過程中,如果采集的指紋與指紋模塊庫相匹配,OLED顯示匹配成功,并轉動步進電機一圈
3、可通過按鍵設定智能門鎖密碼,密碼可設置為兩個(密碼六位),如果匹配兩個中的一個成功,即可開鎖,也可通過按鍵修改密碼,所有的操作過程顯示于OLED中
4、實現RFID與手機解鎖(藍牙解鎖)
5、擴展:虛位密碼解鎖(虛位密碼:自己百度)
F1版本新增:
1、可錄入10張卡片
2、開鎖順時針轉動步進電機一圈,關鎖逆時針
3、新增蜂鳴器提示
4、新增解鎖錯誤提示
(二)項目所用到的主要技術
F4版本:
1、IIC協議、SPI協議、串口協議
2、外部flash驅動、SD卡驅動
3、FTAFS文件系統
4、RTC實時時鐘
F1版本:
1、IIC協議、SPI協議、串口協議
2、GUI界面設計,漢字顯示
3、RTC實時時鐘
(三)本次項目的特點
1、選材根據經濟
材料最貴的是指紋模塊40元,單片機僅10元
2、減少不必要材料
比如外部FLASH,SD卡模塊,單片機晶振
2、使用PCB,拒絕繁瑣接線
制作更方便,學習更簡便
3、功能強大
擁有4種解鎖方式、漢化界面、有修改與錄入操作、有手機APP控制
4、材料功能利用率高
單片機引腳(48pin)利用率>90%,單片機內存(64K)利用率>70%
5、代碼精簡方便,邏輯性強
Show_Str(12,13,128,12,"智能門鎖系統hzc123",12,0); //顯示漢字、字符一句搞定
二、材料選擇
1、主控STM32F103C8T6 (可以用兼容產品CH32F103C8T6代替)
2、步進電機(帶驅動模塊)
型號:28BYJ4+ULN2003
3、4X4矩陣按鍵(不用買模塊,此項目用的16個單獨按鍵焊接到PCB)
5、0.96寸OLED顯示屏(IIC)
型號:7針
6、RFID RC522 射頻模塊(帶一張卡片)
7、杜邦線、排針、電阻、電容、三極管、電位器等
8、PCB板子一塊
三、原理圖設計
采用最簡的硬件電路,做更多的功能
(截圖模糊,可下載資源查看)
四、PCB設計
采用最便宜的雙層版,10cm*10cm設計
五、部分代碼
完整代碼可進群免費領取:掃碼進群領資料
void DisUnLock(void ) {
OLED_Clear();
Show_Str(20,10,128,24,"解鎖中...",24,0);
OLED_Refresh_Gram();//更新顯示 Walkmotor_ON();
Show_Str(20,10,128,24,"已解鎖!",24,0);
OLED_Refresh_Gram();//更新顯示 delay_ms(1500);
} void DisLock(void ) {
OLED_Clear();
Show_Str(30,20,128,16,"鎖定中!",16,0);
OLED_Refresh_Gram();//更新顯示 Walkmotor_OFF();
Show_Str(30,20,128,16,"已鎖定!",16,0);
OLED_Show_Font(56,48,0);//鎖 OLED_Refresh_Gram();//更新顯示 delay_ms(1000);
} int main(void) {
u16 set=0; int key_num; int time1; int time2; //鎖屏時間 char arrow=0; //箭頭位子 //SysHSI_Init(); delay_init(); //延時函數初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級 uart_init(9600); //串口初始化為9600 printf("串口功能正常\r\n");
Button4_4_Init(); //初始化與按鍵連接的硬件接口 OLED_Init(); //顯示初始化 Walkmotor_Init(); //步進電機初始化 BEEP_Init(); //蜂鳴器初始化 usart2_init(usart2_baund); //初始化指紋模塊 PS_StaGPIO_Init();
OLED_Clear();
starting();//開機信息 logo RTC_Init(); //RTC初始化 SysPartInit(); //系統參數初始化 while(1)
{ //鎖屏界面 MAIN:
OLED_Clear();
OLED_Show_Font(56,48,0);//顯示鎖圖標 while(1)
{
time1++;Display_Data();//時間顯示:每1000ms更新一次顯示數據 if(DisFlag == 1)
{
DisFlag = 0;
OLED_Fill(0,24,16,63,0);
OLED_Refresh_Gram();//更新顯示 } if((time1%100)==1)
{ //MFRC522解鎖 time1=0;
MFRC522_Initializtion();
Error=MFRC522_lock(); if(Error==0)
{ goto MENU;
} else {
OLED_Show_Font(56,48,0);//鎖 } //手機藍牙解鎖密碼1 Error=usart1_cherk((char*)sys.passwd1); if(Error==0){
OLED_Clear_NOupdate();
Show_Str(12,13,128,20,"藍牙密碼1:正確",12,0);
OLED_Refresh_Gram();//更新顯示 delay_ms(800);
DisUnLock(); goto MENU;
} //手機藍牙解鎖密碼2 Error=usart1_cherk((char*)sys.passwd2); if(Error==0){
OLED_Clear_NOupdate();
Show_Str(12,13,128,12,"藍牙密碼2:正確",12,0);
OLED_Refresh_Gram();//更新顯示 delay_ms(800);
DisUnLock(); goto MENU;
}
} //指紋解鎖 if(PS_Sta) //檢測PS_Sta狀態,如果有手指按下 { while(PS_Sta){
Error=press_FR();//刷指紋 if(Error==0)
{ //DisUnLock(); goto MENU; //跳到解鎖界面 } else {
OLED_Show_Font(56,48,0);//鎖 }
}
} //密碼鎖 key_num=Button4_4_Scan(); //按鍵掃描 if(key_num!=-1)
{
Error=password();//密碼解鎖函數 if(Error==0)
{ goto MENU; //跳到解鎖界面 } else {
OLED_Show_Font(56,48,0);//鎖 }
}
delay_ms(1);
} /********************主界面**************************/ MENU:
OLED_Clear();
MENUNOCLR:
OLED_Fill(0,0,20,48,0); //主頁菜單顯示 if(arrow<3){
Show_Str(5,arrow*16,128,16,"->",16,0);//顯示箭頭 set=0;} else {
Show_Str(5,(arrow-3)*16,128,16,"->",16,0); set=3;}
Show_Str(25,0,128,16,setup[set],16,0);
Show_Str(25,16,128,16,setup[set+1],16,0);
Show_Str(25,32,128,16,setup[set+2],16,0);
Show_Str(0,52,128,12,"上 下 確定",12,0);
OLED_Refresh_Gram();//更新顯示 time2=0; while(1)
{ //超時鎖屏 time2++; if(time2>10000 | key_num==4){
OLED_Clear();
DisLock(); if(time2>10000)beep_on_mode2();
time2 =0;
OLED_Clear(); goto MAIN;
} //手機藍牙鎖定 if(memcmp(USART_RX_BUF,"LOCK",4)==0) {
DisLock(); goto MAIN;
} //功能選項選擇 key_num=Button4_4_Scan(); if(key_num)
{ if(key_num==13){ if(arrow>0)arrow--; goto MENUNOCLR;
} if(key_num==15){ if(arrow<5)arrow++; goto MENUNOCLR;
} if(key_num==16){ switch(arrow)
{ case 0:Add_FR(); break;//錄指 case 1:Del_FR(); break;//刪指紋 case 2:SetPassworld();break;//修改密碼 case 3:Set_Time(); break; //設置時間 case 4:Add_Rfid(); break; //錄入卡片 case 5:Massige(); break; //顯示信息 } goto MENU;
}
}delay_ms(1);
}
}
}
六、安卓APP設計
1、圖標設計
2、主界面設計
使用方法:①進入APP,等待3-5秒,自動連接智能門鎖
②左上角顯示已連接后,輸入密碼,點擊OK即可解鎖
③無法自動連接時,點擊連接按鈕進入手動連接界面
3、連接界面
使用方法:雙擊進行連接操作 一般連接JDY-31
七、成品展示
1、開機界面
在這里插入圖片描述
- 贊