嵌入式
返回首页

构建一个简单的RFID门锁

2022-08-22 来源:elecfans

  RFID(射频识别)是一种廉价且易于使用的技术。它可用于许多应用,如访问控制、安全、资产跟踪、人员跟踪等。您已经在酒店、办公室和许多其他只需将卡放在 RFID 读卡器附近的地方看到了RFID 门锁系统一秒钟,门就会打开。


  这里使用霍尔效应传感器和磁铁来检测门的运动。霍尔效应传感器将放置在门框上,而磁铁则放置在门本身上。霍尔传感器和磁铁靠近时,霍尔传感器处于低电平状态,门保持关闭状态;传感器和磁铁不关闭时,门打开,霍尔传感器处于高电平状态。我们将使用这种霍尔效应机制来自动锁定和解锁门。


  所需组件

  阿杜诺

  RFID-RC522模块

  12v电磁锁

  继电器模块

  霍尔效应传感器

  10kΩ电阻

  蜂鸣器

  电磁锁


  电磁锁在电子机械锁定机构上工作。这种类型的锁有一个带有倾斜切口的嵌条和一个良好的安装支架。通电时,直流电会产生磁场,将塞子移入内部并使门保持在解锁位置。弹头将保持其位置,直到断电。当电源断开时,蛞蝓移动到外面并锁上门。它在锁定状态下不使用任何电源。要驱动电磁锁,您需要一个可以提供 12V @ 500mA 的电源。

poYBAGL-AXeAXLSyAAOTiX0_jfA830.png

  电路原理图

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

pYYBAGL-AXSAaYEsAAEpR61rlXA717.png

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

pYYBAGL-AW-AX5WXAAAb9e2f0gg913.png

  根据电路图焊接完穿孔板上的所有元件后,如下图所示:

poYBAGL-AWuAQqh3AATmwmmZS4k725.png

  代码说明

  文档末尾提供了此Arduino 电磁锁的完整代码。在这里,我们将逐步解释此代码,以便更好地理解。


  通过包含所有必需的库来启动代码。这里只需要两个库,一个用于 Arduino 和 RFID 之间的 SPI 通信,第二个用于 RFID 模块。这两个库都可以从下面给出的链接下载:

  现在定义蜂鸣器、电磁锁和 RFID 模块的引脚

 

int 蜂鸣器 = 4;
常量 int LockPin = 2;
#define SS_PIN 10
#define RST_PIN 9

 

然后将 Lock 引脚和 Buzzer 引脚定义为输出,将霍尔效应传感器引脚定义为输入并启动 SPI 通信。

 

pinMode(LockPin,输出);
pinMode(蜂鸣器,输出);
pinMode(hall_sensor,输入);
SPI.开始();// 启动 SPI 总线     
mfrc522.PCD_Init(); // 启动 MFRC522

 

在void loop内,读取霍尔传感器值,当它变低时,关上门。

 

state = digitalRead(hall_sensor);
  串行打印(状态);
  延迟(3000);
  如果(状态==低){
   数字写入(锁销,低);
   Serial.print('门已关闭');
   数字写入(蜂鸣器,高);
   延迟(2000);
   数字写入(蜂鸣器,低);}

 

在void loop函数内部,它将检查是否存在新的 RFID 卡,如果存在新卡,则会检查卡的 UID。对于有效的卡,它将打开锁;否则,它将打印'您未获得授权。' 完整的工作显示在最后给出的视频中。

 

如果(!mfrc522.PICC_IsNewCardPresent())
  {
    返回;
  }
  // 选择一张卡片
  如果(!mfrc522.PICC_ReadCardSerial())
  {
    返回;
  }
  //在串口监视器上显示 UID  字符串内容=“”;
  字节字母;
  对于(字节 i = 0;i < mfrc522.uid.size;i++)
  {
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? ' 0' : ' '));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  序列号.println();
  Serial.print('消息:');
  content.toUpperCase();
  if (content.substring(1) == '60 4E 07 1E' ) //在此处更改您要授予访问权限的卡的 UID
  {
    数字写入(锁销,高);
    Serial.print('门开锁');
    数字写入(蜂鸣器,高);
    延迟(2000);
    数字写入(蜂鸣器,低);
  }
  别的
  {
   Serial.println('你没有被授权');
   数字写入(蜂鸣器,高);
   延迟(2000);
   数字写入(蜂鸣器,低);
  }
}

 

  测试 RFID 电磁锁

  准备好代码和硬件后,您可以开始测试电磁门锁项目。在这里,我们焊接了穿孔板上的所有组件,以便可以轻松地将其安装在门上。

  因此,要对其进行测试,请将穿孔板安装在门框上,并将磁铁安装在门上,以便检测门的运动。下图显示了磁铁和霍尔传感器是如何固定在门上的。

poYBAGL-AWWAPdD5AAWb_S4aT5A014.png

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

  不使用霍尔效应传感器,您可以引入延迟以在定义的时间内保持门打开。
#include
#include
int hall_sensor = 3;
int 状态,锁定读取;
int 蜂鸣器 = 4;
常量 int LockPin = 2;
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建 MFRC522 实例。
无效设置() 
{
  序列.开始(9600);// 发起串行通信
  pinMode(LockPin, OUTPUT);
  pinMode(蜂鸣器,输出);
  pinMode(hall_sensor,输入);
  SPI.开始();// 启动 SPI 总线
  mfrc522.PCD_Init(); // 启动 MFRC522
  //Serial.println('将您的卡近似于读卡器...');
  // Serial.println();
  数字写入(锁销,低);
}
无效 readsensor()
{
 lockread = digitalRead(LockPin);
 state = digitalRead(hall_sensor);
 //Serial.print(lockread);
 //Serial.print(state);
 // 延迟(2000); 
}
无效循环() 
{
  读取传感器();
  传感器(); 
  // 寻找新卡片
  if ( !mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // 选择一张卡片
  if ( !mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //在串口监视器上显示 UID 
  String content= '';
  字节字母;
  对于(字节 i = 0;i < mfrc522.uid.size;i++) 
  {    
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? ' 0' : ' '));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  //Serial.println();
  //Serial.print('消息:');
  content.toUpperCase();
  if (content.substring(1) == '60 4E 07 1E' ) //在此处更改您要授予访问权限的卡的 UID
  {   
    digitalWrite(LockPin, HIGH);
    Serial.print('门开锁');
    数字写入(蜂鸣器,高);
    延迟(2000);
    数字写入(蜂鸣器,低);
    传感器();
    }
  else
  {
   Serial.println('你没有被授权'); 

   延迟(2000);
   数字写入(蜂鸣器,低);
  } 
}
无效传感器()
{
 读取传感器();
 if (lockread == HIGH){  
      readsensor();
      if(state==LOW){
      digitalWrite(LockPin, LOW);
      Serial.print('门已关闭');
      数字写入(蜂鸣器,高);
      延迟(2000);
      数字写入(蜂鸣器,低);
    }
  } 
 }



    进入嵌入式查看更多内容>>
    相关视频
    • PX4固件二次开发课程

    • RISC-V嵌入式系统开发

    • NuttX Workshop 2024

    • 自己动手写操作系统

    • SOC系统级芯片设计实验

    • 自己动手做一台计算机

    精选电路图
    • 简洁的过零调功器电路设计与分析

    • 单稳态控制电路设计与分析

    • 开关电源的基本组成及工作原理

    • MT3608构成3.7V转12V的升压电路图

    • 比较常见的功率整流器和滤波电路

    • 基于CA3193的热电偶放大器电路

      相关电子头条文章