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

news/2024/11/17 5:47:49/

本项目将利用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

更多内容,期待补充!


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

相关文章

电感-温升电流-RMS电流-饱和电流-额定电流

温升电流&#xff08;Temperature Rise Current&#xff09; 因为直流电阻DCR&#xff08;DC Resistance&#xff09;的存在&#xff0c;当加载到电感器两端的电流逐渐增加时&#xff0c;更多的功率损耗会使电感器上的温度逐渐升高&#xff0c;当电感器的温度在环境温度&#x…

精益生产管理的优势特点以及工具步骤

一、何为精益生产 精益生产&#xff08;LeanProduction&#xff0c;简称LP&#xff09;是美国麻省理工学院数位国际汽车计划组织&#xff08;IMVP&#xff09;的专家对日本“丰田JIT&#xff08;JustInTime&#xff09;生产方式”的赞誉之称&#xff0c;精&#xff0c;即少而精…

运动用什么蓝牙耳机好?2021年运动蓝牙耳机排行榜

之前有段时间笔者特别沉迷于独自走在路上的时候&#xff0c;带着耳机&#xff0c;听着音乐&#xff0c;悠闲地走着。这样看来&#xff0c;好像也没有什么不对&#xff0c;有一部分人平时也会这样。但是&#xff0c;这样做的话确实有些不妥&#xff0c;欠缺安全意识。偶尔听音乐…

微信小程序:音乐播放器(附源码)

效果图&#xff1a; 代码实现&#xff1a; index.js代码&#xff1a; Page({/*** 页面的初始数据*/data: {item:0,tab:0,// 播放器列表数据playlist:[{id:1,title:"晴天",singer:周杰伦,src:http://localhost:3000/1.mp3,converImgUrl:../images/yhm.png},{id:2,ti…

DIY一个自己的音乐播放器2.0来袭

前言&#xff1a;之前做的第一版播放器功能做出来了&#xff0c;但发现结构不是很优雅以及后端api很不稳定&#xff0c;所以进行了一次小升级。此次升级 功能更全&#xff0c;体验更好&#xff0c;api更稳定&#xff0c;技术栈更多&#xff0c;收获也更多?。 [温馨提示&#x…

Mac装机必备之拯救歌荒,好用的五款Mac音乐播放器推荐

Mac平台上好用的音乐播放器有什么推荐&#xff1f;想要最新最热的音乐排行榜、歌单、电台、MV&#xff1f;想要海量无损在线曲库&#xff1f;追求高品质的听觉盛宴&#xff1f; 今天给大家分享的是Mac装机必备之音乐播放器推荐&#xff0c;拯救你的歌荒&#xff0c;缓解你的工作…

JS和H5做一个音乐播放器,附带源码

http://mp.weixin.qq.com/s/KpXT9X46AMlUVXQvpHuXGQ 效果图&#xff1a; 实现的功能 1、首页 2、底部播放控件 3、播放页面 4、播放列表 5、排行榜 6、音乐搜索 输入搜索关键词&#xff0c;点击放大镜图标 7、侧边栏 目录结构 开发心得与总结 1、轮播图 首先感谢作者ShanaMaid/…

【开源项目分享】GitHub中文排行榜 - 帮助你发现高分优秀中文项目-Java

榜单设立目的 &#x1f1e8;&#x1f1f3; GitHub中文排行榜&#xff0c;帮助你发现高分优秀中文项目&#xff1b;各位开发者伙伴可以更高效地吸收国人的优秀经验、成果&#xff1b;中文项目只能满足阶段性的需求&#xff0c;想要有进一步提升&#xff0c;还请多花时间学习高分…