基于STM32F407的智能门锁
智能门锁
一、项目背景
在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的智能家居产品出现在普通老百姓的生活中,智能照明、智能窗帘、智能扫地机器人等各种智能产品都给人们的生活带来了极大的便利。智能门锁作为智能家居中重要的一环,也成为消费者家居智能化的重要选择。智能门锁是指区别于传统机械锁的基础上改进的,在用户安全性、识别、管理性方面更加智能化简便化的锁具。智能门锁是门禁系统中锁门的执行部件。智能相比市面的机械门锁更加安全、更智能、更人性化而得到市场的认可,在智能门锁行业里,不少世界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
基于STM32F407的智能门锁相关推荐
- EC20模组使用MQTT库对接EMQX,基于STM32F407
一.说明 本lib库基于STM32F407编译,其他的cortexM4内核也支持,采用串口和EC20模组通信. 库包括两个文件:ec20_mqtt.h和ec20_mqtt.lib.使用时添加lib文件 ...
- stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级
stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级,无需上位机操作. 清单: u盘升级的bootloader源码. YID: ...
- 基于STM32F4的智能门锁系统
基于STM32F4的智能门锁系统 前言 一.项目背景 二.项目所预想功能 三.外置硬件准备 四.项目开发 简介及涉及协议 蓝牙模块 1.蓝牙接线图 2.使用说明: 3.蓝牙代码 USART3.C 蓝牙 ...
- 基于STM32F407的人脸追踪
整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构,控制摄像头在水平和垂直方向的运动.舵机带动摄像头进行二维平面的运动的同时,摄像头进行实时人脸检测,一旦检测到人脸,则进行人脸跟踪. 摄 ...
- 基于STM32F407的五子棋游戏设计
本博客为资源:基于STM32F407的五子棋游戏设计内的说明文档. 目录 一.设计目标 三.设计方案 1.游戏模式 2.游戏过程 3.游戏设计 四.硬件配置 1.TFT-LCD液晶屏模块 (1)工作原 ...
- 简单实现基于 STM32F407+ESP8266+RFID 的物联网小项目
BusChargeSystem-IOT 项目介绍 基于 STM32F407+ESP8266+RFID 的模拟公交车刷卡收费系统(物联网) STM32 通过 RFID 识别获取卡片数据并通过串口发送到 ...
- 基于Stm32f407 的贪吃蛇小游戏【正点原子-探索者开发板】
基于单片机stm32f407的单机小游戏----贪吃蛇小游戏 1.介绍 这是我花一个星期完成的一个简单地单机贪吃蛇小游戏项目,芯片是stm32f407,项目是基于正点原子-探索者开发板完成的,有需要的 ...
- 基于STM32F103的智能门锁系统
基于STM32F103的智能门锁系统 直接说明实现了什么效果 1 指纹解锁(基于AS608) 2 RFID解锁(基于RC522) 3 密码解锁 (基于LCD电容屏触摸控制) 4 蓝牙解锁 (基于HC- ...
- 基于STM32F407+RFID的模拟公交车刷卡收费系统小项目
BusChargeSystem 项目介绍 基于STM32F407+RFID的模拟公交车刷卡收费系统 开源仓库地址: github:https://github.com/DaXiongRen/BusCh ...
最新文章
- python ndarray
- 2018年人工智能将赋能所有行业,未来市场将超过400亿美元
- ubuntu mysql deb_Ubuntu 通过Deb 安装 MySQL 5.5 [转载]
- 2017matlab版本Simulink 学习笔记整理
- Sharepoint 自定义字段类型
- 监控组策略应用----组策略结果
- 最新遥感图像解译标准数据集--202105
- 【安全】Web渗透测试(全流程)
- python常用的颜色英文表达_python常用颜色
- Linux忘记密码了怎么修改密码(保姆级教程)
- Django下载服务器文件到本地
- ectouch注册去邮箱的修改方法
- 手写深度学习之优化器(SGD、Momentum、Nesterov、AdaGrad、RMSProp、Adam)
- JavaWeb全套教程笔记_前端技术
- 捕捉95%的习惯思维,让用户对你的产品上瘾
- 微博爬虫数据分析可视化程序设计报告
- VSCode安装和使用教程
- 持续集成工具TeamCity快速入门
- safari下载网络视频的方法
- 查看主机的物理cpu个数、逻辑cpu个数、单个cpu的核数、是否开启超线程