使用RFID模块实现门禁的功能 Arduino的RFID模块的使用(MF RC522)


文章目录

    • 使用RFID模块实现门禁的功能 Arduino的RFID模块的使用(MF RC522)
  • 前言
  • 一、RFID是什么?
    • 1.RFID简介
    • 2.RFID-RC522模块介绍
  • 二、如何使用
    • 1.硬件部分
    • 2.软件部分
      • 2.1 需要使用到的库文件
      • 2.2 代码段
  • 三、如何使用
  • 总结

前言

很久以前就想做一个使用NFC卡来开关门锁的小玩意,找了很多案例都没有找到合适的,网上教的人也比较少于是只能慢慢摸索,学习速度很慢,在这里我将用一个小案例来说一说Arduino的RFID模块的使用.


一、RFID是什么?

1.RFID简介

射频识别(RFID)是 Radio Frequency Identification 的缩写。

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

具体请看百度: 射频识别技术.

2.RFID-RC522模块介绍

来看看RFID模块的样子

二、如何使用

1.硬件部分

模块使用的是MF RC522芯片,模块与Arduino通讯方式为SPI(同步串行外设接口总线)通信,Arduino工作在主模式下,RC522工作在从模式下,在本例程中我使用的是arduino的Arduino Pro Micro开发板,如下为引脚定义,请自行核对

MFRC522 Reader/PCD Arduino Uno/101 Arduino Mega Arduino Nano v3 Arduino Leonardo/Micro Arduino Pro Micro
模块的引脚 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

还用到了一个按钮和三个表示状态的led灯,连接如下

2.软件部分

2.1 需要使用到的库文件

RFID-RC522的库链接: 点击进入下载.如何安装请百度。

2.2 代码段

功能为按下按钮开始储存卡的数据,绿灯常亮。再次按下退出,开始门锁功能,黄灯常亮,如果有已经储存的卡放置在读卡器前绿灯亮一下然后熄灭,反之红灯亮一下。

#include <SPI.h>
#include <MFRC522.h>#define SS_PIN 10
#define RST_PIN 5#define Button_Pin 4
#define yellow_Led 5
#define green_Led 6
#define red_Led 7//按钮用的定义//
unsigned char val = 0;//变量val 存储按钮的状态
unsigned char old_val = 0;//暂存val变量的上一个时间状态
unsigned char state1=0;
unsigned char Button1=0;
unsigned char kacck=0;   //让"开始储存卡"只用一次static int CardNumber = 0;  //卡的储存次数MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key; byte nuidPICC[8][4];void setup() { Serial.begin(9600);SPI.begin(); // Init SPI busrfid.PCD_Init(); // Init MFRC522 rfid.PCD_SetAntennaGain(rfid.RxGain_max);pinMode(yellow_Led,OUTPUT);pinMode(green_Led,OUTPUT);pinMode(red_Led,OUTPUT);pinMode(Button_Pin,INPUT);blink_LED();digitalWrite(yellow_Led,HIGH);}void loop() {Button_Press();while(Button1 == 1) {Button_Press();if((Button1 == 1)&&(kacck==0)) {delay (10);kacck = 1;}if ( ! rfid.PICC_IsNewCardPresent())return;if ( ! rfid.PICC_ReadCardSerial())return;MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);// 检测是否为支持的卡片if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  piccType != MFRC522::PICC_TYPE_MIFARE_1K &&piccType != MFRC522::PICC_TYPE_MIFARE_4K) {Serial.println(F("你的卡可能不受支持"));}if (Store_CheckCard() ) {Serial.println(F("新的卡已经检测到了。"));// 将NUID存储到nuidPICC数组中for (byte i = 0; i < 4; i++) {nuidPICC[CardNumber][i] = rfid.uid.uidByte[i];}Serial.println(F("NUID:"));Serial.print(F("十六进制为: "));printHex(rfid.uid.uidByte, rfid.uid.size);Serial.println();for (byte a = 0; a < 8; a++){Serial.println();for (byte i = 0; i < 4; i++) {Serial.print(nuidPICC[a][i] < 0x10 ? " 0" : " ");Serial.print(nuidPICC[a][i],HEX);}}CardNumber++;}else Serial.println(F("已经读取过这个卡了。"));}//储存卡// 如果传感器/读卡器上没有新卡,则返回主程序。这将在空闲时保存整个进程。if ( ! rfid.PICC_IsNewCardPresent())return;// 验证是否已读取NUIDif ( ! rfid.PICC_ReadCardSerial())return;if (Checkcard2() ) {for (byte i = 0; i < 4; i++) {Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(rfid.uid.uidByte[i],HEX);}Serial.println(F("通过")); digitalWrite(green_Led, HIGH);   // turn the LED on (HIGH is the voltage level)delay(500);                       // wait for a seconddigitalWrite(green_Led, LOW);    // turn the LED off by making the voltage LOWdelay(500);  }else {Serial.println();Serial.println(F("未通过"));for (byte i = 0; i < 4; i++) {Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(rfid.uid.uidByte[i],HEX);}digitalWrite(red_Led, HIGH);   // turn the LED on (HIGH is the voltage level)delay(500);                       // wait for a seconddigitalWrite(red_Led, LOW);    // turn the LED off by making the voltage LOWdelay(500);     }// 停止 PICCrfid.PICC_HaltA();// 停止加密 on PCDrfid.PCD_StopCrypto1();}///闪烁灯
void blink_LED(){unsigned short delay_Time=40;for(int j=0;j<3;j++){for(int i=5;i<8;i++){digitalWrite(i, HIGH);   delay(delay_Time);       digitalWrite(i, LOW);    delay(delay_Time);     }for(int i=7;i>4;i--){digitalWrite(i, HIGH);   delay(delay_Time);       digitalWrite(i, LOW);    delay(delay_Time);     }}
}//在储存卡的时候检测卡片是否储存在芯片里/
int Store_CheckCard(){unsigned short i=0;unsigned short Store_CheckCard_unm1=0;while(i<8){for(unsigned short i1=0;i1<8;i1++){if(rfid.uid.uidByte[0] == nuidPICC[i][0] & rfid.uid.uidByte[1] == nuidPICC[i][1] & rfid.uid.uidByte[2] == nuidPICC[i][2] & rfid.uid.uidByte[3] == nuidPICC[i][3]){Store_CheckCard_unm1++;}i++;}}if  (Store_CheckCard_unm1 == 0){return 1;Store_CheckCard_unm1 =0;}else return 0;}/在读取卡的时候检测卡片是否储存在芯片里///
int Checkcard2(){unsigned short i=0;unsigned short Checkcard2_unm1=0;while(i<8){for(unsigned short i1=0;i1<8;i1++){if(rfid.uid.uidByte[0] == nuidPICC[i][0] & rfid.uid.uidByte[1] == nuidPICC[i][1] & rfid.uid.uidByte[2] == nuidPICC[i][2] & rfid.uid.uidByte[3] == nuidPICC[i][3]){Checkcard2_unm1++;}i++;}}if  (Checkcard2_unm1 != 0){return 1;Checkcard2_unm1 =0;}else return 0;
}按下按钮开始写入卡的UNID//
void Button_Press(){//按下按钮val = digitalRead(Button_Pin);//读取输入数值并且存储if((val==LOW)&&(old_val==HIGH))//检查按钮的变化情况{state1++;}if(state1==1){Button1 = 1;digitalWrite(green_Led,HIGH);digitalWrite(yellow_Led,LOW);}if((state1==2)||(state1==0)){state1=0;Button1 = 0;digitalWrite(green_Led,LOW);digitalWrite(yellow_Led,HIGH);}old_val=val;//val现在是旧的了,让我们暂存一下}/*** Helper routine to dump a byte array as hex values to Serial. */
void printHex(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : " ");Serial.print(buffer[i], HEX);}
}

三、如何使用

总结

博主我也是刚刚开始学习,如果有问题可以加QQ群116239571,如果我知道都会回答的。

Arduino使用RFID模块来储存卡信息实现智能门锁(MF RC522)相关推荐

  1. RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块

    该系统模块主要由RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3组成的门禁系统模块.这里使用舵机充当门锁,用户可以刷卡开门,也可以通过APP控制舵机状态达到开门的 ...

  2. Arduino 电子积木 串口RFID模块

    RFID射频识别是一种非接触式的物体识别技术,它可以通过射频信号自动识别目标对象并获取相关数据,因此许多互动项目正是借用这一特性来实现对物体的识别的.通常来讲,一个最基本的RFID识系统主要由以下三部 ...

  3. 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上

    文章目录 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上 实现效果: 模块说明: 引脚接线方法: 程序源码 附录 快速上手Arduino – 打印超声波模块测距信息到OLED屏幕 ...

  4. vue读取终端硬件信息_双通道RFID模块助力电力数据采集终端(不必多说,直接测试对比)...

    推动超高频技术应用的RFID模块 打包模组.全面简化设计 极高的性价比,让更多领域用得起超高频RFID M6002 是我司自主研发的一款高性能双通道嵌入式超高频RFID 读写模块,该模块主要是解决 单 ...

  5. Arduino 控制RFID读写器读写 IC卡

    Arduino 控制RFID读写器读写 IC卡 一.IC卡的认识   IC卡可以通过频段进行划分,低频(125KHz~134kHz,典型工作频率是12KHz).高频(13.56MHz)和超高频(860 ...

  6. 【毕设教程】单片机RFID模块的使用 - 物联网 嵌入式 毕业设计 stm32

    文章目录 1 简介 2 RFID模块 2.1 RFID模块组成 3 连接单片机 4 代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍单片机项目开发常用外围器件 RFID模块的使用 ...

  7. Arduino版RFID门锁

    在本教程中,我们将学习什么是RFID,如何工作以及如何制作基于Arduino的RFID门锁.您可以观看以下视频或阅读下面的书面教程以了解更多详细信息. RFID如何工作以及如何制作基于Arduino的 ...

  8. 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

    目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...

  9. 【基于 Arduino 的 RFID门锁】

    [基于 Arduino 的 RFID门锁] 1. 概述 2. 射频识别的工作原理 3. RFID 和 Arduino 4. Arduino RFID门锁门禁项目 5. 源代码 在本教程中,我们将了解什 ...

最新文章

  1. BZOJ2298 [HAOI2011]problem a 【dp】
  2. VS2010中使用正则表达式替换时无法使用回车符的解决方法
  3. 解决:缺少aclocal、autoconf、automake
  4. 原图像中的68个关键点是怎么获取_武汉课工场云计算培训:一级运动模型在动图中的应用...
  5. Kafka的常用命令(包括:下载安装、后台启动)
  6. 小闹乎谈新手必备的撸猫手册
  7. Hibernate——入门
  8. 060031班第一次班级聚会
  9. FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架
  10. 运动世界校园一直显示服务器开小差,运动世界校园跑步异常 运动世界跑步成绩异常怎么办...
  11. day3----部署duboo微服务值部署zk和Jenkins(3)
  12. P1456 Monkey King
  13. 企业管理系统类型有哪些?企业管理系统如何选型?
  14. TCP、UDP网络编程面试题
  15. 钉钉(工作协同)应用之前端源码赏析
  16. win10禁用Ctrl+Alt+向左箭头等快捷键
  17. 自制操作系统-最简单的系统hello World
  18. Wayback Burgers在日本开设新餐厅
  19. java常微分方程数值解,SymPy / SciPy:求解具有不同变量的常微分方程组
  20. 自适应 CSS 栅格布局

热门文章

  1. 你的生命有什么可能 读书笔记
  2. 12306泄露数据分析(二)
  3. 双活数据中心概念及优缺点介绍
  4. 交通流量预测数据集解读
  5. pycharm 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案背景描述...
  6. HyperV修改分辨率
  7. 微信js 已经填写JS接口安全域名了,仍然报invalid url domain
  8. Realm在android的应用
  9. 高通820(msm8996)camera hal源码分析
  10. 资深行业专家王煜全的演讲:“移动互联网中的产品创新机会”