一直想做一套智能门禁系统,一开始试过键盘密码锁控制的,后来简单做了一套,预期功能倒是都能实现,教程见前文。

做完后本人对键盘锁门禁依旧不是很满意,之前也看过刷卡门禁,简单查了点资料,能力范围内还是可以试试的,所以最近买来的射频 IC卡感应模块就像下面这样:

(RFID三年前其实就曾想尝试的,硬件准备完成后由于老师的相关提醒后来也就不了了之了。
当时老师担心我们会对学校的饭卡“下手”,误入歧途。在此再次衷心感谢老师当年的提醒与教导。
小楊说明一下,下面的内容您可以随意参考,但不要用下面的内容开展一些游离于法律边缘的活动,否则玩火自焚,没什么意思。)


小楊又一次开始学习RFID目的如下:

  • 1、熟练单片机SPI通信;
  • 2、了解 RFID 的基本概念和射频卡的工作原理;
  • 3、测试 RC522 模块对卡的识别;
  • 4、将RC522-RFID 模块应用到门禁系统。

所需材料

  • 1.普通PC一台;
    2.RFID-RC522 模块一个(附官方芯片说明书一份);
    3.CP2102模块一个;
    4.标准S50空白卡一张(附官方说明书一份);
    5.S50异形卡一个(钥匙扣形状);
    6.杜邦线一排;
    7.排针一条;
    8.禾灮Young_AVR智能机器人控制板一块(兼容Arduino代码)(附Atmel官方MCU说明书一份)。

MFRC522射频识别模块说明:

  • ◇ 芯 片: Philips MFRC522
    ◇ 支持卡型: mifare1 S50、mifare1 S70、mifare UltraLight、mifare Pro、mifare Desfire
    ◇ 晶振频率: 27.12MHZ
    ◇ 工作电流: 13—26mA/DC3.3V
    ◇ 空闲电流: 10-13mA/DC3.3V
    ◇ 休眠电流: <80uA
    ◇ 峰值电流: <30mA
    ◇ 物理尺寸: 40mm×60mm
    ◇ 工作温度: 摄氏-20—80度
    ◇ 储存温度: 摄氏-40—85度
    S50 感应式IC卡/复旦卡说明:
    ◇ 芯 片:  Philips Mifare 1 S50
    ◇ 存储容量:  8Kbit ,16个分区,每分区两组密码
    ◇ 工作频率:  13.56MHZ
    ◇ 通讯速度:  106Kboud
    ◇ 读写距离:  2.5—10CM
    ◇ 读写时间:  1-2MS
    ◇ 工作温度:  -20℃-85℃
    ◇ 擦写次数:  >100000次
    ◇ 数据保存:  >10年
    ◇ 应用范围:  企业/校园一卡通、公交储值卡、高速公路收费、停车场、小区管理等

MFRC522射频识别模块各引脚功能

  • SDA 串行数据线–在SPI接口中为NSS(从机标志管脚);(IIC接口时的I/O线)
    SCK 连接MCU的SCK信号;
    MOSI MCU输出,RC522接收(即主设备输出,从设备输入);
    MISO RC522输出,MCU接收(即从设备输出,主设备输入);
    IRQ 中断请求输出;
    GND 接地;
    RST 复位;
    3.3V 工作电压,若使用VCC为DC5V的MCU,请分压。

RFID系统组成

RFID 技术利用无线射频方式在阅读器和射频卡之间进行非接触双向数据传输,以达到目标识别和数据交换的目的。
最基本的 RFID 系统由三部分组成:

    1. 标签(Tag,即射频卡):由耦合元件及芯片组成,标签含有内置天线,用于和射频天线间进行通信。
    2. 阅读器:读取(在读写卡中还可以写入)标签信息的设备。
    3. 天线:在标签和读取器间传递射频信号。

MFRC522通信接口

MFRC522提供了3种接口模式:


* 1、10 Mbit/s的SPI通信接口;
* 2、I2C总线模式(快速模式下能达400 kbit/s,而高速模式下能达3.4 Mbit/s);
* 3、最高达1228.8 kbit/s的UART模式;

买来的射频识别模块硬件设计时采用了第一种模式——四线制SPI。

根据上图,绘制模块原理图如下:

通信时序

读写规则:


简单阅览了上述文档后,老套路,发烟测试,首先实现模块的读卡功能。

说明一下,为防止造成社会危害,小楊在文档中仅更新读卡相关的内容,写卡内容如有兴趣请在理解相关知识点后自行开发。

Arduino本身有个操作RC5200的库,需要自行安装:搜索”RC522”,选择”MFRC522”安装即可
点击”More info”可以跳转到github地址

安装完毕后,可以看到关于MFRC522的库示例,有读取UID、获取区块信息、卡片信息复制等。

注:一般而言IC卡是不能修改0扇区0区块的UID和厂商信息数据,这些是生产时就确定下来的。


硬件连接:

3.3V供电、GND接地不用多说,IRQ是中断才用到的此处没有用到可以不接,其余5个引脚接法如下表所示:

 /* Typical pin layout used:* -----------------------------------------------------------------------------------------*             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino*             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro* Signal      Pin          Pin           Pin       Pin        Pin              Pin* -----------------------------------------------------------------------------------------* RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST* SPI SS      SDA(SS)      10            53        D10        10               10* SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16* SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14* SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15*/

读取UID,并将其分别以十进制和十六进制输出到串口,简化版代码如下:

#include <SPI.h>
#include <MFRC522.h>#define SS_PIN 10
#define RST_PIN 9MFRC522 rfid(SS_PIN, RST_PIN); //实例化类// 初始化数组用于存储读取到的NUID
byte nuidPICC[4];void setup() { Serial.begin(9600);SPI.begin(); // 初始化SPI总线rfid.PCD_Init(); // 初始化 MFRC522
}void loop() {// 找卡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;}// 将NUID保存到nuidPICC数组for (byte i = 0; i < 4; i++) {nuidPICC[i] = rfid.uid.uidByte[i];}   Serial.print("十六进制UID:");printHex(rfid.uid.uidByte, rfid.uid.size);Serial.println();Serial.print("十进制UID:");printDec(rfid.uid.uidByte, rfid.uid.size);Serial.println();// 使放置在读卡区的IC卡进入休眠状态,不再重复读卡rfid.PICC_HaltA();// 停止读卡模块编码rfid.PCD_StopCrypto1();
}void printHex(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : "");Serial.print(buffer[i], HEX);}
}void printDec(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : "");Serial.print(buffer[i], DEC);}
}



下面不再直接调用大佬写好的库文件了,咱们仅使用SPI通信库实现识别卡
先来张图:

读取复旦卡ID并在串口显示
这次就不直接贴代码了,咱们一步步跟着官方说明来:



由上述MFRC522芯片相关寄存器组介绍文档,编辑代码如下:

//------------------MFRC522 register ---------------
//Page 0:Command and Status
#define Reserved00 0x00
#define CommandReg 0x01
#define CommIEnReg 0x02
#define DivlEnReg 0x03
#define CommIrqReg 0x04
#define DivIrqReg 0x05
#define ErrorReg 0x06
#define Status1Reg 0x07
#define Status2Reg 0x08
#define FIFODataReg 0x09
#define FIFOLevelReg 0x0A
#define WaterLevelReg 0x0B
#define ControlReg 0x0C
#define BitFramingReg 0x0D
#define CollReg 0x0E
#define Reserved01 0x0F
//Page 1:Command
#define Reserved10 0x10
#define ModeReg 0x11
#define TxModeReg 0x12
#define RxModeReg 0x13
#define TxControlReg 0x14
#define TxAutoReg 0x15
#define TxSelReg 0x16
#define RxSelReg 0x17
#define RxThresholdReg 0x18
#define DemodReg 0x19
#define Reserved11 0x1A
#define Reserved12 0x1B
#define MifareReg 0x1C
#define Reserved13 0x1D
#define Reserved14 0x1E
#define SerialSpeedReg 0x1F
//Page 2:CFG
#define Reserved20 0x20
#define CRCResultRegM 0x21
#define CRCResultRegL 0x22
#define Reserved21 0x23
#define ModWidthReg 0x24
#define Reserved22 0x25
#define RFCfgReg 0x26
#define GsNReg 0x27
#define CWGsPReg 0x28
#define ModGsPReg 0x29
#define TModeReg 0x2A
#define TPrescalerReg 0x2B
#define TReloadRegH 0x2C
#define TReloadRegL 0x2D
#define TCounterValueRegH 0x2E
#define TCounterValueRegL 0x2F
//Page 3:TestRegister
#define Reserved30 0x30
#define TestSel1Reg 0x31
#define TestSel2Reg 0x32
#define TestPinEnReg 0x33
#define TestPinValueReg 0x34
#define TestBusReg 0x35
#define AutoTestReg 0x36
#define VersionReg 0x37
#define AnalogTestReg 0x38
#define TestDAC1Reg 0x39
#define TestDAC2Reg 0x3A
#define TestADCReg 0x3B
#define Reserved31 0x3C
#define Reserved32 0x3D
#define Reserved33 0x3E
#define Reserved34 0x3F
//-----------------------------------------------
<-----------------未完待续----------------->

门禁示例请参考文档:
禾灮:DIY-智能门控—应用篇02-RFID门禁

码字不易,如果本文对您有帮助,请点个赞让我知道哦~

    上文中用到的所有资料小楊均已打包,如有需要请评论区留邮箱。

感谢一直关注着禾灮成长进步的朋友们。你们的信任、支持和鼓励,鞭策着我们一路走到了今天。感谢所有的合作伙伴,我们相互促进,共同见证了彼此的成长。感谢所有曾经在禾灮彼此倚靠、相互鼓励、携手同心、砥砺同行的兄弟姐妹。这里承载了我们的青春与热血。禾灮,感谢有你。未来,我们将一如既往,砥砺前行。禾灮·小楊2018.08.14

DIY智能门控——入门篇02:基于MFRC522的RFID识别相关推荐

  1. DIY智能门控——应用篇02:RFID门禁

    原理及准备工作请参考文档: 禾灮:DIY智能门控-入门篇02-基于MFRC522的RFID识别 下面直接贴视频: 源代码: // Visual Micro is in vMicro>Genera ...

  2. Xilinx的智能门控时钟技术你了解吗?

    文章目录 写在前面 摘要 智能时钟门控 额外优化 设计实现流程中的智能时钟门控 基准测试结果 总结 写在前面 在FPGA和ASIC设计中,时钟信号通常都是翻转频率非常高的信号,而电路的翻转本质是电容的 ...

  3. 基于51单片机的蓝牙智能小车——《入门篇》

    我认为在制作小车前需要有心里准备,要充满自信.满怀激情,学会坚持,切忌三分钟热度,半途而废. 在上一篇文章中我已经提到了制作智能小车所需要的材料,如果大家已经准备好材料,或是想进一步了解智能小车的制作 ...

  4. 智能车竞赛线上培训:英飞凌AURIX™的智能车培训入门篇

      第18届智能汽车竞赛的规则已经发布一段时间了,根据规则,摄像头组,独轮平衡,极速越野以及声音信标4个组别都需要采用英飞凌AURIX™系列MCU作为主控.为了让参赛的同学们更快速的入门以及了解英飞凌 ...

  5. cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例

    开发环境准备 利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React.Vue.AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍.本次 ...

  6. python入门及日常应用_python的日常应用-入门篇02

    大部分人在编写自己第一个程序的时候会做什么? 当然是让你的程序对我们的世界大喊一声"Hello world!"了. 今天我们来学习的便是Python中的输出语句. 如何让你的程序& ...

  7. Arduino基础入门篇02—Arduino开发环境IDE安装使用

    工欲善其事,必先利其器.本文主要介绍Arduino开发环境IDE的安装及功能介绍. Arduino IDE安装 从官网下载IDE开发环境,IDE下载地址 .笔者使用Win10系统,点击 Windows ...

  8. 辅助驾驶功能开发-控制篇(02)-基于滑模的纵向控制算法

    1 文档概述   本文档主要描述纵向滑模控制设计的功能.性能要求.算法程序设计,后续可作为程序编程和功能及性能测试参考文档. 2 功能要求   纵向控制系统根据用户设定的时距.结合自车车身信号和目标信 ...

  9. web自动化测试入门篇02——selenium安装教程

最新文章

  1. linux下free源码,linux命令free源码解读:Procps free.c
  2. 下面我将随机抽取一名幸运女生,XXXXX
  3. 马云马化腾,过的哪个冬
  4. 48 SD配置-定价配置-定义条件表
  5. 《天下无贼》经典对白
  6. pymavlink 源码剖析(一)之XML文件的数据解析
  7. 友盟+发布小程序统计分析工具U-MiniProgram
  8. pojo类中list存储其他字段_如何从其他包含pojo类对象的数组列表中删除数组列表记录...
  9. PASCAL VOC 2012 dataset、 云盘分享
  10. 虚拟服务器可以挂机游戏吗,云主机可以挂机吗?云服务器如何挂机/挂软件/游戏?...
  11. 2021-11-05 springMVC 错误:org.springframework.http.converter.HttpMessageNotWritableException: No conve
  12. linux u盘 慢_SUSE 10.0 U盘写入速度慢的最终解决方案--及两个Linux系统能否共享同一个swap分区...
  13. 人力资源如何进行数据分析
  14. picsart下载_PicsArt下载-PicsArt 安卓版v15.9.53-PC6安卓网
  15. 皮尔逊相关系数R的代码实现
  16. 设计模式六大原则及常用模式详解
  17. 解决2K、4K等高分屏下Photoshop窗口、字体太小等问题
  18. Ubuntu broadcom无线网卡驱动安装
  19. 经济学基础-曼昆 学习笔记
  20. Adobe CS5 通用注册机

热门文章

  1. 图像凹陷css_使用CSS混合创建单色的彩色图像
  2. 外链专员常用建设网站外链的方法
  3. 发票查验真伪的接口有么?
  4. 无线无源温度传感器项目-软件
  5. 基于wireshark的HTTP请求报文分析
  6. 联想手机android 通讯同步,联想乐同步:智能手机信息的云备份工具
  7. python删除图片_删除相同图片,Python实现
  8. 走进深圳博物馆(二)
  9. 华胜天成与IBM将展开深度合作
  10. LlamaIndex 联合创始人下场揭秘:如何使用私有数据提升 LLM 的能力?