智能门锁

一、项目背景

在消费升级渗透在各个领域的今天,国民消费发生着巨大的变化,与每个人息息相关的家居行业也是如此。现今,越来越多的智能家居产品出现在普通老百姓的生活中,智能照明、智能窗帘、智能扫地机器人等各种智能产品都给人们的生活带来了极大的便利。智能门锁作为智能家居中重要的一环,也成为消费者家居智能化的重要选择。智能门锁是指区别于传统机械锁的基础上改进的,在用户安全性、识别、管理性方面更加智能化简便化的锁具。智能门锁是门禁系统中锁门的执行部件。智能相比市面的机械门锁更加安全、更智能、更人性化而得到市场的认可,在智能门锁行业里,不少世界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的智能门锁相关推荐

  1. EC20模组使用MQTT库对接EMQX,基于STM32F407

    一.说明 本lib库基于STM32F407编译,其他的cortexM4内核也支持,采用串口和EC20模组通信. 库包括两个文件:ec20_mqtt.h和ec20_mqtt.lib.使用时添加lib文件 ...

  2. stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级

    stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级,无需上位机操作. 清单: u盘升级的bootloader源码. YID: ...

  3. 基于STM32F4的智能门锁系统

    基于STM32F4的智能门锁系统 前言 一.项目背景 二.项目所预想功能 三.外置硬件准备 四.项目开发 简介及涉及协议 蓝牙模块 1.蓝牙接线图 2.使用说明: 3.蓝牙代码 USART3.C 蓝牙 ...

  4. 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构,控制摄像头在水平和垂直方向的运动.舵机带动摄像头进行二维平面的运动的同时,摄像头进行实时人脸检测,一旦检测到人脸,则进行人脸跟踪. 摄 ...

  5. ​基于STM32F407的五子棋游戏设计​

    本博客为资源:基于STM32F407的五子棋游戏设计内的说明文档. 目录 一.设计目标 三.设计方案 1.游戏模式 2.游戏过程 3.游戏设计 四.硬件配置 1.TFT-LCD液晶屏模块 (1)工作原 ...

  6. 简单实现基于 STM32F407+ESP8266+RFID 的物联网小项目

    BusChargeSystem-IOT 项目介绍 基于 STM32F407+ESP8266+RFID 的模拟公交车刷卡收费系统(物联网) STM32 通过 RFID 识别获取卡片数据并通过串口发送到 ...

  7. 基于Stm32f407 的贪吃蛇小游戏【正点原子-探索者开发板】

    基于单片机stm32f407的单机小游戏----贪吃蛇小游戏 1.介绍 这是我花一个星期完成的一个简单地单机贪吃蛇小游戏项目,芯片是stm32f407,项目是基于正点原子-探索者开发板完成的,有需要的 ...

  8. 基于STM32F103的智能门锁系统

    基于STM32F103的智能门锁系统 直接说明实现了什么效果 1 指纹解锁(基于AS608) 2 RFID解锁(基于RC522) 3 密码解锁 (基于LCD电容屏触摸控制) 4 蓝牙解锁 (基于HC- ...

  9. 基于STM32F407+RFID的模拟公交车刷卡收费系统小项目

    BusChargeSystem 项目介绍 基于STM32F407+RFID的模拟公交车刷卡收费系统 开源仓库地址: github:https://github.com/DaXiongRen/BusCh ...

最新文章

  1. python ndarray
  2. 2018年人工智能将赋能所有行业,未来市场将超过400亿美元
  3. ubuntu mysql deb_Ubuntu 通过Deb 安装 MySQL 5.5 [转载]
  4. 2017matlab版本Simulink 学习笔记整理
  5. Sharepoint 自定义字段类型
  6. 监控组策略应用----组策略结果
  7. 最新遥感图像解译标准数据集--202105
  8. 【安全】Web渗透测试(全流程)
  9. python常用的颜色英文表达_python常用颜色
  10. Linux忘记密码了怎么修改密码(保姆级教程)
  11. Django下载服务器文件到本地
  12. ectouch注册去邮箱的修改方法
  13. 手写深度学习之优化器(SGD、Momentum、Nesterov、AdaGrad、RMSProp、Adam)
  14. JavaWeb全套教程笔记_前端技术
  15. 捕捉95%的习惯思维,让用户对你的产品上瘾
  16. 微博爬虫数据分析可视化程序设计报告
  17. VSCode安装和使用教程
  18. 持续集成工具TeamCity快速入门
  19. safari下载网络视频的方法
  20. 查看主机的物理cpu个数、逻辑cpu个数、单个cpu的核数、是否开启超线程

热门文章

  1. 通过SSH 解压缩 .tar.gz .gz .zip 文件的方法
  2. SubQuery总结
  3. mysql myisam 全文检索,mysql索引区别innodb和MyISAM
  4. 【华为机试真题 Python】 放苹果
  5. web安全-上传漏洞-Ewebeditor编辑器漏洞利用
  6. glance基础命令
  7. 新冠COVIN-19流感病患轨迹追溯
  8. 华为m6能更新鸿蒙,华为M6怎么升级鸿蒙系统 M6平板升级鸿蒙系统教程
  9. AnimatorSet组合动画的笔记
  10. 数据库及数据库表的增删改查基本操作