stm32毕业设计 智能门禁系统

这篇具有很好参考价值的文章主要介绍了stm32毕业设计 智能门禁系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1 简介

Hi,大家好,今天向大家介绍一个学长做的单片机项目

基于单片机的门禁系统

大家可用于 课程设计 或 毕业设计

2 课题背景

门禁系统的基本组成主要包括身份识别、传感与报警、处理与控制、电锁与执行、管理与设置。

本系统从应用角度出发,针对家庭或小型办公场所的使用需求,主要从两个方面着手优化设计:一是硬件搭建上坚持低功耗设计,加入电源管理模块供电;二是在软件实现上,尝试多种策略来提高系统的响应速度,并考虑多种情况下的报警处理,提高系统的安全性。

3 详细设计

3.1 整体设计方案

学长设计的禁系统主控制芯片采用 STM32 单片机 STM32F103, 指纹识别模块采用 ATK-AS608 模块, 并用 LCD12864 显示处理的结果信息。 尝试多种策略来提高系统识别和响应速度。

3.2 功能模块

实现的主要功能有:

通过usb转串口,进行指纹的录入。

通过编程软件keil4将程序烧录到主控板STM32F103,LCD12864液晶屏幕显示“请输入您的指纹”,若指纹模块初始化失败,则显示“录入指纹失败”。用录入指纹开锁,若指纹识别成功,电磁锁开锁;

若指纹识别不成功,则语音提示“叮铃叮铃”,液晶显示“识别指纹失败”,在这种情况下,还剩两次录入机会,若三次指纹识别均失败,则系统会报警。

通过密码也可以开锁,同样有三次机会。预先用矩阵键盘登记保存密码,登记密码时,需要6-13位字符,按“#”号键结束。

听到“请再输入同一密码”,再次在按键板上输入同一密码;听到“密码登记成功”,液晶屏上会显示添加成功。

用密码开锁时,若三次匹配失败,则系统会报警,液晶屏会显示“开门失败”。

该系统的结构主要包括6个模块:

  • 门锁控制模块
  • 主控制芯片
  • 矩阵键盘模块
  • 指纹识别模块
  • 液晶显示
  • 电源管理模块.

stm32毕业设计 智能门禁系统

3.3 软件设计

设计一个童锁功能,软件实现流程如下:
stm32毕业设计 智能门禁系统

主程序流程:

stm32毕业设计 智能门禁系统
主程序主要包括上电初始化、指纹设置、密码设置、指纹识别模块、继电器驱动模块、密码处理模块、语音报警模块等子程序构成.

4 实现效果

stm32毕业设计 智能门禁系统

5 部分实现代码

指纹模块代码:文章来源地址https://www.toymoban.com/news/detail-429715.html

#ifndef __TFS_M64_H
#define __TFS_M64_H
 
#include "stm32f10x.h"
 
#define TRUE  1
#define FALSE 0
 
//基本应答信息定义
#define ACK_SUCCESS    0x00 //操作成功
#define ACK_FAIL       0x01 //操作失败
#define ACK_FULL       0x04 //指纹数据库已满
#define ACK_NOUSER     0x05 //无此用户
#define ACK_USER_EXIST 0x07 //用户已存在
#define ACK_TIMEOUT    0x08 //采集超时
 
#define ACK_GO_OUT		    0x0F
//用户信息定义
#define ACK_ALL_USER      0x00
#define ACK_GUEST_USER 	  0x01
#define ACK_NORMAL_USER 	0x02
#define ACK_MASTER_USER   0x03
 
#define USER_MAX_CNT	   50
 
//位置定义
#define HEAD 0
#define CMD  1
#define CHK  6
#define TAIL 7
 
#define P1   2
#define P2   3
#define P3   4
#define Q1   2
#define Q2   3
#define Q3   4
 
//命令定义
#define CMD_HEAD		  0xF5
#define CMD_TAIL		  0xF5
#define CMD_ADD_1  		0x01
#define CMD_ADD_2 		0x02
#define CMD_ADD_3	  	0x03
#define CMD_MATCH		  0x0C
#define CMD_DEL			  0x04
#define CMD_DEL_ALL		0x05
#define CMD_USER_CNT  0x09
#define CMD_SLEEP_MODE		0x2C
#define CMD_ADD_MODE  0x2D
 
#define CMD_FINGER_DETECTED 0x14
 
extern uint8_t gFpmTxBuf[9];
extern uint8_t gFpmRxBuf[9];
extern uint8_t gFpmRxCnt;
 
 
uint8_t fpm_sendAndReceive(uint16_t delayMs);
uint8_t fpm_sleep(void);
uint8_t fpm_setAddMode(uint8_t mode);
uint8_t fpm_readAddMode(void);
uint16_t fpm_getUserNum(void);
uint8_t fpm_deleteAllUser(void);
uint8_t fpm_deleteUser(uint8_t userNum);
uint8_t fpm_addUser(uint8_t userNum, uint8_t userPermission);
uint8_t fpm_compareFinger(void);
 
 

#include "tfs-m64.h"
#include "usart2.h"
#include "delay.h"
#include "usart.h"
///指纹模块 :Fingerprint module
 
uint8_t gFpmTxBuf[9];
uint8_t gFpmRxBuf[9];
uint8_t gFpmRxCnt;
 
 
/**
  * @brief  通过串口向指纹模块发送命令并接收响应指令
  * @param  timeOut:超时时间(单位:ms),在此时间内如果仍未接收到响应指令按超时处理
  * @retval 应答信息
  */
uint8_t fpm_sendAndReceive(uint16_t timeout)
{
  uint8_t  i, j;
  uint8_t checkSum = 0;  //校验码
	 
  gFpmRxCnt = 0; //接收计数清零,相当于清空缓冲区
	gFpmTxBuf[5] = 0; //命令数据的第六位始终为零
  
  /*发送8位数据包*/
  usart2_sendByte(CMD_HEAD);		//数据头
  for (i = 1; i < 6; i++)       //中间数据段
  {
    usart2_sendByte(gFpmTxBuf[i]);		 
    checkSum ^= gFpmTxBuf[i];
  }
  usart2_sendByte(checkSum);    //校验码
  usart2_sendByte(CMD_TAIL);    //数据尾
 
  while (gFpmRxCnt < 8 && timeout > 0)
  {
    delay_ms(1);
    timeout--;		   
  }
  
  if (gFpmRxCnt != 8) return ACK_TIMEOUT;
  if (gFpmRxBuf[HEAD] != CMD_HEAD) return ACK_FAIL;
  if (gFpmRxBuf[TAIL] != CMD_TAIL) return ACK_FAIL;
  if (gFpmRxBuf[CMD] != (gFpmTxBuf[CMD])) return ACK_FAIL;
 
  checkSum = 0;
  for (j = 1; j < CHK; j++) {   
    checkSum ^= gFpmRxBuf[j];
  }
	if (checkSum != gFpmRxBuf[CHK]) {
    return ACK_FAIL;
  }
	 return ACK_SUCCESS;
}	 
 
/**
  * @brief  使指纹模块进入休眠模式
  * @param  none
  * @retval 应答信息(ACK_SUCCESS  ACK_FAIL)
  */
uint8_t fpm_sleep(void)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_SLEEP_MODE;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = 0;
  gFpmTxBuf[P3] = 0;
  
  res = fpm_sendAndReceive(500);
  
  if(res == ACK_SUCCESS) {
    return ACK_SUCCESS;
  }
  else {
    return ACK_FAIL;
  }
  
}
 
/**
  * @brief  设置指纹的添加模式
  * @param  mode:指纹的添加模式(0:允许重复 1:禁止重复)
  * @retval 应答信息(ACK_SUCCESS  ACK_FAIL)
  */
uint8_t fpm_setAddMode(uint8_t mode)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_ADD_MODE;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = mode;
  gFpmTxBuf[P3] = 0;
  
  res = fpm_sendAndReceive(200);
  
  if(res == ACK_SUCCESS && gFpmRxBuf[Q3] == ACK_SUCCESS) {
    return ACK_SUCCESS;
  }
  else {
    return ACK_FAIL;
  }
}
 
/**
  * @brief  读取指纹的添加模式
  * @param  none
  * @retval 应答信息(0:允许重复 1:禁止重复)
  */
uint8_t fpm_readAddMode(void)
{ 
  gFpmTxBuf[CMD] = CMD_ADD_MODE;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = 0;
  gFpmTxBuf[P3] = 0X01;
  
  fpm_sendAndReceive(200);
  
  return gFpmRxBuf[Q2];
}
 
/**
  * @brief  获取用户数(实际上应该是指纹数,这里用用户数表示是为了与通信协议表述一致)
  * @param  none
  * @retval 应答信息(指纹的数目)
  */
uint16_t fpm_getUserNum(void)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_USER_CNT;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = 0;
  gFpmTxBuf[P3] = 0;
  
  res = fpm_sendAndReceive(200);
  
  if(res == ACK_SUCCESS && gFpmRxBuf[Q3] == ACK_SUCCESS) {
    return gFpmRxBuf[Q2];
  }
  else {
    return 0XFF;
  }
  
}
 
/**
  * @brief  删除所有的指纹
  * @param  none
  * @retval 应答信息(ACK_SUCCESS  ACK_FAIL)
  */
uint8_t fpm_deleteAllUser(void)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_DEL_ALL;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = 0;
  gFpmTxBuf[P3] = 0;
  
  res = fpm_sendAndReceive(200);
  
  if(res == ACK_SUCCESS && gFpmRxBuf[Q3] == ACK_SUCCESS) {
    return ACK_SUCCESS;
  }
  else {
    return ACK_FAIL;
  }
}
 
/**
  * @brief  删除制定位置的指纹
  * @param  userNum:指纹的位置(1-255)
  * @retval 应答信息(ACK_SUCCESS  ACK_FAIL)
  */
uint8_t fpm_deleteUser(uint8_t userNum)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_DEL;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = userNum;
  gFpmTxBuf[P3] = 0;
  
  res = fpm_sendAndReceive(200);
  
  if(res == ACK_SUCCESS && gFpmRxBuf[Q3] == ACK_SUCCESS) {
    return ACK_SUCCESS;
  }
  else {
    return ACK_FAIL;
  }
}
 
/**
  * @brief  录入指纹
  * @param  userNum:指纹存入的位置(1-255)
  * @param  userPermission:用户权限(1-3),具体含义自行定义。
  * @retval 应答信息(ACK_SUCCESS  ACK_FAIL  ACK_USER_EXIST  ACK_TIMEOUT)
  */
uint8_t fpm_addUser(uint8_t userNum, uint8_t userPermission)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_ADD_1;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = userNum;
  gFpmTxBuf[P3] = userPermission;
  
  res = fpm_sendAndReceive(30000);
 
  if(res == ACK_SUCCESS) {
    if(gFpmRxBuf[Q3] == ACK_SUCCESS) {
      gFpmTxBuf[CMD] = CMD_ADD_2;
      
      res = fpm_sendAndReceive(30000);
      
      if(res == ACK_SUCCESS) {
        if(gFpmRxBuf[Q3] == ACK_SUCCESS) {
          gFpmTxBuf[CMD] = CMD_ADD_3;
          
          res = fpm_sendAndReceive(30000);
          
          if(res == ACK_SUCCESS) {
            return gFpmRxBuf[Q3];
          }  
        }
      }
    }
  }
  return res;
 
}
 
/**
  * @brief  通过1:N的方式比较指纹
  * @param  none
  * @retval 匹配指纹的信息
  */
uint8_t fpm_compareFinger(void)
{
  uint8_t res;
  
  gFpmTxBuf[CMD] = CMD_MATCH;
  gFpmTxBuf[P1] = 0;
  gFpmTxBuf[P2] = 0;
  gFpmTxBuf[P3] = 0;
  
  res = fpm_sendAndReceive(30000);
  
  if(res == ACK_SUCCESS) 
  {
    if(gFpmRxBuf[Q3] == ACK_NOUSER) {
      return ACK_NOUSER;
    }
    if(gFpmRxBuf[Q3] == ACK_TIMEOUT) {
      return ACK_TIMEOUT;
    }
    if((gFpmRxBuf[Q2] != 0) && (gFpmRxBuf[Q3] == 1 || gFpmRxBuf[Q3] == 2 || gFpmRxBuf[Q3] == 3)) {
      return ACK_SUCCESS;
    }
  }
  return res;
}


6 最后

到了这里,关于stm32毕业设计 智能门禁系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机毕业设计】【mcuclub-dz-032】基于单片机的智能门禁控制系统设计

    项目名:基于单片机的门禁的设计 单片机:STM32F103C8T6 mcuclub-dz-032 功能简介: 1、通过扫码枪进行扫描二维码,当二维码识别成功,10s内需触发红外避障管,并通过红外测温模块进行测温,如果温度正常,则自动开锁,如果温度异常,则声光报警3次,锁不打开 2、通过RFID进行

    2024年01月18日
    浏览(47)
  • 物联网毕业设计 基于RFID的门禁系统

    Hi,大家好,学长今天向大家介绍一个 如何使用RFID技术构建一个单片机门禁系统 基于RFID的门禁系统 大家可用于 课程设计 或 毕业设计 选题指导,项目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/iot/README.md 本篇博客,学长先向大家介绍射频识别技术的概念、 分类及工作原。

    2024年02月08日
    浏览(32)
  • 基于STM32的智能门禁系统

    stm32F407主控芯片 RFID模块 矩阵按键模块 AS608指纹模块 SG90舵机模块 OLED显示屏模块 寻卡 读取卡序列号 匹配卡号 保存卡 删除卡 按行按列读取,获取按键值 检测是否有手指按下图像 刷指纹 录入指纹 删除指纹

    2024年02月13日
    浏览(32)
  • RFID课程设计--基于STM32F103RCT6的智能门禁系统,STM32RCT6+RC522+OLED+DHT11+4*4矩阵键盘

      本次课程设计要求如下,我们团队两人完成了90%的功能。   其中我们设置的是刷卡错误3次不报警,密码输入错3次报警(原理相同,大家根据需要自行修改)   然后暂时只能显示卡号和卡是第几个录入到系统中的,想到身份证号和电话(身份信息)输进去有点长就没

    2024年01月16日
    浏览(50)
  • Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)

            本文介绍:Linux上以opencv和qt库实现的人脸识别系统,可应用于考勤、门禁等场景,具有人脸录入、删除、人脸检测、识别、用户管理等完整功能。可运行于ARM嵌入式linux、ubuntu即纯软件、ARM+PC组合等多种方式,应用场景多样且易于移植各个平台。 毕业设计题目汇

    2024年02月04日
    浏览(48)
  • 基于STM32的智能门锁/智能门禁多功能系统

    本次设计是基于STM32F103C8T6(以下C8T6等同)开发的智能锁,支持多种方式对系统进行操作:蓝牙、指纹、RFID刷卡、4x4键盘输入,拥有友好的蓝牙收发界面和LCD交互界面。 蓝牙:作为总系统的管理员,有主管理和次管理,主管理只能有一个,副管理员可以有多个。主管理员拥有

    2024年02月08日
    浏览(39)
  • 基于树莓派4B与STM32的智能门禁系统项目(代码开源)

    前言: 本文为手把手教学 嵌入式经典项目 —— 智能门禁项目 ,本次项目采用  树莓派4B  与  STM32F103C8T6  进行联合开发。项目充分发挥各自 CPU 的优势与长处,将人脸识别的大计算量任务给 树莓派4B ,将门禁系统的控制部分交给 STM32 进行处理。该项目算是嵌入式人工智能

    2024年02月16日
    浏览(34)
  • STM32毕业设计——基于STM32+MQTT+WiFi技术的智能家居系统设计与实现(毕业论文+程序源码)——智能家居系统

    大家好,今天给大家介绍基于STM32+MQTT+WiFi技术的智能家居系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 智能家居技术

    2024年02月10日
    浏览(52)
  • stm32毕设 stm32 RFID员工打卡门禁系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(47)
  • 毕业设计 stm32智能灌溉系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包