Arduino使用RFID模块来储存卡信息实现智能门锁(MF RC522)
使用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)相关推荐
- RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块
该系统模块主要由RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3组成的门禁系统模块.这里使用舵机充当门锁,用户可以刷卡开门,也可以通过APP控制舵机状态达到开门的 ...
- Arduino 电子积木 串口RFID模块
RFID射频识别是一种非接触式的物体识别技术,它可以通过射频信号自动识别目标对象并获取相关数据,因此许多互动项目正是借用这一特性来实现对物体的识别的.通常来讲,一个最基本的RFID识系统主要由以下三部 ...
- 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上
文章目录 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上 实现效果: 模块说明: 引脚接线方法: 程序源码 附录 快速上手Arduino – 打印超声波模块测距信息到OLED屏幕 ...
- vue读取终端硬件信息_双通道RFID模块助力电力数据采集终端(不必多说,直接测试对比)...
推动超高频技术应用的RFID模块 打包模组.全面简化设计 极高的性价比,让更多领域用得起超高频RFID M6002 是我司自主研发的一款高性能双通道嵌入式超高频RFID 读写模块,该模块主要是解决 单 ...
- Arduino 控制RFID读写器读写 IC卡
Arduino 控制RFID读写器读写 IC卡 一.IC卡的认识 IC卡可以通过频段进行划分,低频(125KHz~134kHz,典型工作频率是12KHz).高频(13.56MHz)和超高频(860 ...
- 【毕设教程】单片机RFID模块的使用 - 物联网 嵌入式 毕业设计 stm32
文章目录 1 简介 2 RFID模块 2.1 RFID模块组成 3 连接单片机 4 代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍单片机项目开发常用外围器件 RFID模块的使用 ...
- Arduino版RFID门锁
在本教程中,我们将学习什么是RFID,如何工作以及如何制作基于Arduino的RFID门锁.您可以观看以下视频或阅读下面的书面教程以了解更多详细信息. RFID如何工作以及如何制作基于Arduino的 ...
- 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522
目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...
- 【基于 Arduino 的 RFID门锁】
[基于 Arduino 的 RFID门锁] 1. 概述 2. 射频识别的工作原理 3. RFID 和 Arduino 4. Arduino RFID门锁门禁项目 5. 源代码 在本教程中,我们将了解什 ...
最新文章
- BZOJ2298 [HAOI2011]problem a 【dp】
- VS2010中使用正则表达式替换时无法使用回车符的解决方法
- 解决:缺少aclocal、autoconf、automake
- 原图像中的68个关键点是怎么获取_武汉课工场云计算培训:一级运动模型在动图中的应用...
- Kafka的常用命令(包括:下载安装、后台启动)
- 小闹乎谈新手必备的撸猫手册
- Hibernate——入门
- 060031班第一次班级聚会
- FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架
- 运动世界校园一直显示服务器开小差,运动世界校园跑步异常 运动世界跑步成绩异常怎么办...
- day3----部署duboo微服务值部署zk和Jenkins(3)
- P1456 Monkey King
- 企业管理系统类型有哪些?企业管理系统如何选型?
- TCP、UDP网络编程面试题
- 钉钉(工作协同)应用之前端源码赏析
- win10禁用Ctrl+Alt+向左箭头等快捷键
- 自制操作系统-最简单的系统hello World
- Wayback Burgers在日本开设新餐厅
- java常微分方程数值解,SymPy / SciPy:求解具有不同变量的常微分方程组
- 自适应 CSS 栅格布局
热门文章
- 你的生命有什么可能 读书笔记
- 12306泄露数据分析(二)
- 双活数据中心概念及优缺点介绍
- 交通流量预测数据集解读
- pycharm 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案背景描述...
- HyperV修改分辨率
- 微信js 已经填写JS接口安全域名了,仍然报invalid url domain
- Realm在android的应用
- 高通820(msm8996)camera hal源码分析
- 资深行业专家王煜全的演讲:“移动互联网中的产品创新机会”