首页 > 其他分享 >基于Arduino的RFID智能门禁

基于Arduino的RFID智能门禁

时间:2024-03-30 19:30:54浏览次数:16  
标签:RFID val Arduino nuidPICC cardID Serial 门禁

引言

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

相关文章

  • 全网你能看到最全的RFID整体技术介绍!
    文章目录1RFID简介1.1RFID基本组成1.2工作原理2背景起源2.1工具原型事例2.2理论建立3分类3.1基于工作频率分类3.2基于电子标签是否带电分类4RFID内部组成4.1电子标签4.2读写器4.3软件系统5电子标签详解5.1标签硬件组成5.2标签数据格式内部分区5.3读写锁定操作6RFID......
  • 基于LabVIEW上位机与Arduino单片机串口通信的DS18B20环境温度采集
    基于LabVIEW上位机与Arduino单片机串口通信的DS18B20环境温度采集Arduino代码#include<OneWire.h>#include<DallasTemperature.h>#defineONE_WIRE_BUS2//DS18B20接至Arduino数字口2OneWireoneWire(ONE_WIRE_BUS);DallasTemperaturesensors(&oneWire);byteco......
  • Arduino IDE 环境配置
    ArduinoIDE环境配置目录ArduinoIDE环境配置1.安装方式2.操作方法(Arduino中文社区)2.1.安装ArduinoIDE2.2.下载固件2.3.修改ArduinoIDE语言2.4.添加开发板管理网址2.5.运行离线包2.6.检查安装是否成功1.安装方式github下载:这种方式可以获取到相关固件,但是如果想......
  • RFID技术在人员定位和监控方面相较于其他技术有何明显优势?
    RFID技术在人员定位和监控方面相较于其他技术具有一系列明显优势,具体体现在以下几个方面:首先,RFID技术采用无线电信号进行非接触式识别,无需与目标对象进行物理接触,因此可以在各种环境下进行远距离的自动识别和定位。这使得RFID技术适用于不同领域的应用,如仓库管理、医院、工厂等,为......
  • arduino固件烧录
    NodeMCU入坑指南-烧写固件并连接WIFI-0pen1-博客园(cnblogs.com)在这里要说一下,我们现在要烧写不带DEBUG的固件,如果烧写了带DEBUG的固件可能会出现这个问题:nodeMCU无限打印wifieventmonitorhandleeventcbiscalled烧录不开启debug的烧录开启Debug的固件就正常......
  • 何为代码检查服务的门禁级检查
    本文分享自华为云社区《代码检查服务三级检查体系中门禁级检查范围介绍》,作者:gentle_zhou。在日常团队研发过程中,有三个阶段是代码检查服务关注的安全检测点:IDE级检查、MR门禁级检查和版本级检查;分别对应着:在开发人员本地桌面IDE端对本地代码进行静态扫描,在MergeReuqest阶段对......
  • Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示
    ArduinoRP2040+SSD1306I2COLED+LittleFS存储GBK字库实现中文显示......
  • arduino uno R3驱动直流减速电机(蓝牙控制)
    此篇博客用于记录使用arduino驱动直流减速电机的过程,仅实现简单的功能:PID调速、蓝牙控制1、直流减速电机简介2、DRV8833电机驱动模块简介3、HC-05蓝牙模块简介电机转动测试4、PID控制5、蓝牙控制电机1、直流减速电机简介我在淘宝购买的电机,减速比是21.3,旋转一圈产生......
  • NFC技术与RFID技术有哪些异同点?
    NFC技术与RFID技术在一些方面相似,但也存在一些不同之处。以下是它们之间的主要异同点:相同点:都是无线通信技术:NFC和RFID都是利用无线信号进行数据传输的通信技术,它们都不需要通过物理连接就可以实现数据传输。都使用射频信号:NFC和RFID都使用射频信号来进行数据传输,这些信号......
  • 基于arduino IDE 部署ESP32 ESP8266开发环境
    本文涉及技术:arduinoIDE环境,windows10系统软件,开发环境配置,单片机新手入门;关于arduino程序学习与相关教程,可以前往Arduino中文社区Arduino教程汇总贴arduino1.8.9arduinoIDE是一个很棒的集成开发环境,自带有开发版环境管理,函数库管理,一键编译、下载;串口调试的功能,代码格......