【基于Arduino RFID门禁系统】
基于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门禁系统】相关推荐
- RFID门禁系统快速识别车辆管理
01.社会背景 随着生活水平的不断提高,汽车开始大量进入家庭.在中国城市汽车的保有量迅速增加情况下,车辆的管理已成为一个难题.对车辆进行有效的管理,其核心问题是如何对车辆进行识别.本文介绍了一个基于射 ...
- 江湖云RFID门禁系统
RFID门禁系统,RFID是一项易于操控,简单实用且特别适合用于自动化控制的灵活性应用技术,识别工作无须人工干预,它既可支持只读工作模式也可支持读写工作模式,且无需接触或瞄准:可自由工作在各种恶劣环境 ...
- 【毕业设计】基于单片机的门禁系统 - 嵌入式 物联网
文章目录 1 简介 2 课题背景 3 详细设计 3.1 整体设计方案 3.2 功能模块 3.3 软件设计 4 实现效果 5 部分实现代码 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介 ...
- 基于android的门禁系统代码,基于ESP8266 base on esp8266门禁系统 安卓源码
基于ESP8266门禁系统安卓源码 视频中的小伙伴是我的搭档,负责硬件电路搭建,为了搭电路没少熬夜,挺感谢他的. 这是本人的毕业设计(专科)历时一个月完成.在做毕业设计之前一直在准备转本考试,考完试, ...
- 基于MFRC522的门禁系统的设计与实现
目录 1.MFRC522简介 2.概述 3.硬件设计 4.软件设计 5.实物测试 1.MFRC522简介 MFRC522是高度集成的非接触式(13.56MHz)读写卡芯片.此发送模块利用调制和解调的原 ...
- 基于STM32的门禁系统源码分享
哈哈哈,今晚把电脑里面以前做的库存都分享出来了.给大家一个参考吧.这个的功能好像还有点多,有一年了,我也记不清了.我记得是有 一个门禁的指纹录入,门禁的RFID卡录入,显示当前刷卡或者按指纹的是谁,以 ...
- 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于ESP8266的RFID门禁系统
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-12-29 ❤️ ❤️ 本篇更新记录 2022-12-29 ❤️
- 51单片机的RFID门禁系统
一.硬件方案 本RFID系统设计可分为硬件部分和软件部分.硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通.软件部分 ...
- 【语音识别】基于智能语音识别门禁系统matlab源码含GUI
一.简介 本文基于Matlab设计实现了一个文本相关的声纹识别系统,可以判定说话人身份. 1 系统原理 a.声纹识别 这两年随着人工智能的发展,不少手机App都推出了声纹锁的功能.这里面所采用 ...
最新文章
- 腾讯汤道生:人工智能最大的价值是“服务于人”
- python txt文本操作
- tensorflow 风格迁移
- linux samba安装失败,用aptitude安装samba失败
- Unity3d远程连接Hololens提示Cannot connect without a remote machine address specified
- 系统服务启动交互式程序(C++)
- 【渝粤教育】国家开放大学2018年秋季 0727-22T思想道德修养与法律基础 参考试题
- hexo theme next7.8 主题美化
- studio 3T破解
- [每日一氵] python创建简单 command-line interface (CLI) API
- MTK平台--Android P SD卡检测
- 2022中国开发者影响力盛典暨CSDN企业生态汇在京举行
- eMMC Partition
- Linux进程间通信第四讲 标准IPC之信号量集
- 阿里生活物联平台笔记一 app配网
- 无线AP与AC以及STA的区别
- 掌财社寒山:快乐水不行了 快乐酒就能救可口可乐吗?
- html5结合flash实现视频文件在所有主流浏览器兼容播放
- 网络爬虫逆向(全国建筑市场监管公共服务平台)
- android优化管理软件,RAM优化 V8.0.9官方版for android(内存优化)