本项目指南将详细介绍使用Arduino Mega 2560创建RFID(射频识别)门锁系统的步骤。
目标是通过使用充当访问徽章的特定标签来打开门。如果扫描了错误的标签,门将保持关闭并关闭蜂鸣器。
为了控制门锁,我们将使用与Arduino接口的继电器模块,Arduino控制电磁阀。
必需的组件Arduino Mega 2560
I2C LCD显示屏
RC522 RFID阅读器模块
单通道继电器模块
电磁锁
3X 18650电池
门蜂鸣器
跨接电缆
第一步是将RC522 RFID阅读器模块连接到Arduino。
要正确链接模块和Arduino,请按照以下说明操作。
![rfid_arduino_doorlock5.png](https://maker.pro/storage/kC193na/kC193naY6cLuka9mM5J8G04BvTjjKCiTUU46Eg3R.png)
有关将RFID模块连接到Arduino Mega 2560的说明。
接下来,连接I2C LCD模块。
![rfid_doorlock_arduino6.png](https://maker.pro/storage/fvfIeJf/fvfIeJf4t0klUZgeOA7dHVD6wEIdJLL2FJXckKmi.png)
连接I2C LCD模块和Arduino Mega 2560的说明。
然后,将继电器模块和门蜂鸣器连接到Arduino。
请看下面关于连接模块,蜂鸣器和Arduino的图像参考。
注意:该项目使用三个18650单元为门锁机构供电。
![howto_rfid_arduino_doorlock3.png](https://maker.pro/storage/c6AM8PY/c6AM8PYF2eW9Jy9W2q2OZXT9B6YfWV3iHK7DGGLp.png)
图像显示如何连接继电器模块,门蜂鸣器和Arduino。
电路图也可供参考。
![howto_rfid_arduino_doorlock2.png](https://maker.pro/storage/kVALHeW/kVALHeWpErb8fvxN7zmRBetbM7GEakbMHI7jw1xW.png)
连接的继电器模块,门蜂鸣器和Arduino Mega 2560的电路图。
代码说明我们首先包括用于LCD和RFID阅读器的库。
MFRC522模块使用SPI通信与Arduino配合使用,因此我们还需要包含SPI库。
#include
#include
#include
在设置功能中,启动通信协议。
lcd.begin(); // LCD screen
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
通过循环,程序将首先检查是否在阅读器附近放置了新标签。
如果确实找到了新标签,它将继续循环。否则,它将继续寻找一个。
放置新标签后,将读取该标签,然后存储与其关联的4字节UID编号。
注意:该字符串也将设置为大写。
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
//Reading from the card
String tag = "";
for (byte i = 0; i < mfrc522.uid.size; i++)
{
tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
tag.concat(String(mfrc522.uid.uidByte[i], HEX));
}
tag.toUpperCase();
接下来,检查4字节UID号是否与保存的UID号匹配。
如果匹配,门将打开,如果没有,门将保持关闭。
![howto_rfid_arduino_doorlock1.png](https://maker.pro/storage/CgTtZPo/CgTtZPo9zy1FDWh46Tzq2whYHsIWQOh3YVYXejvk.png)
锁接受标签和拒绝标签的示例图像。
//Checking the card
if (tag.substring(1) == "29 B9 ED 23") //change here the UID of the card/cards that you want to give access
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Access Granted");
lcd.setCursor(0, 1);
lcd.print("Door Opened");
digitalWrite(relayPin, HIGH);
delay(3000);
digitalWrite(relayPin, LOW);
lcd.clear();
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Wrong Tag Shown");
lcd.setCursor(0, 1);
lcd.print("Access Denied");
digitalWrite(buzzerPin, HIGH);
delay(3000);
digitalWrite(buzzerPin, LOW);
lcd.clear();
在最终代码中,输入标签的UID号。如果您不知道,请从库中上传“dumpinfo”示例并在那里找到它。 来自半导体社区
#include
#include
#include
constexpr uint8_t RST_PIN = 5;
constexpr uint8_t SS_PIN = 53;
LiquidCrystal_I2C lcd(0x27, 16, 2); //Parameters: (rs, enable, d4, d5, d6, d7)
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
int buzzerPin = 8;
int relayPin = 9;
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
lcd.begin(); // LCD screen
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
lcd.setCursor(0, 0);
lcd.print(" RFID Door Lock");
lcd.setCursor(0, 1);
lcd.print(" by MakerPro");
delay(3000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
lcd.print(" RFID Door Lock");
lcd.setCursor(0, 1);
lcd.print(" Show Your Tag ");
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
//Reading from the card
String tag = "";
for (byte i = 0; i < mfrc522.uid.size; i++)
{
tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
tag.concat(String(mfrc522.uid.uidByte[i], HEX));
}
tag.toUpperCase();
//Checking the card
if (tag.substring(1) == "29 B9 ED 23") //change here the UID of the card/cards that you want to give access
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Access Granted");
lcd.setCursor(0, 1);
lcd.print("Door Opened");
digitalWrite(relayPin, HIGH);
delay(3000);
digitalWrite(relayPin, LOW);
lcd.clear();
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Wrong Tag Shown");
lcd.setCursor(0, 1);
lcd.print("Access Denied");
digitalWrite(buzzerPin, HIGH);
delay(3000);
digitalWrite(buzzerPin, LOW);
lcd.clear();
}
}