本项目将利用STM32单片机来实现指纹识别或RFID刷卡的门禁或考勤系统。

功能可选组合:1、指纹识别;2、RDIF刷卡识别;3、指纹+刷卡;(智能小区可加蓝牙wifi)

实现功能:指纹识别、射频RFID刷卡、LCD显示、用户交互

硬件平台:STM32单片机

所需工具:STM32开发板、指纹模块、刷卡模块、蓝牙wifi

编程语言:C语言

功能概述:利用指纹识别的签到考勤系统、利用RFID技术的刷卡门禁或考勤,利用RFID刷卡+蓝牙开门等功能的智能小区管理,带管理员登陆平台,支持添加/删除/查询等功能。

毕业设计题目汇总推荐参考:毕业设计:电子/通信/物联网/计算机专业选题目推荐参考(嵌入式linux/单片机STM32/图像)https://blog.csdn.net/qq_30155503/article/details/120339296https://blog.csdn.net/qq_30155503/article/details/120339296

获取资料及联系博主,请点如下链接:

stm32.txt · zengzr/share_contact - Gitee.com

系统设计框图:

以下以指纹识别为例进行详细讲解:(刷卡只是模块不同,其他功能差不多)

指纹模块硬件说明:

选用微雪的UART Fingerprint Reader,亦可选其他款指纹模块。

微雪的UART Fingerprint Reader是一款专用于二次开发集成应用的新型指纹开发模块,高速度、快识别、高稳定性。

产品特性:

指纹感应灵敏,识别速度快:

指纹模块采用高精度光路和成像元件,使用时,只需要手指轻轻一点,就能快速识别;

稳定性强:

采用ST的STM32F205高级数字处理芯片作处理器,低功耗,快速稳定;

开发方便:

串口用UART操作(直接接任何带串口单片机),操作简单,并配有PC机的演示学习等工具;

开放:

可以自由输入输出指纹图片、指纹特征文件及各种指纹操作,协议更全,开放更好。

STM32单片机

选用正点原子的STM32F103RCT6开发板,亦可选用其他款STM32开发板。

开发板的要求:

1、有UART串口:用来接指纹模块(视指纹模块而定,有些指纹模块可能为IIC或SPI等接口);

2、LCD屏:用以图形显示(若无图形显示需求亦可不要);

3、EEPROM存储芯片:用来存储用户数据;

4、其他,如按键、GPIO、LED等,视需求而定。

指纹模块程序驱动

指纹模块的驱动,要参考其配套的资料手册。

在用户手册中,会详细说明如何编程使用,截取部分章节如下:

如上,说明串口UART的波特率、数据位、停止位等;

以及通信协议的数据格式、指令定义等。

部分驱动程序如下:

#include "stm32f1xx_hal.h"
#include "usart.h"
#include "fingerprint.h"
#include <string.h>uint8_t finger_TxBuf[9];
uint8_t     Finger_SleepFlag;/***************************************************************************
* @brief      Query the number of existing fingerprints
* @return     0xFF: errorother: success, the value is the number of existing fingerprints
****************************************************************************/
uint8_t GetUserCount(void)
{uint8_t m;finger_TxBuf[0] = CMD_USER_CNT;finger_TxBuf[1] = 0;finger_TxBuf[2] = 0;finger_TxBuf[3] = 0;finger_TxBuf[4] = 0; m = TxAndRxCmd(5, 8, 100);if (m == ACK_SUCCESS && Usart1_ReceiveStruct.RX_pData[4] == ACK_SUCCESS){return Usart1_ReceiveStruct.RX_pData[3];}else{return 0xFF;}
}/***************************************************************************
* @brief      Get Compare Level
* @return     0xFF: errorother: success, the value is compare level
****************************************************************************/
uint8_t GetcompareLevel(void)
{uint8_t m;finger_TxBuf[0] = CMD_COM_LEV;finger_TxBuf[1] = 0;finger_TxBuf[2] = 0;finger_TxBuf[3] = 1;finger_TxBuf[4] = 0;  m = TxAndRxCmd(5, 8, 100);if (m == ACK_SUCCESS && Usart1_ReceiveStruct.RX_pData[4] == ACK_SUCCESS){return Usart1_ReceiveStruct.RX_pData[3];}else{return 0xFF;}
}/***************************************************************************
* @brief      Set Compare Level
* @param      temp: Compare Level,the default value is 5, can be set to 0-9, the bigger, the stricter
* @return     0xFF: errorother: success, the value is compare level
****************************************************************************/
uint8_t SetcompareLevel(uint8_t temp)
{uint8_t m;finger_TxBuf[0] = CMD_COM_LEV;finger_TxBuf[1] = 0;finger_TxBuf[2] = temp;finger_TxBuf[3] = 0;finger_TxBuf[4] = 0;   m = TxAndRxCmd(5, 8, 100);if (m == ACK_SUCCESS && Usart1_ReceiveStruct.RX_pData[4] == ACK_SUCCESS){return Usart1_ReceiveStruct.RX_pData[3];}else{return 0xFF;}
}/***************************************************************************
* @brief      Register fingerprint
* @return     ACK_SUCCESS: successother: see the macro definition
****************************************************************************/
uint8_t AddUser(void)
{uint8_t m;m = GetUserCount();if (m >= USER_MAX_CNT)return ACK_FULL;finger_TxBuf[0] = CMD_ADD_1;finger_TxBuf[1] = 0;finger_TxBuf[2] = m +1;finger_TxBuf[3] = 3;finger_TxBuf[4] = 0;      m = TxAndRxCmd(5, 8, 5000);    if (m == ACK_SUCCESS && Usart1_ReceiveStruct.RX_pData[4] == ACK_SUCCESS){finger_TxBuf[0] = CMD_ADD_3;m = TxAndRxCmd(5, 8, 5000);if (m == ACK_SUCCESS && Usart1_ReceiveStruct.RX_pData[4] == ACK_SUCCESS){return ACK_SUCCESS;}elsereturn ACK_FAIL;}elsereturn ACK_GO_OUT;
}/***************************************************************************
* @brief      Clear fingerprints
* @return     ACK_SUCCESS:  successACK_FAIL:     error
****************************************************************************/
uint8_t  ClearAllUser(void)
{uint8_t m;finger_TxBuf[0] = CMD_DEL_ALL;finger_TxBuf[1] = 0;finger_TxBuf[2] = 0;finger_TxBuf[3] = 0;finger_TxBuf[4] = 0;m = TxAndRxCmd(5, 8, 500);if (m == ACK_SUCCESS && Usart1_ReceiveStruct.RX_pData[4] == ACK_SUCCESS){      return ACK_SUCCESS;}else{return ACK_FAIL;}
}/***************************************************************************
* @brief      Check if user ID is between 1 and 3
* @return     TRUEFALSE
****************************************************************************/
uint8_t IsMasterUser(uint8_t UserID)
{if ((UserID == 1) || (UserID == 2) || (UserID == 3)) return TRUE;else  return FALSE;
}    /***************************************************************************
* @brief      Fingerprint matching
* @return     ACK_SUCCESS: successother: see the macro definition
****************************************************************************/
uint8_t VerifyUser(void)
{uint8_t m;finger_TxBuf[0] = CMD_MATCH;finger_TxBuf[1] = 0;finger_TxBuf[2] = 0;finger_TxBuf[3] = 0;finger_TxBuf[4] = 0;m = TxAndRxCmd(5, 8, 5000);if ((m == ACK_SUCCESS) && (IsMasterUser(Usart1_ReceiveStruct.RX_pData[4]) == TRUE)){    return ACK_SUCCESS;}else if(Usart1_ReceiveStruct.RX_pData[4] == ACK_NO_USER){return ACK_NO_USER;}else if(Usart1_ReceiveStruct.RX_pData[4] == ACK_TIMEOUT){return ACK_TIMEOUT;}else{return ACK_FAIL;}
}/***************************************************************************
* @brief  If you enter the sleep mode, then open the Automatic wake-up function of the finger,begin to check if the finger is pressed, and then start the module and match
****************************************************************************/
void Auto_Verify_Finger(void)
{if(Read_Finger_WAKE_Pin == GPIO_PIN_SET)   // If you press your finger{      while(Read_Finger_WAKE_Pin != GPIO_PIN_RESET){Finger_RST_Pin_HIGH;   // Pull up the RST to start the module and start matching the fingersLED1_Pin_HIGH;HAL_Delay(300);       // Wait for module to startprintf("Waiting Finger......Please try to place the center of the fingerprint flat to sensor !\r\n");switch(VerifyUser()){case ACK_SUCCESS: printf("Matching successful !\r\n");break;case ACK_NO_USER:printf("Failed: This fingerprint was not found in the library !\r\n");break;case ACK_TIMEOUT:    printf("Failed: Time out !\r\n");break;   case ACK_GO_OUT:printf("Failed: Please try to place the center of the fingerprint flat to sensor !\r\n");break;default:break;}//After the matching action is completed, drag RST down to sleep//and continue to wait for your fingers to press}   Finger_RST_Pin_LOW;LED1_Pin_LOW;return;}
}

获取资料及联系博主,请点如下链接:

stm32.txt · zengzr/share_contact - Gitee.com

更多内容,期待补充!

项目设计:基于STM32的指纹/刷卡的门禁/考勤/智能小区管理系统相关推荐

  1. 毕设-基于STM32/C51刷卡的门禁系统(基础版)

    简介 厂房弄完了,开始学习关于刷卡的门禁系统.这东西说简单也简单,说难搞也有点难搞啊! 器件选型 一般的常用RFID模块就是RC522(淘宝店铺MFRC-522 RC522 RFID射频 IC卡感应模 ...

  2. 动态二维码刷卡触摸按键门禁一体机性能与选型攻略

    二维码门禁设备涉及到动态二维码.静态二维码.涉及IC卡.CPU卡.身份证等多种感应卡的刷卡功能.以及相关门禁控制器.门禁闭门器.磁力锁.电插锁.电控锁.开门按钮.门禁电源等多配件的搭配与选型,本文章主 ...

  3. 基于STM32智能RFID刷卡汽车位锁控制系统设计

    百度网盘下载地址(945):点击下载 前言: 在车位日益紧张的今天,如何避免私家车位被他人抢占,是令人头痛的事.日前面市的一种新型车位锁,不仅有效解决了这一问题,还可对车辆起到防盗作用,深受车主的喜爱 ...

  4. 75、基于STM32单片机RFID刷卡签到考勤门禁系统无线蓝牙/wifi设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘要 对于高校管理而言,学生考勤一直是不可忽视的 ...

  5. 基于单片机的多功能智能指纹_手机_门禁卡_按键密码锁系统设计

    百度网盘下载地址(947):点击下载 随着智能化的发展,智能门禁系统渐渐的出现在同学们的毕设中,尤其是可以支持多种解锁方式的,比如指纹.手机.门禁卡.按键密码.钥匙解锁功能等等,今天分享的这个毕设项目 ...

  6. 基于STM32的指纹识别智能锁设计

    本设计是基于stm32的指纹识别智能锁设计,主要实现以下功能: 1,OLED显示输入锁的状态,解锁状态,开锁成功,开锁失败,确定,清除 2,通过矩阵键盘输入开门密码.修改密码.确认密码等操作: 3,可 ...

  7. 【DIY】制作一个刷卡进门装置

    摘要:本文主要介绍了如何通过Arduino和RFID射频卡外加一个舵机来DIY一个自动开锁作品 作者博客地址:http://www.yooongchun.cn/ 基本想法 宿舍里使用的是钥匙开门,近来 ...

  8. STM32系列(HAL库)——F103C8T6通过MFRC522、RFID射频卡、门禁卡模块读取卡片ID(二)

    本文继上一篇:STM32系列(HAL库)--F103C8T6通过MFRC522.RFID射频卡.门禁卡模块读取卡片ID 本文介绍在运用RC522模块时,运用链表结构存储数据的操作 Let's go! ...

  9. 基于RFID技术的门禁考勤管理系统

    RFID门禁管理系统作为一种新型的现代化安全管理系统,是当前安防系统的主要组成部分,在各种场所的应用非常普及.江湖云致力于RFID技术的应用研究,积累的大量的行业经验,服务方案已被广泛应用于各个领域. ...

  10. 门禁|梯控管理系统CPU卡读写器发卡器HX-WR03密码设置操作说明

    门禁|梯控管理系统CPU卡读写器发卡器HX-WR03是一款支持CPU卡读写.加密等功能读写设备,专用CPU卡门禁管理系统.CPU卡通道管理系统.CPU卡梯控管理系统发卡.加密等应用.本文将重点介绍门禁 ...

最新文章

  1. saiav.win forum.php,【emWin实战教程V2.0】第4章    emWin5.xx的裸机方式移植(F4
  2. libdvbpsi源码分析(三)PSI decocder详细分析
  3. myBatis之事务管理
  4. layui移动端适配_移动端适配方案
  5. 【VLC-Android】vlc-android简例
  6. 软件工程(Rational统一过程)
  7. 弹出模态窗口,关闭并刷新页面
  8. 微信小程序获取二维码中URL中带的参数
  9. 一台机器上同时部署多个tomcat服务
  10. c语言中cot函数图像,cot函数图像
  11. python2.7打印中文乱码的问题解决
  12. AngularJS指令范围中的#39;@#39;和#39;=#39;有什么区别?
  13. 软件测试学习(二)测试用例例子、黑盒测试(一)
  14. luogu_P4767 [IOI2000]邮局
  15. 使用信号量机制解决家庭吃水果问题。
  16. Python绘制简单折线图、散点图
  17. visio 画箭头_visio2013中画箭头的具体操作步骤
  18. 用Android-X86和VirtualBox打造高性能Android开发环境
  19. CSDN删除上传资源操作
  20. Glide,AndroidX包兼容问题

热门文章

  1. 卡尔加里大学计算机世界排名,2020年卡尔加里大学计算机科学专业本科申请条件-学费-世界排名...
  2. img标签底部总是留有一条白色空隙
  3. mysql跨库复制_mysql跨库表结构和数据复制
  4. js json stringify
  5. 运筹学与管理科学著名期刊解读
  6. 【编程入门】密码破译
  7. win10系统与时间服务器同步超时,Win10时间同步出错怎么办 Win10时间同步出错解决方法...
  8. WORD 2007删除尾注横线
  9. 2021-09-20 Process finished with exit code -1073741515 (0xC0000135) QT Clion
  10. [IT最前沿--有点意思] 微博营销案例:杜蕾斯鞋套雨夜传奇