|
了解如何使用Arduino和电磁阀制作RFID门锁。
在本篇文章中,我们将详细介绍使用Arduino Mega 2560开发板制作一个RFID(射频识别)智能门锁系统的步骤。本文要实现的目标是通过使用特定卡片来打开门锁。如果扫描了错误的卡片标签,门将保持关闭并关闭蜂鸣器。
为了控制门锁,我们将使用Arduino开发板连接继电器模块,继而控制电磁阀。
必需的组件 ● Arduino Mega 2560开发板 ● I2C LCD显示屏 ● RC522 RFID读卡器模块 ● 单通道继电器模块 ● 电磁锁 ● 3X 18650电池组 ● 蜂鸣器
电路图和说明 第一步是将RC522 RFID读卡器模块连接到Arduino。要正确连接RFID模块和Arduino,请按照以下说明操作。
RFID模块连接到Arduino Mega 2560的说明。
接下来,连接I2C LCD模块。
连接I2C LCD模块和Arduino Mega 2560的说明。
然后,将继电器模块和门蜂鸣器连接到Arduino。有关连接模块、蜂鸣器和Arduino的信息,请参阅下面的图像参考。
注意:本文使用三个18650电池为门锁机构供电。
连接继电器模块、门蜂鸣器和Arduino。
电路图也可供参考。
连接的继电器模块、门蜂鸣器和Arduino Mega 2560的电路图。
代码说明 我们首先包括用于LCD和RFID读卡器的库。
MFRC522模块使用SPI通信与Arduino配合使用,因此我们还需要包含SPI库。 - #include <LiquidCrystal_I2C.h>
- #include <SPI.h>
- #include <MFRC522.h>
复制代码在setup()函数中,启动通信协议。 - lcd.begin(); // LCD screen
- SPI.begin(); // Init SPI bus
- mfrc522.PCD_Init(); // Init MFRC522
复制代码
在loop()函数中,程序将首先检查是否在读卡器附近放置了新标签。如果确实找到了新标签,它将继续loop函数。否则,它将继续寻找一个。
放置新标签后,将读取该标签,然后存储与之关联的4字节UID编号。 - // Look for new cards
- if ( ! mfrc522.PICC_IsNewCardPresent()) {
- return;
- }
-
- // Select one of the cards
- if ( ! mfrc522.PICC_ReadCardSerial()) {
- return;
- }
复制代码
接下来,检查4字节UID号是否与保存的UID号匹配。 如果匹配,门将打开,如果不匹配,门将保持关闭。
- //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(
复制代码
代码 代码中,输入卡片TAG的UID编号。如果您不知道,请从库中上传“dumpinfo”示例,并使用该示例得到该编号。以下是本篇文章使用的完整代码: - #include <LiquidCrystal_I2C.h>
- #include <SPI.h>
- #include <MFRC522.h>
- 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();
- }
- }
复制代码
|