RFID门禁系统

2023-11-04

前言

这一个RFID项目主要是通过RC522模块来达到智能识别ID卡(RFID卡),通过识别ID卡号从而实现门禁的功能。
当然,这个项目同时也可以用于其他RFID识别项目,这一次的博客从来不仅限于讲这一个“门禁系统”。

> CSDN资源下载:https://download.csdn.net/download/soul1314love/85109742?spm=1001.2014.3001.5503

一、RFID射频

射频识别(RFID)是 Radio Frequency Identification 的缩写。
其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID 的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。

二、功能演示

1.正确的卡:开门、OLED显示卡号和开门状态、LED翻转、蜂鸣器响300ms,两秒后自动关门并OLED关闭
请添加图片描述
2.错误的卡:OLED显示卡号和关门状态、OLED显示错误、蜂鸣器响50ms间断报警10次
请添加图片描述
3.按键开门:开门、OLED显示卡号和开门状态、LED翻转、蜂鸣器响300ms,两秒后自动关门并OLED关闭请添加图片描述

三、我们使用的硬件和软件

硬件
1.STM32F03C8T6最小系统板(含有蜂鸣器、LED等东西(非必要))
2.RC-522-IC卡感应模块
在这里插入图片描述
可以在淘宝上面直接搜到,可以直接购买
3.舵机(用于控制开门的一个东西)
4.下载器(我这里使用的ST-link)
软件
1.keil5 (MDK)
2.STM32CuBe MX(因为比较方便嘛,其实也可以拖库)

三、使用步骤

1.新建工程

1.配置一个SPI,再外加一个可输出IO口(输出IO有用)
2.配置一个定时器,可以释放PWM波
3.配置一个按键,一个输入IO口
4.配置一个输出IO控制我的蜂鸣器
5.下载口,串口什么的不多讲了
总体配置
在这里插入图片描述
细节配置
在这里插入图片描述

2.程序

1.加入.c.h程序(文件我会上传至CSDN)
我是在新建的工程文件中加入了一个My_Data的文件夹,把这些.c.h直接放了进去
在这里插入图片描述

在这里插入图片描述
2.调用文件和添加至工程
在这里插入图片描述

在这里插入图片描述
3.添加头文件
在这里插入图片描述
4.配置IO和初始化啥啥的
rc522.h里面需要定义把之前定义的输出IO使用上,用于RC522的RESET功能。
在这里插入图片描述
oled.h里面也可以直接定义IO引脚(SPI接口的)
在这里插入图片描述
看了程序基本就知道怎么弄了,我把大部分的复制东西改成简单移动的方法了,有什么问题可以直接评论或者私聊我

最后main.c(主要代码)

代码如下:

//变量定义
char OK[100];
char KEY[]={136,4,8,236};
char KEY1[]={96 ,247, 156, 186 };
uint8_t flag;
uint8_t Card_Type1[2];  
uint8_t Card_ID[4]; 
uint8_t Card_KEY[6] = {0xff,0xff,0xff,0xff,0xff,0xff};    //{0x11,0x11,0x11,0x11,0x11,0x11};
uint8_t Card_Data[16];
uint8_t status;
//初始化
OLED_Init();
	
	Card_Type1[0]=0x04;
	Card_Type1[1]=0x00;
	
	OLED_Init();//初始化OLED
  OLED_Clear();//清屏
	
	PcdReset();  //复位RC522
	PcdAntennaOff();  //关闭天线
	HAL_Delay(100);
	PcdAntennaOn();  //打开天线
	printf(" \r\n");  
	printf("开始寻卡\r\n");  //"Card Type(0x%04X):"
	uint16_t i = 0;
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  TIM2 -> CCR1 = 90;
//按键程序
void key()
{
		if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_15) == 0)
		{
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14|GPIO_PIN_13);
			OLED_ShowString(0,4,(uint8_t*)"DOOR_OPEN   ");
			TIM2 -> CCR1 = 300;
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
			Delay_ms(300);
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
			Delay_ms(2000);
			TIM2 -> CCR1 = 90;
			OLED_ShowString(0,4,(uint8_t*)"DOOR_CLOSE   ");
		}
}
//读卡程序
void Read_IDcard(void )
{
		if(MI_OK==PcdRequest(0x52, Card_Type1))  //寻卡函数,如果成功返回MI_OK  打印多次卡号
		{
			uint16_t cardType = (Card_Type1[0]<<8)|Card_Type1[1];//读不同卡的类型
			printf("卡类型:(0x%04X)\r\n",cardType);  //"Card Type(0x%04X):"
			switch(cardType){
			case 0x4400:printf("Mifare UltraLight\r\n");break;
			case 0x0400:printf("Mifare One(S50)\r\n");break;
			case 0x0200:printf("Mifare One(S70)\r\n");break;
			case 0x0800:printf("Mifare Pro(X)\r\n");break;
			case 0x4403:printf("Mifare DESFire\r\n");break;
			default:printf("未知卡类型\r\n");break;
			}
			status = PcdAnticoll(Card_ID);//防冲撞 如果成功返回MI_OK
			if(status != MI_OK){
				printf("ID卡冲撞错误\r\n");
			}else{
				sprintf(OK,"ID:%02X%02X%02X%02X",Card_ID[0],Card_ID[1],Card_ID[2],Card_ID[3]);
				OLED_ShowString(0,2,(uint8_t*)OK);
			}
			///
			for(int i=0;i<4;i++)   //卡号(十进制)比较
			{
				if(KEY[i]==Card_ID[i]||KEY1[i]==Card_ID[i])
					flag =1;
				else 
					flag = 0;
			}
			if(flag == 1)//验证成功-开门
			{
				printf("验证成功\r\n");
				OLED_ShowString(0,6,(uint8_t*)"           ");
				HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14|GPIO_PIN_13);
				OLED_ShowString(0,4,(uint8_t*)"DOOR_OPEN   ");
				TIM2 -> CCR1 = 300;
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
				Delay_ms(300);
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
				Delay_ms(2000);	
				TIM2 -> CCR1 = 90;
				OLED_ShowString(0,4,(uint8_t*)"DOOR_CLOSE");
			}
			else//验证失败
			{
				printf("验证失败\r\n");
				OLED_ShowString(0,6,(uint8_t*)"ID:error");
				for(int i = 0;i<=10;i++)
				{
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
				Delay_ms(50);
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
				Delay_ms(50);
				}
			}
			///
			status = PcdSelect(Card_ID);  //选卡 如果成功返回MI_OK
			if(status != MI_OK)
				printf("选卡失败\r\n");
			else
				printf("选卡成功\r\n");
			status = PcdAuthState(PICC_AUTHENT1A,5,Card_KEY,Card_ID);//验证卡密码 如果成功返回MI_OK
			if(status != MI_OK)
				printf("密码验证失败\r\n");
			status = PcdHalt();  //卡片进入休眠状态
			if(status != MI_OK)
				printf("ID卡休眠失败\r\n");		
			else
				printf("ID卡休眠\r\n");	
		}
}


总结

这只是对程序的部分讲解,可能讲的不是很清楚,有问题可以私信我(希望我能看见)
CSDN下载:https://download.csdn.net/download/soul1314love/85109742?spm=1001.2014.3001.5503

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RFID门禁系统 的相关文章

  • 科研无人机平台P600进阶版,突破科研难题!

    随着无人机技术日益成熟 无人机的应用领域不断扩大 对无人机研发的需求也在不断增加 然而 许多开发人员面临着无法从零开始构建无人机的时间和精力压力 同时也缺乏适合的软件平台来支持他们的开发工作 为了解决这个问题 我们特别开发了科研无人机平台P
  • 访问私有变量或方法

    本文主要介绍一下如何访问类的私有成员变量以及类的私有方法 这里以下面这个类来举例 interface HomeController UIViewController NSString name2 property nonatomic cop
  • 分页插件(jquery.pagination.js)简单案例

    分页插件 jquery pagination js 前言 开发中需要展示数据操作记录 但数量是未知的 使用该插件 实现分页切换页码的功能 1 使用 引入文件 先引入jQuery 再引入pagination组件 2 具体效果 3 html代码
  • ubuntu挂载Windows共享文件夹

    1 windows下设置shared文件夹为共享文件夹 2 linux下执行命令 sudo apt get install cifs utils samba client sudo mount t cifs o username dhc p
  • linux下搭建测试环境

    linux应用服务器 腾讯云服务器 centos7 传送文件上传到 linux服务器 winscp 文件传输工具 jdk及tomcat安装 本服务器安装的是jkd1 8 tomcat8 mysql 5 7 下载jkd1 8 https ww

随机推荐

  • Mysql在大型网站的应用架构演变

    摘要 本文主要描述在网站的不同的并发访问量级下Mysql架构的演变历程 架构的可扩展性往往和并发是息息相关 没有并发的增长 也就没有必要做高可扩展性的架构 常用的扩展手段主要有Scale up和Scale out两种 前者为纵向扩展 主要通
  • Java八大基本数据类型

    Java八大基本数据类型 开发工具与关键技术 MyEclipse 10 java 作者 刘东标 撰写时间 2019 04 04 Java语言提供了八种基本类型 六种数字类型 四个整数型 两个浮点型 一种字符类型 还有一种布尔型 1 数据类型
  • Windows下创建进程简介

    正在执行的应用程序称为进程 进程不仅仅是指令和数据 它还有状态 状态是保存在处理器寄存器中的一组值 如当前执行指令的地址 保存在内存中的值 以及唯一定义进程在任一时刻任务的所有其他值 进程与应用程序的一个重要的区别在于 进程运行时 进程的状
  • Linux笔记:文本编辑器vi基础使用

    文章目录 目的 工作模式 命令行模式 默认模式 光标移动 屏模滚动 选择复制黏贴与删除 搜索与替换 撤销与重复 插入模式 总结 目的 vi是几乎所有Unix Linux系统下都自带的文本编辑器 有点类似于window上的记事本 如果用惯了现
  • Sophus库的安装和使用教程

    本系列文章为原创 转载请注明出处 作者 Dongdong Bai 邮箱 baidongdong nudt edu 若您觉得本博文对您有帮助 请您为我点赞并关注我 以鼓励我写出更优秀的博文 谢谢 一 Sophus库简介 Eigen库是一个开源
  • 读spi_flash的id

    读SPI FLASH的ID 在上一课中spi i2c adc OLED文件夹下添加spi flash c及spi flash h文件 并添加到si工程中 明确目的 在main函数中调用函数读取spiflash的厂家ID和设备ID 并打印 明
  • MySQL 数据表创建详细SQL语法

    Table 数据表创建 数据表创建 语法规则1 CREATE TEMPORARY TABLE IF NOT EXISTS tbl name create definition table options partion options 语法
  • gitlab 安装,libc.so.6: version `GLIBC_2.25‘ not found

    背景 ubuntu 16 04 以及 ubuntu18 05 安装 gitlab 都报错误 opt gitlab embedded bin ruby lib x86 64 linux gnu libc so 6 version GLIBC
  • 深度优先遍历(邻接矩阵,邻接表)

    深度优先遍历也称为深度优先搜索 简称为DFS 深度优先遍历的思路是从图中某个顶点V出发 访问此顶点 然后从V的未被访问过的邻接点出发深度优先遍历图 直到图中所有与V路径相通的顶点都被访问到 该遍历过程用到递归 深度优先遍历用到了一个辅助数组
  • Caffe中的优化方法

    在Deep Learning中 往往loss function是非凸的 没有解析解 我们需要通过优化方法来求解 Caffe通过协调的进行整个网络的前向传播推倒以及后向梯度对参数进行更新 试图减小损失 Caffe已经封装好了三种优化方法 分别
  • TypeError: ‘builtin_function_or_method‘ object is not subscriptable解决办法

    python报 TypeError builtin function or method object is not subscriptable 这个错 大概率是因为括号用错了 比如应该用圆括号 用成了方括号 或者缺少括号 应检查括号是否使
  • 进阶项目(12)PS2键盘驱动程序设计讲解

    写在前面的话 我们从小就开始接触电脑 曾经多么羡慕那些在键盘上洋洋洒洒的人 手指轻柔的飞舞 刻画出一章章美丽的篇幅 那么作为工程师的我们 同样拥有着属于我们的情怀 如果曾经的向往变成我们喜欢的玩具 如果曾经的神秘变成我们夜以继日的痴迷 那么
  • 【转】C/C++中的 mutable、volatile 关键字作用详解

    mutable和volatile 很少遇到这两个关键字 学嵌入式估计知道后者 深入研究 C 的估计知道前者 1 mutable 在 C 中 mutable 是为了突破 const 的限制而设置的 被 mutable 修饰的变量 将永远处于可
  • Error: Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘

    目录 出错现象 出错原因 解决方案 出错现象 这个报错是我在安装webpack vue loader的配置中遇到的 如果你不是这个背景请绕行 不然可能无法解决你的问题 主要是安装了npm i vue loader plugin save d
  • #pragma once与 #ifndef的区别

    为了避免同一个文件被include多次 可以采用两种方法 1 ifndef方式2 pragma once方式在能够支持这两种方式的编译器上 二者并没有太大的区别 但是两者仍然还是有一些细微的区别 方式一 ifndef SOMEFILE H
  • matlab 小波分析实例,小波分析MATLAB实例

    小波分析MATLAB实例 由会员分享 可在线阅读 更多相关 小波分析MATLAB实例 7页珍藏版 请在人人文库网上搜索 1 到小波分析1 背景传统的信号理论 是建立在Fourier分析基础上的 而Fourier变换作为一种全局性的变化 其有
  • GitLab安装配置教程-Docker方式安装

    文章目录 一 安装 二 配置 三 使用 四 SSH连接方式 五 Http连接方式 参考文档 一 安装 环境准备 CentOS 7 6 Minimal 192 168 73 140 Docker 20 10 12 创建一个目录用于存放日志 配
  • zabbix详解(十二)——zabbix监控MySQL主从状态实战

    今天继续给大家介绍Linux运维相关知识 本文主要内容是zabbix监控MySQL主从同步状态 本文旨在配置实现zabbix对MySQL主从同步状态的监控 并且当MySQL主从同步状态宕机后 进行邮件报警 一 MySQL主从配置 关于MyS
  • Java版PPT处理控件Aspose.Slides迎来v19.12升级!轻松创建旭日图并调整样式

    Aspose Slides for Java是独特的演示处理API 使应用程序能够读取 编写 修改和转换PowerPoint演示文稿 作为独立的API 它提供了管理PowerPoint关键功能的功能 例如管理文本 形状 表格和动画 向幻灯片
  • RFID门禁系统

    RFID门禁系统 前言 一 RFID射频 二 功能演示 三 我们使用的硬件和软件 三 使用步骤 1 新建工程 2 程序 总结 前言 这一个RFID项目主要是通过RC522模块来达到智能识别ID卡 RFID卡 通过识别ID卡号从而实现门禁的功