Arduino提高篇21—RFID模块门禁设计
RFID可应用于门禁系统,我们可以把数据写入标签,然后将有权限的标签进行记录保存,当有用户标签被扫描时,进行身份信息读取比对,然后根据权限进行相应的操作。
本篇配合OLED屏幕来模拟门禁系统,只对标签的UID进行简单对比判断,当然你也可以设置好自己的密钥,然后将数据写入到标签,进行更加严谨的身份识别。
1. 实验材料
- Uno R3开发板
- 配套USB数据线
- 面包板及配套连接线
- OLED显示屏
- RFID-RC522模块及配套S50白卡和异形卡
2. 实验步骤
1. 根据原理图搭建电路图。
RC522模块的3.3V、GND分别对应连接开发板的3.3V、GND,模块的MOSI、MISO、SCK分别连接开发板的SPI接口11、12、13,模块的SDA、RST分别连接开发板数字管脚10、9。OLED屏的VCC和GND分别连接开发板的3.3V和GND,OLED屏的SDA和SCL分别连接开发板A4和A5。
实验原理图如下图所示:
实物连接图如下图所示:
2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>#include <SPI.h>
#include <MFRC522.h>#define SS_PIN 10
#define RST_PIN 9MFRC522 rfid(SS_PIN, RST_PIN);#define OLED_RESET 4
Adafruit_SSD1306 oled(128, 64, &Wire, OLED_RESET);byte nuidPICC[4]; //存储读取的UID
byte cardID[4] = {0x6D, 0xC5, 0x4D, 0x96};//存储有权限的卡IDvoid setup() {Serial.begin(9600);SPI.begin();rfid.PCD_Init();Serial.println("RC522初始化完成...");oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);oled.setTextColor(WHITE);//开像素点发光oled.clearDisplay();//清屏oled.setTextSize(2); //设置字体大小
}void loop() {oled.clearDisplay();//清屏oled.setCursor(15, 2);//设置显示位置oled.println("--RFID--");oled.setCursor(25, 40);//设置显示位置oled.println("SCAN...");oled.display(); // 开显示//搜索新卡if ( ! rfid.PICC_IsNewCardPresent())return;// 验证NUID是否可读if ( ! rfid.PICC_ReadCardSerial())return;MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);// 检查是否MIFARE卡类型if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&piccType != MFRC522::PICC_TYPE_MIFARE_1K &&piccType != MFRC522::PICC_TYPE_MIFARE_4K) {Serial.println("不支持读取此卡类型");return;}// 保存读取到的UIDfor (byte i = 0; i < 4; i++) {nuidPICC[i] = rfid.uid.uidByte[i];}Serial.print("十六进制UID:");printHex(rfid.uid.uidByte, rfid.uid.size);Serial.println();if (nuidPICC[0] == cardID[0] && nuidPICC[1] == cardID[1]&& nuidPICC[2] == cardID[2] && nuidPICC[3] == cardID[3]){oled.clearDisplay();//清屏oled.setCursor(15, 2);//设置显示位置oled.println("--RFID--");oled.setCursor(25, 40);//设置显示位置oled.println("CHECK OK");oled.display(); // 开显示delay(1000);oled.clearDisplay();//清屏oled.setCursor(15, 2);//设置显示位置oled.println("--RFID--");oled.setCursor(25, 40);//设置显示位置oled.println("OPEN...");oled.display(); // 开显示} else {oled.clearDisplay();//清屏oled.setCursor(15, 2);//设置显示位置oled.println("--RFID--");oled.setCursor(15, 40);//设置显示位置oled.println("CHECK ERR");oled.display(); // 开显示}// 使放置在读卡区的IC卡进入休眠状态,不再重复读卡rfid.PICC_HaltA();// 停止读卡模块编码rfid.PCD_StopCrypto1();delay(3000);
}// 十六进制输出
void printHex(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : " ");Serial.print(buffer[i], HEX);}
}
3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。
3. 实验现象
有权限的标签卡事先保存记录了UID,读卡对比可以开门,而另外的卡则不能开门操作。
关注公众号「TonyCode」,更多精彩内容分享。
回复「1024」获取1000G学习资料。
个人博客
Arduino提高篇21—RFID模块门禁设计相关推荐
- 带联网功能的RFID宿舍门禁(四)-NodeMCU网站与RC522共同控制舵机转动
文章后续更新:http://mwhls.top/?p=659 新的更新内容请到mwhls.top查看. 如果没有图片请到上方的文章首发页面查看. 带联网功能的RFID宿舍门禁项目目录 我有点厉害,这个 ...
- 【毕业设计】基于RFID的门禁系统 - 单片机 物联网 嵌入式 stm32
文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 射频识别 3.1 射频识别技术 3.2 射频识别模块 3.2.1 RFID模块 3.2.2 RFID模块组成 4 系统设计 4.1 系统架构 ...
- 物联网毕业设计 基于RFID的门禁系统
文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 射频识别 3.1 射频识别技术 3.2 射频识别模块 3.2.1 RFID模块 3.2.2 RFID模块组成 4 系统设计 4.1 系统架构 ...
- 带联网功能的RFID宿舍门禁(六)-两年后的再次总结
文章首发及后续更新:https://mwhls.top/4066.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...
- 带联网功能的RFID宿舍门禁(五)-项目总结
文章首发及后续更新:https://mwhls.top/1075.html 新的更新内容请到mwhls.top查看. 无图/格式错误请到上方的文章首发页面查看. 带联网功能的RFID宿舍门禁项目目录 ...
- Arduino提高篇24—摇杆调节时钟时间
对于电子时钟而言,虽然我们可以在程序中对RTC芯片写入初始时间数据,但按键调时功能也是必不可少的,它可以让我们更加灵活的进行时间调节校准.本篇我们使用摇杆按键来调节时间数据,采用多级菜单的思路进行设计 ...
- Arduino 提高篇 1 —— 电子时钟
一.实验器材 Arduino Uno R3开发板及扩展板 公对母.母对母杜邦线若干 面包板 0.96英寸 OLED显示屏 DS1302模块 二.实验步骤 Arduino DS1302 3.3V VCC ...
- 安卓设备门禁识别开发_基于Android和RFID的门禁管理系统
基于 Android 和 RFID 的门禁管理系统 秦斌斌 ; 何极 ; 赵萌 ; 秦丽丽 [期刊名称] <无线通信技术> [年 ( 卷 ), 期] 2018(027)004 [摘要] 本 ...
- RFID RC522门禁系统
RFID RC522门禁系统 RFID RC522门禁系统说明: 基于51单片机的RFID RC522门禁系统的主要功能是,在本系统中主要是演示了RFID RC522门禁系统,在单片机内部的RAM中I ...
最新文章
- JavaScrpt简单介绍
- 【机器学习-数据科学】第二节:ipython开发环境搭建以及pandas快速入门
- 你必须知道的session与cookie
- 【飞秋教程】文件断点续传
- nm 命令 程序符号信息查看
- iplatui---弹窗
- hibernate mysql语句_打印hibernate的SQL语句的几种办法
- [C++]变量和基本类型
- 《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》笔记
- php自动填表单,网页自动填表基础教程从简单开始
- Delphi 人民币大小写转换
- Windows XP 注册表修改大全
- html5 krpano,krpano HTML5 Viewer可以实现全景展示
- 解决Client.Timeout exceeded while awaiting headers报错
- Javascript 书写规范
- 使用NeRF进行3D体素渲染
- KindEditor编辑器上传修改拿shell漏洞
- [agc012e]Camel and Oases
- 磁场强度 H、磁通量 Φ、磁感应强度 B
- Matlab计算微分方程曲线求导及过曲线上点的切线方程