基于STM32F407的智能门锁

news/2024/10/23 22:28:04/

智能门锁

一、项目背景

        在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的智能家居产品出现在普通老百姓的生活中,智能照明、智能窗帘、智能扫地机器人等各种智能产品都给人们的生活带来了极大的便利。智能门锁作为智能家居中重要的一环,也成为消费者家居智能化的重要选择。智能门锁是指区别于传统机械锁的基础上改进的,在用户安全性、识别、管理性方面更加智能化简便化的锁具。智能门锁是门禁系统中锁门的执行部件。智能相比市面的机械门锁更加安全、更智能、更人性化而得到市场的认可,在智能门锁行业里,不少世界500强企业也在智能门锁上进行产品布局,像中国小米公司就生产智能门锁,致力打造智慧家庭,市场智能门锁能够支持五种解锁方式,支持指纹、手机、门禁门、按键密码、钥匙解锁功能。可以说是智能家庭必不可少的成员。

 二、项目功能介绍

 1.可通过指纹模块增删查改家庭成员的指纹信息,增删查改是否成功的相关信息显示在OLED屏幕上

2.在指纹匹配过程中,如果采集的指纹与指纹模块库相匹配,OLED显示匹配成功,并转动直流电机

3.可通过按键设定智能门锁密码,密码可设置为两个(密码六位),如果匹配两个中的一个成功,即可开锁,也可通过按键修改密码,所有的操作过程显示于OLED中
4.实现RFID与手机解锁(蓝牙解锁)

5.系统支持低功耗处理

项目所用到的技术:

1.IIC协议、SPI协议、串口协议

2.外部flash驱动

3.RTC实时时钟

三、元件准备

1、直流电机

2、4X4矩阵按键

 

 3、指纹模块AS608(串口控制)

4、0.96寸OLED显示屏(IIC)

 

5、蓝牙模块HC-05

 

 6、主控芯片STM32F407ZET6

 7、RFID RC522 射频模块

 8、杜邦线

四、项目设计

(一)原理图设计

 

 

 

 

 

 (二)硬件设计

 (三)程序设计

 由于代码过长只展示部分代码

#include "stm32f4xx.h"
#include "beep.h"
#include "key.h"
#include "delay.h"
#include "led.h"
#include "tim.h"
#include "pwm.h"
#include "usart.h"
#include "sr04.h"
#include "dht11.h"
#include "iwdg.h"
#include "exti.h"
#include "adc.h"
//#include "iic.h"
#include "usart2.h"
#include "door.h"SysPara AS608Para;//指纹模块AS608参数
u16 ValidN;//模块内有效指纹个数unsigned char i;
u8 rx_flag = 0;  //rx_flag = 1表示接受数据完成
u8 rx_data = 0;
char buffer[32] = {0}, rx_buffer[32] = {0};
u8 count = 0, rx_i = 0;#define usart2_baund  57600//串口2波特率,根据指纹模块波特率更改
u16 sleeptime = 0;//休眠时间void USART1_IRQHandler(void)
{//判断接收中断标志是否为1if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET){//清空标志位USART_ClearITPendingBit(USART1, USART_IT_RXNE);	//接受数据 先赋值再加buffer[count++] = USART_ReceiveData(USART1);//判断接受的字符是否为 ':'if(buffer[count-1] == ':'){//buffer循环赋值给rx_buffer, 但不需要赋值':'  过滤结束标志for(rx_i=0; rx_i<(count-1); rx_i++){rx_buffer[rx_i] = buffer[rx_i];}memset(buffer, 0, sizeof(buffer));//确保下一帧存放位置从buffer[0]开始count = 0;rx_flag = 1;}}}int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2int i = 0;extern const unsigned char BMP1[];u8 key_num = 16,ensure;Delay_Init();My_RTC_Init();		 		//初始化RTCWalkmotor_Init();Led_Init();//指纹串口2usart2_init(usart2_baund);Usart1_Init(9600);//4*4矩阵键盘Keyborad_Init();//OLED显示屏I2C_Configuration();OLED_Init();OLED_CLS();//NFCMFRC522_Initializtion();AntennaOff();PS_StaGPIO_Init();	//初始化FR读状态引脚OLED_CLS();	//未检测到模块while(PS_HandShake(&AS608Addr))//与AS608模块握手{printf("woshou\r\n");OLED_CLS();OLED_ShowStr(32,4,"Error",1);delay_s(2);OLED_CLS();OLED_ShowStr(8,4,"Wait...",2);	delay_s(2);	  }OLED_CLS();OLED_ShowStr(40,3,"Hello!",2);ensure=PS_ValidTempleteNum(&ValidN);//读库指纹个数ensure=PS_ReadSysPara(&AS608Para);  //读参数 delay_s(1);OLED_CLS();while(1){
MAIN:	//A 10  B 11  C 12  D 13  * 14  # 15//蓝牙解锁if(rx_flag == 1){printf("rx_buffer:%s\r\n", rx_buffer);if(strcmp(rx_buffer, "open") == 0){LED0_ON;OLED_CLS();//清屏//解锁中for(i=11;i<14;i++){OLED_ShowCN(32+(i-11)*16,3,i);//测试显示中文}OLED_ShowStr(80,3,"...",2);	//开锁Walkmotor_ON();OLED_CLS();//清屏//已解锁for(i=10;i<13;i++){OLED_ShowCN(32+(i-10)*16,3,i);//测试显示中文}OLED_ShowStr(80,3,"!",2);			delay_s(1);			Menu();}if(strcmp(rx_buffer, "close") == 0){Walkmotor_OFF();LED0_OFF;//解锁失败}			//清空数组
//			memset(rx_buffer, 0, sizeof(rx_buffer));rx_flag = 0;}if(PS_Sta)	 //检测PS_Sta状态,如果有手指按下{delay_ms(20);press_FR();//刷指纹				}	for(i=0;i<4;i++){OLED_ShowCN(32+i*16,0,i);//测试显示中文}key_num = Key_scan();Display_Data();sleeptime++;//超时锁屏
/*******************************************************/		if(sleeptime == 70){OLED_OFF();//测试OLED休眠}if(key_num == 15)	{OLED_ON();sleeptime = 0;}
/*******************************************************/		if(key_num != 16 && key_num != 15){OLED_CLS();while(1){key_num = Key_scan();//智能门锁for(i=0;i<4;i++){OLED_ShowCN(32+i*16,0,i);//测试显示中文}//数字for(i=4;i<6;i++){OLED_ShowCN(16+(i-4)*16,3,i);//测试显示中文}//指纹for(i=6;i<8;i++){OLED_ShowCN(80+(i-6)*16,3,i);//测试显示中文}//卡片for(i=8;i<10;i++){OLED_ShowCN(16+(i-8)*16,6,i);//测试显示中文}OLED_ShowStr(80,6,"D:QUIT",2);switch (key_num ){case  10: //数字密码{OLED_ShowStr(0,3,"->",2);while(1){key_num = Key_scan();if(key_num == 15){OLED_CLS();password();break ;}if(key_num == 14){OLED_CLS();break ;}}break ;}case  11: //指纹解锁{OLED_ShowStr(64,3,"->",2);while(1){key_num = Key_scan();if(key_num == 15){OLED_CLS();//请按指纹for(i=38;i<40;i++){OLED_ShowCN(32+(i-38)*16,3,i);//测试显示中文}for(i=6;i<8;i++){OLED_ShowCN(64+(i-6)*16,3,i);//测试显示中文}delay_s(2);if(PS_Sta)	 //检测PS_Sta状态,如果有手指按下{press_FR();//刷指纹				break ;}	}if(key_num == 14){OLED_CLS();break ;}}break ;}case  12:{OLED_ShowStr(0,6,"->",2);while(1){key_num = Key_scan();if(key_num == 15){OLED_CLS();//请刷卡片for(i=38;i<39;i++){OLED_ShowCN(32+(i-38)*16,3,i);//测试显示中文}for(i=40;i<41;i++){OLED_ShowCN(48+(i-40)*16,3,i);//测试显示中文}for(i=8;i<10;i++){OLED_ShowCN(64+(i-8)*16,3,i);//测试显示中文}delay_s(1);MFRC522Test();OLED_CLS();break;}if(key_num == 14){OLED_CLS();break ;}}break ;}case  13:{OLED_ShowStr(64,6,"->",2);while(1){key_num = Key_scan();if(key_num == 15){OLED_CLS();goto MAIN;}if(key_num == 14){OLED_CLS();break ;}}break ;}}}}delay_ms(20);}
}

 五、项目展示

【基于STM32F4智能门锁】 https://www.bilibili.com/video/BV1L84y1i7sP/?share_source=copy_web&vd_source=b08c2377f74ba9c4fdcaec33930efbb5


http://www.ppmy.cn/news/212873.html

相关文章

汽车一键启动 汽车手机远程启动系统  汽车无钥匙进入 手机APP控车智能防盗

移动管家手机智能控制汽车系统具有汽车远程启动、汽车远程熄火、远程开关车门锁、远程断油&#xff01;智能感应开关门锁、免钥一键启动、一键熄火、GPS查车、APP软件控车、智能防盗、手机管控.移动管家手机控车系统&#xff0c;手机短信远程启动汽车&#xff0c;一键启动无钥匙…

wifi智能门锁远程控制方案能实现哪些功能

远程智能门锁控制方案&#xff0c;智能创新&#xff0c;改变生活。      生活中&#xff0c;我们都习惯性的携带门锁的钥匙&#xff0c;但没培养这个习惯时&#xff0c;总是会将钥匙落下&#xff0c;而这个事可以说可大可小&#xff0c;往小来说就需要拿备用钥匙开门&#…

手机app+esp8266控制小区大门门锁,实现远程开门

近日笔者自己动手修理自家的门铃时,发现只要接通开门的电源线,就可以打开楼宇的大门了&#xff0c;突发奇想&#xff1a;在门铃引出线加装继电器就可以用esp8266连上互联&#xff0c;实现远程开门了。&#xff08;我家门铃比较老旧&#xff0c;不知其他牌子门铃是否也是可以这样…

远程遥控小车搭建记录

22年国庆期间&#xff0c;无意从抖音上发现远程遥控小车已经很普及了&#xff0c;包含了摄像头、喊话器、闪光灯控制&#xff0c;系统均是单片机控制&#xff0c;再叠加一个360度摄像头&#xff0c;基本是两个系统的叠加&#xff0c;也有一些商业化的系统&#xff0c;硬件软件云…

基于 STM32 远程控制的多功能门锁

本项目有指纹识别、动态密码、普通钥匙以及管理员特有的微信等开 门方式&#xff0c;实验室人员可直接指纹识别进入&#xff1b;管理员手机微信获取的动态密 码给非实验室人员&#xff0c;具有随机性&#xff0c;不确定性&#xff0c;且隐私性较高&#xff0c;同时管理员 手机可…

智汀教你如何用手机远程控制智能门锁

前面跟大家说了那么多关于智能门锁的知识点&#xff0c;今天就跟大家讲一下如何用手机控制智能门锁吧&#xff1a; 以下操作基于拥有智汀智慧中心 Smart Assistant (硬件&#xff0c;简称SA)&#xff0c;通过 SA 加入不同品牌的插件包&#xff0c;从而达到联动不同品牌的智能家…

HTML <details> 标签

实例 关于文档的细节&#xff1a; <details> <summary>Copyright 2011.</summary> <p>All pages and graphics on this web site are the property of W3School.</p> </details>浏览器支持 元素ChromeIEFirefoxSafariOpera<details&…

世界上手机号码最长和最短的国家

现在手机普及率非常之高&#xff0c;基本上人手至少一个手机&#xff0c;那么哪个国家的手机号码最长呢&#xff1f;其实世界上最长的电话号码&#xff0c;是11位数的中国手机号码。为什么手机号码是11位呢&#xff1f; 最短的是7位数&#xff0c;加拿大。 1、号码格式决定 …