构建一个简单的RFID门锁
2022-08-22 来源:elecfans
RFID(射频识别)是一种廉价且易于使用的技术。它可用于许多应用,如访问控制、安全、资产跟踪、人员跟踪等。您已经在酒店、办公室和许多其他只需将卡放在 RFID 读卡器附近的地方看到了RFID 门锁系统一秒钟,门就会打开。
这里使用霍尔效应传感器和磁铁来检测门的运动。霍尔效应传感器将放置在门框上,而磁铁则放置在门本身上。霍尔传感器和磁铁靠近时,霍尔传感器处于低电平状态,门保持关闭状态;传感器和磁铁不关闭时,门打开,霍尔传感器处于高电平状态。我们将使用这种霍尔效应机制来自动锁定和解锁门。
所需组件
阿杜诺
RFID-RC522模块
12v电磁锁
继电器模块
霍尔效应传感器
10kΩ电阻
蜂鸣器
电磁锁
电磁锁在电子机械锁定机构上工作。这种类型的锁有一个带有倾斜切口的嵌条和一个良好的安装支架。通电时,直流电会产生磁场,将塞子移入内部并使门保持在解锁位置。弹头将保持其位置,直到断电。当电源断开时,蛞蝓移动到外面并锁上门。它在锁定状态下不使用任何电源。要驱动电磁锁,您需要一个可以提供 12V @ 500mA 的电源。
电路原理图
下面给出了使用 Arduino 的电磁门锁电路图。
下表给出了Arduino 和 RFID之间的连接。蜂鸣器的正极接Arduino的数字引脚4,GND引脚接Arduino的接地引脚。霍尔效应传感器的 VCC 和 OUT 引脚之间使用了一个 10K 电阻。电磁锁通过继电器模块连接到 Arduino。
根据电路图焊接完穿孔板上的所有元件后,如下图所示:
代码说明
文档末尾提供了此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 电磁锁
准备好代码和硬件后,您可以开始测试电磁门锁项目。在这里,我们焊接了穿孔板上的所有组件,以便可以轻松地将其安装在门上。
因此,要对其进行测试,请将穿孔板安装在门框上,并将磁铁安装在门上,以便检测门的运动。下图显示了磁铁和霍尔传感器是如何固定在门上的。
现在扫描您授权的 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);
数字写入(蜂鸣器,低);
}
}
}
上一篇:共振音频系统设计方案解析