基于Arduino RFID门禁系统

介绍

射频识别或RFID(Radio-Frequency Identification)是一种通过无线电信号进行自动识别,通过RFID标签检索和存储数据的方法。

这些 RFID 标签可以贴在动物、物体上。因此,这些标签具有许多应用,例如贴在车辆上的不停车标签、动物识别。有 3 种类型的 RFID 标签:无源标签是对发射器发送的信号做出响应的标签、半无源标签和本身发射信号的有源标签。目前有几种方法可以控制对某个位置的访问:使用指纹、带密码的键盘以及使用 RFID 系统。

在本文中,我们将学习如何使用 RFID 技术开发门禁系统。该系统将包括 MFRC522 RFID 模块、用于开门的伺服电机、作为系统 HMI 的显示器以及信号 LED。因此在本文中,我们将学习如何使用 RFID 模块开发访问控制。
因此,通过本文您将了解到:

在面包板板上进行电路组装;
了解RFID模块的功能;
伺服电机启动;
在液晶显示屏上显示字符。

现在,我们将开始使用RFID模块开发停车场门禁系统项目的完整介绍。使用带 Arduino 的 RFID 模块开发停车场门禁系统
该项目的核心是 RFID 模块,它由带有 MFRC522 集成电路的印刷电路板和电路板上的天线组成。当电路板通电时,模块会发出射频信号,当标签接近模块时,标签就会被读取,每个标签都有不同的代码。该模块由 3.3 V 供电,它使用 SPI(串行外设接口)通信与所使用的微控制器进行通信。

开发这个项目的第一步是组装图 1 中的电路。
路的操作非常简单!伺服电机用作打开和关闭门的机制。每次标签被 RFID 模块识别时,Arduino 都会发送信息以激活或关闭门。LCD用作与用户的通信接口。接下来,我们将了解该项目的编程逻辑是如何工作的。
Arduino停车系统控制的代码逻辑
要对 Arduino Nano 进行编程,我们需要以下库:

SPI -包含执行 SPI 通信所需功能的库。
MFRC522 -包含与 RFID 模块通信的必要函数的库。
Servo -包含启动伺服电机的必要函数的库。
Wire -包含与 LCD 显示器进行 I2C 通信所需功能的库。

Arduino IDE 中未安装 liquidCrystal_I2C 和 MFRC522 库,因此我们必须安装它们。安装库后,关闭 Arduino IDE 并再次打开它。完整代码如下所示。

/* * Teste Leitor RFID * tag 1 F1 B103 1F 241 17703 31
F1 B1 03 1Ftag 2 14 45 29 57 20 69 41 87
14 45 29 57*/#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>Servo myservo ;
LiquidCrystal_I2C lcd (0x27,2,1,0,4,5,6,7,3,POSITIVE);#define vermelho 4
#define verde 5
#define SS_PIN 10
#define RST_PIN 9MFRC522 mfrc522 (SS_PIN, RST_PIN);void setup() {  Wire.begin();lcd.begin(16,2);  lcd.setBacklight(HIGH);  lcd.setCursor(0,0);  lcd.print("Aproxime a sua   ");  lcd.setCursor(0,1);  lcd.print("tag do leitor ");    pinMode(verde,OUTPUT);  pinMode(vermelho,OUTPUT);    Serial.begin(9600);  SPI.begin();  Serial.println("Aproxime a tag do leitor ");    mfrc522.PCD_Init();     digitalWrite(verde,0);  digitalWrite(vermelho,0);    myservo.attach(6);  }void loop() {    if(!mfrc522.PICC_IsNewCardPresent())  {    return;  }    if(!mfrc522.PICC_ReadCardSerial())  {    return;  }Serial.print(" UID da tag : ");    String conteudo = "";    byte letra;    for (byte i = 0; i< mfrc522.uid.size; i++)  {   Serial.print(mfrc522.uid.uidByte[i] <0x10 ? "0":" ");   Serial.print(mfrc522.uid.uidByte[i], HEX);      conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));   conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));  }    Serial.println();  Serial.print("Mensagem : ");    conteudo.toUpperCase();    if(conteudo.substring(1) == "14 45 29 57")  {    lcd.clear();    Serial.println("Acesso liberado ");      lcd.setBacklight(HIGH);    lcd.setCursor(0,0);    lcd.print("Ola !");    lcd.setCursor(0,1);    lcd.print("Acesso liberado");        digitalWrite(verde,1);    digitalWrite(vermelho,0);        myservo.write(95);    delay(800);    myservo.write(10);    digitalWrite(verde,0);    digitalWrite(vermelho,1);  }   if(conteudo.substring(1) == "F1 B1 03 1F")  {        lcd.clear();    Serial.println("Acesso negado ");    digitalWrite(verde,0);    digitalWrite(vermelho,1);        lcd.setBacklight(HIGH);    lcd.setCursor(0,0);    lcd.print("Erro ! Tag nao ");    lcd.setCursor(0,1);    lcd.print("autorizada ");      }      delay(1000);   lcd.clear();       lcd.setBacklight(HIGH);   lcd.setCursor(0,0);   lcd.print("Aproxime a sua  ");   lcd.setCursor(0,1);   lcd.print("tag do leitor ");
}

下面,我们将解释这个项目的完整逻辑。您需要做的第一件事是声明项目中使用的组件的所有库。

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

之后,我们声明伺服电机和LCD的对象。对象的创建如下所示。

Servo myservo;
LiquidCrystal_I2C lcd (0x27,2,1,0,4,5,6,7,3,POSITIVE);
MFRC522 mfrc522 (SS_PIN, RST_PIN);

现在,我们有了 Arduino 上连接引脚的映射。

#define vermelho 4
#define verde 5
#define SS_PIN 10
#define RST_PIN 9

下面是 void 设置函数。它初始化I2C串行通信,串行通信,将引脚配置为输出,以及连接伺服电机的引脚。

void setup() {Wire.begin();lcd.begin(16,2);  lcd.setBacklight(HIGH);  lcd.setCursor(0,0);  lcd.print("Aproxime a sua   ");  lcd.setCursor(0,1);  lcd.print("tag do leitor ");    pinMode(verde,OUTPUT);  pinMode(vermelho,OUTPUT);    Serial.begin(9600);  SPI.begin();  Serial.println("Aproxime a tag do leitor ");    mfrc522.PCD_Init();     digitalWrite(verde,0);  digitalWrite(vermelho,0);    myservo.attach(6);  }

现在让我们了解完整的编程逻辑是如何工作的,它是在 void 循环函数中实现的。请参阅下面的无效循环代码。

void loop() {    if(!mfrc522.PICC_IsNewCardPresent())  {    return;  }    if(!mfrc522.PICC_ReadCardSerial())  {    return;  }Serial.print(" UID da tag : ");    String conteudo = "";    byte letra;    for (byte i = 0; i< mfrc522.uid.size; i++)  {   Serial.print(mfrc522.uid.uidByte[i] <0x10 ? "0":" ");   Serial.print(mfrc522.uid.uidByte[i], HEX);      conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));   conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));  }    Serial.println();  Serial.print("Mensagem : ");    conteudo.toUpperCase();    if(conteudo.substring(1) == "14 45 29 57")  {    lcd.clear();    Serial.println("Acesso liberado ");      lcd.setBacklight(HIGH);    lcd.setCursor(0,0);    lcd.print("Ola !");    lcd.setCursor(0,1);    lcd.print("Acesso liberado");        digitalWrite(verde,1);    digitalWrite(vermelho,0);        myservo.write(95);    delay(800);    myservo.write(10);    digitalWrite(verde,0);    digitalWrite(vermelho,1);  }   if(conteudo.substring(1) == "F1 B1 03 1F")  {        lcd.clear();    Serial.println("Acesso negado ");    digitalWrite(verde,0);    digitalWrite(vermelho,1);        lcd.setBacklight(HIGH);    lcd.setCursor(0,0);    lcd.print("Erro ! Tag nao ");    lcd.setCursor(0,1);    lcd.print("autorizada ");      }      delay(1000);   lcd.clear();       lcd.setBacklight(HIGH);   lcd.setCursor(0,0);   lcd.print("Aproxime a sua  ");   lcd.setCursor(0,1);   lcd.print("tag do leitor ");
}

您应该做的第一件事是检查没有检测到标签,也没有读取标签。代码如下所示。

if(!mfrc522.PICC_IsNewCardPresent())  {    return;  }    if(!mfrc522.PICC_ReadCardSerial())  {    return;  }

之后,系统读取标签并将其值显示在 IDE Arduino 串行监视器上。请参阅下面的代码部分。

Serial.print(" UID da tag : ");    String conteudo = "";    byte letra;    for (byte i = 0; i< mfrc522.uid.size; i++)  {   Serial.print(mfrc522.uid.uidByte[i] <0x10 ? "0":" ");   Serial.print(mfrc522.uid.uidByte[i], HEX);      conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));   conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));  }    Serial.println();  Serial.print("Mensagem : ");    conteudo.toUpperCase();

出示标签代码后,系统将标签值与系统中注册的十六进制值进行比较。

if(conteudo.substring(1) == "14 45 29 57")  {lcd.clear();    Serial.println("Acesso liberado ");      lcd.setBacklight(HIGH);    lcd.setCursor(0,0);    lcd.print("Ola !");    lcd.setCursor(0,1);    lcd.print("Acesso liberado");        digitalWrite(verde,1);    digitalWrite(vermelho,0);        myservo.write(95);    delay(800);    myservo.write(10);    digitalWrite(verde,0);    digitalWrite(vermelho,1);}

如果标签值等于 14 45 29 57,将执行上述条件的命令。在这些命令中,LCD 将打印访问信息并启动伺服电机打开入口门。

如果标签值等于 F1 B1 03 1F 值,代码流进入条件并显示消息“Tag not authorized!” 并且不触发伺服电机释放访问。

代码部分如下所示。

if(conteudo.substring(1) == "F1 B1 03 1F")  {        lcd.clear();    Serial.println("Acesso negado ");    digitalWrite(verde,0);    digitalWrite(vermelho,1);        lcd.setBacklight(HIGH);    lcd.setCursor(0,0);    lcd.print("Erro ! Tag nao ");    lcd.setCursor(0,1);    lcd.print("autorizada ");      }

最后,系统清洁 LCD 屏幕并显示信息,让用户将标签靠近 RFID 阅读器。代码区域如下所示。

delay(1000);   lcd.clear();       lcd.setBacklight(HIGH);   lcd.setCursor(0,0);   lcd.print("Aproxime a sua  ");   lcd.setCursor(0,1);   lcd.print("tag do leitor ");

现在,我们将在工作台上看到代码与电路一起工作的结果。在对 Arduino Uno 进行编程后,我们将使系统正常工作。在图 2 中,我们有系统的初始消息,要求用户接近标签以释放访问权限。

在图 3 中,我们让用户使用正确的标签来允许访问,然后绿色 LED 亮起并激活伺服电机,访问权限显示在显示屏上。

800 毫秒后,伺服电机返回初始位置,绿色 LED 熄灭,红色 LED 亮起。
在图 4 中,用户使用了一个未注册的标签,因此系统给出了一个错误并且不释放访问权限。
之后,系统重新开始编程逻辑运行周期。

结论和未来的项目改进
使用 RFID 技术的系统应用于多种类型的项目。它们不仅限于控制和访问系统。例如,一个非常常见的应用是用它来识别服装和其他商品的批次。发挥您的创造力,您会发现带有 Arduino 的 RFID 模块适用于您的项目的不同类型的应用程序。将来,我们将使用 Arduino 创建门系统的原型,供您使用激光切割机或 3D 打印机在实践中设置您的停车场。

【基于Arduino RFID门禁系统】相关推荐

  1. RFID门禁系统快速识别车辆管理

    01.社会背景 随着生活水平的不断提高,汽车开始大量进入家庭.在中国城市汽车的保有量迅速增加情况下,车辆的管理已成为一个难题.对车辆进行有效的管理,其核心问题是如何对车辆进行识别.本文介绍了一个基于射 ...

  2. 江湖云RFID门禁系统

    RFID门禁系统,RFID是一项易于操控,简单实用且特别适合用于自动化控制的灵活性应用技术,识别工作无须人工干预,它既可支持只读工作模式也可支持读写工作模式,且无需接触或瞄准:可自由工作在各种恶劣环境 ...

  3. 【毕业设计】基于单片机的门禁系统 - 嵌入式 物联网

    文章目录 1 简介 2 课题背景 3 详细设计 3.1 整体设计方案 3.2 功能模块 3.3 软件设计 4 实现效果 5 部分实现代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介 ...

  4. 基于android的门禁系统代码,基于ESP8266 base on esp8266门禁系统 安卓源码

    基于ESP8266门禁系统安卓源码 视频中的小伙伴是我的搭档,负责硬件电路搭建,为了搭电路没少熬夜,挺感谢他的. 这是本人的毕业设计(专科)历时一个月完成.在做毕业设计之前一直在准备转本考试,考完试, ...

  5. 基于MFRC522的门禁系统的设计与实现

    目录 1.MFRC522简介 2.概述 3.硬件设计 4.软件设计 5.实物测试 1.MFRC522简介 MFRC522是高度集成的非接触式(13.56MHz)读写卡芯片.此发送模块利用调制和解调的原 ...

  6. 基于STM32的门禁系统源码分享

    哈哈哈,今晚把电脑里面以前做的库存都分享出来了.给大家一个参考吧.这个的功能好像还有点多,有一年了,我也记不清了.我记得是有 一个门禁的指纹录入,门禁的RFID卡录入,显示当前刷卡或者按指纹的是谁,以 ...

  7. 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于ESP8266的RFID门禁系统

    忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-12-29 ❤️ ❤️ 本篇更新记录 2022-12-29 ❤️

  8. 51单片机的RFID门禁系统

    一.硬件方案 本RFID系统设计可分为硬件部分和软件部分.硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通.软件部分 ...

  9. 【语音识别】基于智能语音识别门禁系统matlab源码含GUI

    一.简介 本文基于Matlab设计实现了一个文本相关的声纹识别系统,可以判定说话人身份. 1 系统原理 a.声纹识别     这两年随着人工智能的发展,不少手机App都推出了声纹锁的功能.这里面所采用 ...

最新文章

  1. 腾讯汤道生:人工智能最大的价值是“服务于人”
  2. python txt文本操作
  3. tensorflow 风格迁移
  4. linux samba安装失败,用aptitude安装samba失败
  5. Unity3d远程连接Hololens提示Cannot connect without a remote machine address specified
  6. 系统服务启动交互式程序(C++)
  7. 【渝粤教育】国家开放大学2018年秋季 0727-22T思想道德修养与法律基础 参考试题
  8. hexo theme next7.8 主题美化
  9. studio 3T破解
  10. [每日一氵] python创建简单 command-line interface (CLI) API
  11. MTK平台--Android P SD卡检测
  12. 2022中国开发者影响力盛典暨CSDN企业生态汇在京举行
  13. eMMC Partition
  14. Linux进程间通信第四讲 标准IPC之信号量集
  15. 阿里生活物联平台笔记一 app配网
  16. 无线AP与AC以及STA的区别
  17. 掌财社寒山:快乐水不行了 快乐酒就能救可口可乐吗?
  18. html5结合flash实现视频文件在所有主流浏览器兼容播放
  19. 网络爬虫逆向(全国建筑市场监管公共服务平台)
  20. android优化管理软件,RAM优化 V8.0.9官方版for android(内存优化)

热门文章

  1. 全国城市根据首字母分类json格式
  2. 使用org.apache.pdfbox 2.x PDF 转Doc 转图片 转字符串
  3. python cookbook 豆瓣_学习python求推荐一波书籍?
  4. 数字经济时代,数据中心供电系统如何助力实现双碳目标
  5. Pytorch+PyG实现EdgeCNN
  6. 【SSLGZ 1344】Knights
  7. 编写一个IDEA插件之:事件监听
  8. 实现10进制转换为2进制
  9. 阿里云服务器搭建私人云盘seafile
  10. Anaconda matplotlib中文乱码解决