一板网电子技术论坛

风筝
发表于: 2019-3-4 14:17:15 | 显示全部楼层

了解如何使用Arduino和电磁阀制作RFID门锁。


在本篇文章中,我们将详细介绍使用Arduino Mega 2560开发板制作一个RFID(射频识别)智能门锁系统的步骤。本文要实现的目标是通过使用特定卡片来打开门锁。如果扫描了错误的卡片标签,门将保持关闭并关闭蜂鸣器。


为了控制门锁,我们将使用Arduino开发板连接继电器模块,继而控制电磁阀。


必需的组件

●    Arduino Mega 2560开发板

●    I2C LCD显示屏

●    RC522 RFID读卡器模块

●    单通道继电器模块

●    电磁锁

●    3X 18650电池组

●    蜂鸣器


电路图和说明

第一步是将RC522 RFID读卡器模块连接到Arduino。要正确连接RFID模块和Arduino,请按照以下说明操作。

RFID con.png

RFID模块连接到Arduino Mega 2560的说明。


接下来,连接I2C LCD模块。

lcd con.png

连接I2C LCD模块和Arduino Mega 2560的说明。


然后,将继电器模块和门蜂鸣器连接到Arduino。有关连接模块、蜂鸣器和Arduino的信息,请参阅下面的图像参考。


注意:本文使用三个18650电池为门锁机构供电。

relay.png

连接继电器模块、门蜂鸣器和Arduino。


电路图也可供参考。

circuit diramg.png

连接的继电器模块、门蜂鸣器和Arduino Mega 2560的电路图。


代码说明

我们首先包括用于LCD和RFID读卡器的库。


MFRC522模块使用SPI通信与Arduino配合使用,因此我们还需要包含SPI库。

  1. #include <LiquidCrystal_I2C.h>
  2. #include <SPI.h>
  3. #include <MFRC522.h>
复制代码

setup()函数中,启动通信协议。

  1. lcd.begin();   // LCD screen
  2. SPI.begin();      // Init SPI bus
  3. mfrc522.PCD_Init();   // Init MFRC522
复制代码

loop()函数中,程序将首先检查是否在读卡器附近放置了新标签。如果确实找到了新标签,它将继续loop函数。否则,它将继续寻找一个。


放置新标签后,将读取该标签,然后存储与之关联的4字节UID编号。

  1. // Look for new cards
  2.   if ( ! mfrc522.PICC_IsNewCardPresent()) {
  3.     return;
  4.   }
  5.   
  6.   // Select one of the cards
  7.   if ( ! mfrc522.PICC_ReadCardSerial()) {
  8.     return;
  9.   }
复制代码

接下来,检查4字节UID号是否与保存的UID号匹配。

如果匹配,门将打开,如果不匹配,门将保持关闭。

example.png

  1. //Checking the card
  2.   if (tag.substring(1) == "29 B9 ED 23") //change here the UID of the card/cards that you want to give access
  3.   {
  4.     lcd.clear();
  5.     lcd.setCursor(0, 0);
  6.     lcd.print("Access Granted");
  7.     lcd.setCursor(0, 1);
  8.     lcd.print("Door Opened");
  9.     digitalWrite(relayPin, HIGH);
  10.     delay(3000);
  11.     digitalWrite(
复制代码

代码

代码中,输入卡片TAG的UID编号。如果您不知道,请从库中上传“dumpinfo”示例,并使用该示例得到该编号。以下是本篇文章使用的完整代码:

  1. #include <LiquidCrystal_I2C.h>
  2. #include <SPI.h>
  3. #include <MFRC522.h>

  4. constexpr uint8_t RST_PIN = 5;
  5. constexpr uint8_t SS_PIN = 53;

  6. LiquidCrystal_I2C lcd(0x27, 16, 2); //Parameters: (rs, enable, d4, d5, d6, d7)
  7. MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

  8. int buzzerPin = 8;
  9. int relayPin = 9;

  10. void setup() {
  11.   pinMode(buzzerPin, OUTPUT);
  12.   pinMode(relayPin, OUTPUT);
  13.   digitalWrite(relayPin, LOW);

  14.   lcd.begin();   // LCD screen
  15.   SPI.begin();      // Init SPI bus
  16.   mfrc522.PCD_Init();   // Init MFRC522

  17.   lcd.setCursor(0, 0);
  18.   lcd.print(" RFID Door Lock");
  19.   lcd.setCursor(0, 1);
  20.   lcd.print("  by MakerPro");
  21.   delay(3000);

  22.   lcd.clear();
  23. }

  24. void loop() {
  25.   lcd.setCursor(0, 0);
  26.   lcd.print(" RFID Door Lock");
  27.   lcd.setCursor(0, 1);
  28.   lcd.print(" Show Your Tag ");
  29.   
  30.   // Look for new cards
  31.   if ( ! mfrc522.PICC_IsNewCardPresent()) {
  32.     return;
  33.   }
  34.   
  35.   // Select one of the cards
  36.   if ( ! mfrc522.PICC_ReadCardSerial()) {
  37.     return;
  38.   }
  39.   
  40.   //Reading from the card
  41.   String tag = "";
  42.   for (byte i = 0; i < mfrc522.uid.size; i++)
  43.   {
  44.     tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  45.     tag.concat(String(mfrc522.uid.uidByte[i], HEX));
  46.   }
  47.   tag.toUpperCase();
  48.   
  49.   //Checking the card
  50.   if (tag.substring(1) == "29 B9 ED 23") //change here the UID of the card/cards that you want to give access
  51.   {
  52.     lcd.clear();
  53.     lcd.setCursor(0, 0);
  54.     lcd.print("Access Granted");
  55.     lcd.setCursor(0, 1);
  56.     lcd.print("Door Opened");
  57.     digitalWrite(relayPin, HIGH);
  58.     delay(3000);
  59.     digitalWrite(relayPin, LOW);
  60.     lcd.clear();
  61.   }

  62.   else
  63.   {
  64.     lcd.clear();
  65.     lcd.setCursor(0, 0);
  66.     lcd.print("Wrong Tag Shown");
  67.     lcd.setCursor(0, 1);
  68.     lcd.print("Access Denied");
  69.     digitalWrite(buzzerPin, HIGH);
  70.     delay(3000);
  71.     digitalWrite(buzzerPin, LOW);
  72.     lcd.clear();
  73.   }
  74. }
复制代码

跳转到指定楼层
萌新小白
发表于: 2019-5-6 14:11:36 | 显示全部楼层

楼主大大,我按照您的来做刷卡后没反应,串口监视器什么也没有,继电器更是直接动作,不刷卡就动作了
回复

使用道具 举报

风筝
发表于: 2019-5-7 08:52:25 | 显示全部楼层

萌新小白 发表于 2019-5-6 14:11
楼主大大,我按照您的来做刷卡后没反应,串口监视器什么也没有,继电器更是直接动作,不刷卡就动作了 ...

程序没有用到串口监视器的代码 您可以添加到代码中

继电器注意常开/常闭
回复

使用道具 举报

cyrs
发表于: 2019-5-14 12:07:31 | 显示全部楼层

学习学习,主要就是刚刚学习arduino
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 288 | 回复: 503



Archiver|手机版|小黑屋|

GMT+8, 2019-5-24 17:58 , Processed in 0.031250 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表