在本文中,我们将看到如何使用基于Arduino的RFID阅读器电路来控制继电器,从而可以在安全门锁应用程序中使用。
概述
如果你还没有检查之前的RFID文章,请继续检查它,它涵盖了射频识别技术的基础知识.
我们将使用UID识别授权的标记。简单地说,UID是标签的唯一标识号,当您在办公室或其他任何地方扫描您的卡时,它会从卡中提取UID。
身份证的UID保存在你办公室的数据库中,它会识别持卡人并记录你的考勤。
标签不仅传输UID,还传输其他一些存储在标签中的信息,标签通常可以存储1KB到4KB,有时甚至更多。
我们不会讨论如何在标记上存储信息,但是将在以后的文章中讨论。在这篇文章中,我们将利用UID号来控制继电器开/关.
这个项目的座右铭是打开/关闭设备,它是连接到给定的设置扫描与授权的RFID标签。
卡的UID在程序中定义,当检测到授权卡时,它将打开第一次扫描上的继电器,再次扫描将使继电器失效。
如果检测到非法卡,它会在串行监视器和继电器上发出错误信息,继续执行当前的任务而不中断。
在这里,当授权卡被扫描时,继电器激活/失效,这个机制可以在任何地方使用,例如:门锁系统,授权卡需要被扫描才能开门。
它是如何工作的:
该RFID电路由LED组成,LED指示继电器的状态,bc548晶体管驱动继电器,1N4007二极管连接在继电器上,在开关瞬间阻止高电压尖峰。
如果您想连接更高电压的额定继电器(9V或12V),可以将外部+Ve电源连接到继电器,将-Ve电源连接到arduino的GND引脚的接地。在进行此步骤时请务必小心,如果连接错误,可能会损坏单板。
完成硬件设置后的下一步是上传代码,以查找您标记的UID。
现在把下面给出的程序上传到arduino,打开串行监视器并扫描标签。
查找UID的程序:
# include < SPI.h >
# include < MFRC522.h >
#定义SS_PIN 10
#定义RST_PIN 9
MFRC522 rfid (SS_PIN RST_PIN);
MFRC522: MIFARE_Key关键;
无效的设置()
{
Serial.begin (9600);
SPI.begin ();
rfid.PCD_Init ();
}
无效循环(){
如果(!rfid.PICC_IsNewCardPresent ())
返回;
如果(!rfid.PICC_ReadCardSerial ())
返回;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if(piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType = MFRC522::PICC_TYPE_MIFARE_1K &&
piccType ! = MFRC522:: PICC_TYPE_MIFARE_4K)
{
系列。println(F("你的标签不是MIFARE经典类型,你的卡片/标签不能读取:("));
返回;
}
String StrID = "";
For (byte I = 0;我< 4;我+ +){
StrID + =
(rfid.uid.uidByte[我]< 0 x10 ?“0”:“”)+
十六进制字符串(rfid.uid.uidByte[我])+
(我! = 3 ?":":");
}
StrID.toUpperCase ();
系列。打印(“您的卡的UID:”);
以StrID);
射频识别。PICC_HaltA ();
射频识别。PCD_StopCrypto1 ();
}
串行监视器的输出(示例):
你的卡的UID是:AA:BB:CC:DD
在串行监视器上,您将看到一些十六进制代码,这是标记的UID。记下它,它将在下一个程序中被用来识别标记。
完成这一步后,在相同的设置上上传下面的代码。
程序识别卡和控制继电器:
//--------------- 项目由R.Girish ------------//
# include < SPI.h >
# include < MFRC522.h >
#定义SS_PIN 10
#定义RST_PIN 9
int国旗= 0;
int op = 8;
char UID[] = "XX:XX:XX:XX";//在这里放置你的标签的UID。
MFRC522 rfid (SS_PIN RST_PIN);
MFRC522: MIFARE_Key关键;
无效的设置()
{
Serial.begin (9600);
SPI.begin ();
rfid.PCD_Init ();
pinMode (op、输出);
}
无效循环()
{
如果(!rfid.PICC_IsNewCardPresent ())
返回;
如果(!rfid.PICC_ReadCardSerial ())
返回;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if(piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType = MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
系列。println(F("你的标签不是MIFARE经典类型,你的标签不能被读取:("));
返回;
}
String StrID = "";
For (byte I = 0;我< 4;我+ +)
{
StrID + =
(rfid.uid.uidByte[我]< 0 x10 ?“0”:“”)+
十六进制字符串(rfid.uid.uidByte[我])+
(我! = 3 ?":":");
}
StrID.toUpperCase ();
如果(StrID ! = UID)
{
系列。println("这是一个无效的标签:(");
以 ("***************************************");
延迟(2000);
}
if (StrID==UID && flag==0)
{
标志= 1;
digitalWrite (op、高);
系列。println(“这是一个有效的标签:)”);
系列。println(“状态:”);
以 ("***************************************");
延迟(2000);
}
else if(StrID==UID && flag==1);
{
国旗= 0;
digitalWrite (op,低);
系列。println(“这是一个有效的标签:)”);
系列。println(“状态:”);
以 ("***************************************");
延迟(2000);
}
射频识别。PICC_HaltA ();
射频识别。PCD_StopCrypto1 ();
}
//--------------- 项目由R.Girish ------------//
char UID[] = "XX:XX:XX:XX";//在这里放置你的标签的UID。
将XX:XX:XX:XX替换为您的UID。
作者的原型可以有效地用作门和保险柜的万无一失的RFID安全锁:
扫描授权卡时:
当扫描到一个未经授权的标签时:
如果您对这个Arduino RFID安全锁电路有任何问题,请在下方评论区提问。
嗨,Swagatam,只是想知道如果有任何方式,我可以添加更多的标签到代码,我有3个不同的标签,我想使用。
问候
杰夫
Geoff你好,我将把这个问题转发给文章的作者Mr. GR寻求解决方案。
谢谢你,斯瓦塔姆,等我答复吧。
嗨,杰夫,
是的,可以增加2个标签。我会试着更新代码。
问候
大家好!代码编译与atmega2560,但不工作。
嘿,请现在检查一下,如果还有问题请告诉我们。