引言
RFID(无线射频识别)技术作为现代物联网的重要组成部分,已经广泛应用于门禁、支付、物流等众多领域。本文将带领大家使用Arduino开发板和RFID读写模块,实现RFID卡片的刷卡识别功能。
百度网盘链接
经过优化后的代码,删掉了没用的那些代码,并且将代码整合到了一个文件中。
链接:https://pan.baidu.com/s/1LCc8lwT6U5g4jrtWoJYblA?pwd=ouxk
提取码:ouxk
注意
1.这是之前做的项目(双机通信)中的一部分,所以程序可能会有些冗余,请见谅。
2.本文使用的Arduino开发板为Arduino Uno,RFID读写模块为MFRC522。
3. 需要买一些磁卡的时候,注意磁卡的频率,频率不一样,RFID读写模块无法识别。(之前买的时候没注意到)
所需材料
Arduino Uno开发板
MFRC522 RFID读写模块
RFID卡片若干
杜邦线若干
SG90舵机一个
Arduino IDE软件
硬件连接
将MFRC522 RFID读写模块与Arduino Uno开发板进行连接,具体连接方式如下:
RFID模块 Arduino Uno
VCC 引脚连接 5V
GND 引脚连接 GND
SDA 引脚连接 D10
SCK 引脚连接 D13
MOSI 引脚连接 D11
MISO 引脚连接 D12
RST 引脚连接 D9
连接图如下:
将舵机与Arduino Uno开发板进行连接,具体连接方式如下:
舵机
红线 VCC
灰色 GND
橙色 SIG/信号线
舵机 Arduino Uno
VCC 引脚连接 5V
GND 引脚连接 GND
SIG 引脚连接 D2
安装所需的库
需要安装 MFRC522库
依次点击
工具->管理库
搜索MFRC522
安装
RFID 代码编写
在代码编辑器中编写以下代码:(可以直接复制使用)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <MFRC522.h>
/ *
这个不用管,这是一个软串口
* /
// #include <SoftwareSerial.h>
// SoftwareSerial AT(6, 7); // 建立SoftwareSerial对象,RX引脚6, TX引脚7
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
byte nuidPICC[4]; //存储读取的UID
// 存储有权限的卡ID ,这些是我提前录入的一些卡ID
// 可以根据需要添加更多的卡ID
//定义一个数组,保存16进制的UID,就是自己的身份信息识别码
byte cardID[4] = {0xC3, 0x9C, 0xD2, 0xA9};//存储有权限的卡ID
byte cardID__wxl[4] = {0xA9,0xAE,0x8C,0xC2};
byte cardID_gcy[4]={0x5A,0x46,0xED,0x80};
byte cardID_lx[4]={0x5A,0x91,0x55,0x1A};
void setup() {
SPI.begin();
rfid.PCD_Init();
Serial.begin(9600);
// AT.begin(9600); // 软件`串口 默认波特率 9600
Serial.println("RC522初始化完成...");
}
// 十六进制输出
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 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;
}
// 保存读取到的UID
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();
if(Serial.available()>0)
{
char val = Serial.read();
Serial.println(val);
AT.println(val);
}
// 判断是否为有权限的卡 如果是有权限的卡,可以执行开门关门的操作
下面的一段代码是把识别的卡发送到另外一个开发板,进行打开关闭操作
if (nuidPICC[0] == cardID__wxl[0] && nuidPICC[1] == cardID__wxl[1]
&& nuidPICC[2] == cardID__wxl[2] && nuidPICC[3] ==cardID__wxl[3])
{
//可以写一个舵机打开的程序替换以下三行
int val = 1;
Serial.println(val);
AT.println(val);
}
if (nuidPICC[0] == cardID[0] && nuidPICC[1] ==cardID[1]
&& nuidPICC[2] == cardID[2] && nuidPICC[3] == cardID[3])
{
int val = 2;
Serial.println(val);
AT.println(val);
}
if (nuidPICC[0] == cardID_gcy[0] && nuidPICC[1] ==cardID_gcy[1]
&& nuidPICC[2] == cardID_gcy[2] && nuidPICC[3] == cardID_gcy[3])
{
int val = 3;
Serial.println(val);
AT.println(val);
}
if (nuidPICC[0] == cardID_lx[0] && nuidPICC[1] ==cardID_lx[1]
&& nuidPICC[2] ==cardID_lx[2] && nuidPICC[3] == cardID_lx[3])
{
int val = 4;
Serial.println(val);
AT.println(val);
}
// 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
rfid.PICC_HaltA();
// 停止读卡模块编码
rfid.PCD_StopCrypto1();
delay(3000);
}
SG90 舵机代码编写
打开Arduino IDE软件,新建一个项目,并将MFRC522库导入到项目中。
在代码编辑器中编写以下代码:(可以直接复制使用)
#include <Servo.h>
Servo myservo; // 定义Servo对象来控制
void setup() {
Serial.begin(9600);
myservo.attach(2); // 控制线连接数字2
myservo.write(0);
pinMode(16,OUTPUT);
Serial.println("welcome to use our stm");
}
// RFID刷卡开门后,等待五秒自动关闭
void kaimen()
{
myservo.write(90);
digitalWrite(16,HIGH);
delay(3000);
myservo.write(0);
digitalWrite(16,LOW);
}
void guanmen ()
{
myservo.write(0);
digitalWrite(16,LOW);
}
void loop() {
/* 加入自己想加的一些数据 */
}
测试与调试
1.将Arduino与电脑通过USB线连接,上传程序。打开Arduino IDE的串口监视器,设置波特率为9600。将RFID卡片靠近RFID读写模块,你应该能在串口监视器中看到卡片的UID。
2. 如果在测试过程中遇到问题,请检查硬件连接是否正确,以及代码是否有误。同时,确保你的RFID卡片与MFRC522模块兼容。
应用实例
RFID刷卡识别功能可以应用于许多实际场景中。例如,你可以使用它来制作一个简单的门禁系统,当员工刷卡时,Arduino可以通过串口将卡片信息发送到电脑,电脑再根据卡片信息判断是否允许员工进入。
总结与展望
通过本文的指导,你应该已经能够使用Arduino和MFRC522 RFID读写模块实现RFID卡片的刷卡识别功能。这只是一个简单的入门示例,你可以根据自己的需求进行扩展和优化。最后在编写本文的过程中,我尽力确保所有信息的准确性和完整性。然而,由于个人知识和经验的限制,难免会有疏漏或错误之处。因此,我非常欢迎各位读者在阅读过程中指出任何错误或不足之处,并提供宝贵的建议
标签:RFID,val,Arduino,nuidPICC,cardID,Serial,门禁 From: https://blog.csdn.net/m0_47673526/article/details/137167722