资讯详情

STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)

文章目录

  • 前言
  • 一、项目简介
    • (一)功能概述
    • (二)项目使用的主要技术
    • (三)本次项目的特点
  • 二、材料选择
  • 三、原理图设计
  • 四、PCB设计
  • 五、源码设计
  • 六、安卓APP设计
  • 七、成品展示

项目视频 视频链接:https://www.bilibili.com/video/BV1fL41177HZ/ 项目资料 stm32f1智能门免费信息链接: 链接:https://pan.baidu.com/s/1_au_QM2-59dMhIj4_lP2vQ 提取码:wa4y

stm32f1智能门锁完整数据链接: V1.1:https://download.csdn.net/download/mbs520/60273691 V1.2:https://download.csdn.net/download/mbs520/80301067 建议加QQ2809786963获取资源80%折扣 在这里插入图片描述 实物购买链接:https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=662981777123&ut_sk=1.YS8KcP50tCcDANBMdqHJmYUj_21407387_1639226039728.copy.detail.662981777123.2054314811&forceFlush=1

前言

1.因为现在很多同学反馈,现在很多同学反馈STM32F4价格昂贵,生产成本太高,所以我花了近一个月的空闲时间来研究以最低的成本生产F44智能门锁的功能相同甚至更多 STM32F4版智能门锁博客链接:https://blog.csdn.net/mbs520/article/details/106987758

一、项目简介

(一)功能概述

1.家庭成员的指纹信息可以通过指纹模块添加和删除,成功的相关信息可以显示在OLED屏幕上 在指纹匹配过程中,如果采集的指纹与指纹模块库相匹配,OLED显示匹配成功,并旋转步进电机 3.智能门锁密码可以通过按钮设置,密码可以设置为两个(六位密码)。如果匹配两者中的一个成功,可以解锁,也可以通过按钮修改密码。所有操作过程都显示在中OLED中 4、实现RFID手机解锁(蓝牙解锁) 5.扩展:解锁虚位密码(虚位密码:百度自己) 1.可输入10张卡片 2.顺时针旋转步进电机一圈,逆时针关闭 3.添加蜂鸣器提示 4.新的解锁错误提示

(二)项目使用的主要技术

1、IIC协议、SPI协议,串口协议 2、外部flash驱动、SD卡驱动 3、FTAFS文件系统 4、RTC实时时钟 1、IIC协议、SPI协议,串口协议 2、GUI界面设计,汉字显示 3、RTC实时时钟

(三)本项目的特点

1.根据经济选材

最贵的材料是指纹模块40元,单片机只有10元 

减少不必要的材料

比如外部FLASH,SD卡模块,单片机晶振 

2、使用PCB,拒绝繁琐的接线

制作更方便,学习更简单 

3、功能强大

有四种解锁方式,汉化界面,修改和输入操作,手机APP控制 

4.材料功能利用率高

单片机引脚(48pin)利用率>90%,单片机内存(64K)利用率>70% 

5、代码精简方便,逻辑性强

Show_Str(12,13,128,12,"智能门锁系统hzc123",12,0); ///显示汉字,一句话字符 

二、材料选择

1、主控STM32F103C8T6 (可使用兼容产品CH32F103C8T6代替)

2.步进电机(带驱动模块) 型号:28BYJ4 ULN2003

3、4X4矩阵按键 4、指纹模块AS608(串口控制)

5、0.96寸OLED显示屏(IIC) 型号:7针

6、RFID RC522 射频模块(带卡片) 7.杜邦线、排针、电阻、电容、三极管、电位器

三、原理图设计

使用最简单的硬件电路来做更多的功能 (截图模糊,可下载资源查看)

四、PCB设计

采用最便宜的双层版,10cm*10cm设计

五、源码设计

源码为F4版本智能门锁移植而来,修改了一些不兼容的功能与增加了新功能


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、连接界面 使用方法:双击进行连接操作 4、信息界面设计

七、成品展示

1、开机界面 在这里插入图片描述

2、锁屏显示时间

3、解锁显示菜单

标签: lp1484三极管wx11电位器fr22三极管三极管2sk2654三极管f1

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台