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模块门禁设计相关推荐

  1. 带联网功能的RFID宿舍门禁(四)-NodeMCU网站与RC522共同控制舵机转动

    文章后续更新:http://mwhls.top/?p=659 新的更新内容请到mwhls.top查看. 如果没有图片请到上方的文章首发页面查看. 带联网功能的RFID宿舍门禁项目目录 我有点厉害,这个 ...

  2. 【毕业设计】基于RFID的门禁系统 - 单片机 物联网 嵌入式 stm32

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 射频识别 3.1 射频识别技术 3.2 射频识别模块 3.2.1 RFID模块 3.2.2 RFID模块组成 4 系统设计 4.1 系统架构 ...

  3. 物联网毕业设计 基于RFID的门禁系统

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 射频识别 3.1 射频识别技术 3.2 射频识别模块 3.2.1 RFID模块 3.2.2 RFID模块组成 4 系统设计 4.1 系统架构 ...

  4. 带联网功能的RFID宿舍门禁(六)-两年后的再次总结

    文章首发及后续更新:https://mwhls.top/4066.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

  5. 带联网功能的RFID宿舍门禁(五)-项目总结

    文章首发及后续更新:https://mwhls.top/1075.html 新的更新内容请到mwhls.top查看. 无图/格式错误请到上方的文章首发页面查看. 带联网功能的RFID宿舍门禁项目目录 ...

  6. Arduino提高篇24—摇杆调节时钟时间

    对于电子时钟而言,虽然我们可以在程序中对RTC芯片写入初始时间数据,但按键调时功能也是必不可少的,它可以让我们更加灵活的进行时间调节校准.本篇我们使用摇杆按键来调节时间数据,采用多级菜单的思路进行设计 ...

  7. Arduino 提高篇 1 —— 电子时钟

    一.实验器材 Arduino Uno R3开发板及扩展板 公对母.母对母杜邦线若干 面包板 0.96英寸 OLED显示屏 DS1302模块 二.实验步骤 Arduino DS1302 3.3V VCC ...

  8. 安卓设备门禁识别开发_基于Android和RFID的门禁管理系统

    基于 Android 和 RFID 的门禁管理系统 秦斌斌 ; 何极 ; 赵萌 ; 秦丽丽 [期刊名称] <无线通信技术> [年 ( 卷 ), 期] 2018(027)004 [摘要] 本 ...

  9. RFID RC522门禁系统

    RFID RC522门禁系统 RFID RC522门禁系统说明: 基于51单片机的RFID RC522门禁系统的主要功能是,在本系统中主要是演示了RFID RC522门禁系统,在单片机内部的RAM中I ...

最新文章

  1. JavaScrpt简单介绍
  2. 【机器学习-数据科学】第二节:ipython开发环境搭建以及pandas快速入门
  3. 你必须知道的session与cookie
  4. 【飞秋教程】文件断点续传
  5. nm 命令 程序符号信息查看
  6. iplatui---弹窗
  7. hibernate mysql语句_打印hibernate的SQL语句的几种办法
  8. [C++]变量和基本类型
  9. 《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》笔记
  10. php自动填表单,网页自动填表基础教程从简单开始
  11. Delphi 人民币大小写转换
  12. Windows XP 注册表修改大全
  13. html5 krpano,krpano HTML5 Viewer可以实现全景展示
  14. 解决Client.Timeout exceeded while awaiting headers报错
  15. Javascript 书写规范
  16. 使用NeRF进行3D体素渲染
  17. KindEditor编辑器上传修改拿shell漏洞
  18. [agc012e]Camel and Oases
  19. 磁场强度 H、磁通量 Φ、磁感应强度 B
  20. Matlab计算微分方程曲线求导及过曲线上点的切线方程

热门文章

  1. 红日靶场vulnstack1 内网渗透学习
  2. 大数据开发工程师必备那些技能
  3. 机器学习——入门基础
  4. 最小二乘法拟合圆公式推导及vc实现
  5. 利用Java计算多少次纸才能对折出珠峰高度
  6. 依赖倒置原则(DIP)
  7. 334. 递增的三元子序列 increasingTriplet
  8. 金融学与计算机金融有什么区别,高考志愿填报之热门专业:金融vs计算机如何选择...
  9. 保研院校、导师对比以及其方法论-V1
  10. xml文件读写(C#)