风筝
发表于: 2020-1-25 10:15:01 | 显示全部楼层

RFID(射频识别)是一种廉价且可容易实现的技术。它可以用于许多应用场合中,例如访问控制、安全、资产跟踪、人员跟踪等。在酒店、办公室以及许多其他地方,RFID门锁系统非常常见,将RFID卡靠近RFID读卡器,一秒钟后,门就会打开。


之前的文章中,我们制作了一个简单的RFID门锁,这次我们使用了一个真正的电磁门锁,并通过RFID和Arduino对其进行控制。本文中,霍尔效应传感器和磁铁用于检测门的移动。霍尔效应传感器放置在门框上,磁铁将放置在门本身上。当霍尔效应传感器和磁体彼此靠近时,霍尔效应传感器将处于低电平状态,门保持关闭状态;当传感器和此帖离得远时,则意味着门已打开并且霍尔传感器处于高电平状态。我们将使用此霍尔效应机制自动锁定和解锁门。


所需的组件

●    Arduino Uno开发板

●    RFID-RC522模块

●    12v电磁锁

●    继电器模块

●    霍尔效应传感器

●    10kΩ电阻

●    蜂鸣器


电磁锁

电磁锁在电子机械锁机构上起作用。这种类型的锁具有一个带有倾斜切口的嵌条和一个良好的安装支架。接通电源后,DC会产生磁场,该磁场会使锁芯在内部移动并使门保持在解锁位置。锁芯将保持其位置,直到断电为止。断开电源后,锁芯会向外移动并锁定门。在锁定状态下,它不使用任何电源。要驱动电磁锁,您需要一个可提供12V @ 500mA的电源。

Solenoid-Door-Lock_0.jpg


电路连接图

下面给出了使用Arduino的电磁门锁的电路图。

Solenoid-Door-Lock-using-Arduino-Circuit-Diagram.png


蜂鸣器的正极引脚连接到Arduino的数字引脚4,而GND引脚连接到Arduino的接地引脚。霍尔效应传感器的VCC和OUT引脚之间使用10K电阻。电磁锁通过继电器模块连接到Arduino。

根据电路图将所有组件焊接完毕后,如下图所示:

Solenoid-Door-Lock-using-Arduino.jpg


代码说明

该Arduino电磁锁的完整代码在文档末尾给出。在这里,我们将逐行解释该代码以便更好地理解。


首先包含所有必需的库。本文中,需要两个库,一个用于Arduino和RFID之间的SPI通信,另一个用于RFID模块。这两个库都可以从下面给出的链接下载:

1.  SPI.h

2.  MFRC522.h


定义蜂鸣器、电磁锁和RFID模块使用的引脚:

  1. int Buzzer = 4;
  2. const int LockPin = 2;
  3. #define SS_PIN 10
  4. #define RST_PIN 9
复制代码

然后将电磁锁引脚和蜂鸣器引脚定义为输出,并将霍尔效应传感器引脚定义为输入,然后并启动SPI通信。

  1. pinMode(LockPin, OUTPUT);
  2. pinMode(Buzzer, OUTPUT);
  3. pinMode(hall_sensor, INPUT);
  4. SPI.begin();      // Initiate  SPI bus     
  5. mfrc522.PCD_Init();   // Initiate MFRC522​
复制代码

在void loop()函数中,读取霍尔传感器的值,当该值变低电平时,关闭门。

  1. state = digitalRead(hall_sensor);
  2.   Serial.print(state);
  3.   delay(3000);
  4.   if(state==LOW){
  5.    digitalWrite(LockPin, LOW);
  6.    Serial.print("Door Closed");
  7.    digitalWrite(Buzzer, HIGH);
  8.    delay(2000);
  9.    digitalWrite(Buzzer, LOW);}
复制代码

在void loop()函数中,检查是否存在新的RFID卡,如果存在新的卡,则它将检查卡的UID。对于有效的卡,它将打开锁;否则,将打印显示“You are not authorized。

  1. if ( ! mfrc522.PICC_IsNewCardPresent())
  2.   {
  3.     return;
  4.   }
  5.   // Select one of the cards
  6.   if ( ! mfrc522.PICC_ReadCardSerial())
  7.   {
  8.     return;
  9.   }
  10.   //Show UID on serial monitor
  11.   String content= "";
  12.   byte letter;
  13.   for (byte i = 0; i < mfrc522.uid.size; i++)
  14.   {
  15.      content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  16.      content.concat(String(mfrc522.uid.uidByte[i], HEX));
  17.   }
  18.   Serial.println();
  19.   Serial.print("Message : ");
  20.   content.toUpperCase();
  21.   if (content.substring(1) == "60 4E 07 1E" ) //change here the UID of the card/cards that you want to give access
  22.   {
  23.     digitalWrite(LockPin, HIGH);
  24.     Serial.print("Door Unlocked");
  25.     digitalWrite(Buzzer, HIGH);
  26.     delay(2000);
  27.     digitalWrite(Buzzer, LOW);
  28.   }
  29.   else
  30.   {
  31.    Serial.println("You are not Authorised");
  32.    digitalWrite(Buzzer, HIGH);
  33.    delay(2000);
  34.    digitalWrite(Buzzer, LOW);
  35.   }
  36. }
复制代码

测试RFID电磁锁

准备好代码和硬件后,就可以开始测试电磁门锁。我们已将所有组件焊接在面包板上,以便可以轻松地将其安装在门上。因此要进行测试,请将面包板安装在门框上,并在门上安装磁铁,以便可以检测到门的运动。下图显示了如何将磁铁和霍尔传感器固定在门上。

RFID-Solenoid-Loc-Testing.jpg


现在,扫描您的授权RFID卡以打开门锁。电磁门锁将保持打开状态,直到霍尔效应传感器的输出为高电平。现在,当门在关闭时再次到达霍尔传感器附近时,由于磁场(由门上安装的磁铁产生),霍尔效应传感器的状态将变为低电平,并且锁将再次关闭。


您可以使用延迟函数来代替霍尔效应传感器,使得门在规定的时间内保持打开状态。


代码

以下是本篇文章使用的完整代码: main.rar (919 Bytes, 下载次数: 79)

跳转到指定楼层
lxj2405
发表于: 2021-12-30 18:45:47 | 显示全部楼层

为什么提示卡无法授权
回复

使用道具 举报

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

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-23 17:59 , Processed in 0.051602 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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