您已经在一些酒店和其他地方看到了RFID门锁机制,在那里您不需要钥匙即可解锁房间。你会得到一张卡,你只需要把它放在一个RFID阅读器盒前面,锁就会通过哔哔声和LED闪烁解锁。此RFID门锁可以在家中轻松制作,您可以将其安装在任何门上。这些门锁只是电动门锁,当您对其施加一些电压(通常为 12v)时会打开。
在这个项目中,我们使用Arduino和继电器来触发电动门锁和RFID进行身份验证,因此您的RFID标签将充当钥匙。如果您在RFID阅读器附近放置了错误的RFID卡,蜂鸣器将发出哔哔声以提醒错误的卡。
所需材料:
Arduino UNO
EM-18 带标签的读卡器模块
继电器 5v
发光二极管
蜂鸣器
连接线
电阻
Arduino RFID门锁电路图
EM-18 无线射频识别读写器:
RFID代表射频识别。每张RFID卡中都嵌入了一个唯一的ID,RFID阅读器用于读取RFID卡号。EM-18 RFID阅读器的工作频率为125 KHz,并配有片上天线,可采用5V电源供电。它提供串行输出以及 weigand 输出。范围约为8-12厘米。串行通信参数为9600bps,8个数据位,1个停止位。
EM-18 RFID阅读器提供的输出为12位ASCII格式。在 12 位数字中,前 10 位数字是卡号,后两位数字是卡号的异或结果。最后两位数字用于错误检查。
例如,从读卡器读取的卡号是0200107D0D62,那么卡上的卡号将如下所示。
02 – 序言
00107D0D = 十进制1080589。
62 是 (02 XOR 00 XOR 10 XOR 7D XOR 0D) 的 XOR 值。
因此,卡上的数字是0001080589
代码和说明:
完整的RFID门锁Arduino代码在本项目结束时给出。
在下面的代码中,RFID标签编号存储在“char标签”中。“180088F889E1”是我存储在应答器微芯片中的RFID标签号码。标签号的长度为 12,我们定义了像“char input [12]”这样的数组,12 定义了 no。字符或数组大小。
char tag[] ="180088F889E1";
char input[12];
int count = 0;
boolean flag = 0;
现在,在下面的代码中,我们设置了Arduino UNO板的引脚用于操作,并且serial.begin()用于串行数据传输。此处,引脚 2 用于继电器操作,引脚 3 用于备用红色 LED,引脚 4 用于蜂鸣器。
void setup()
{
pinMode(2,OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
}
代码的条件主体是 void loop() ,对于备用红色 LED,引脚 3 保持 HIGH 状态,直到执行任何任务。
我们将使用 if 条件检查是否有任何可用的串行数据。意味着我们将检查是否有任何RFID标签被扫描。如果有任何串行数据(RFID标签号),我们会将其保存在我们定义的用于保存RFID标签编号的input[]数组中。
void loop(
{
digitalWrite(3,1);
if(Serial.available())
{
count = 0;
while(Serial.available() && count < 12)
{
input[count] = Serial.read();
count++;
delay(5);
}
现在我们将比较扫描的RFID卡号。使用我们在 char tag[] 数组中定义的数字。如果两个 umber 匹配,则我们将标志变量设置为 1,如果扫描了错误的卡或两个数字都不匹配,则我们将标志变量设置为 0。
if(count == 12)
{
count =0;
flag = 1;
while(count<12 && flag !=0)
{
if(tag[count]==input[count])
flag = 1;
else
flag= 0;
}
如果您放置正确的 RFID 标签,则标志等于 1,在这种情况下,引脚 2 变为高电平(继电器通过该标签运行),引脚 3 此时变为低电平,延迟 5 秒后,两个引脚将恢复其初始状态。继电器将进一步连接到电动门锁,因此在继电器打开的情况下,门锁将被打开,5 秒后它将再次被锁定。
if(flag == 1)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
delay(5000);
digitalWrite(2,LOW);
}
如果您放置了错误的RFID 卡,标志将为零,蜂鸣器开始发出哔哔声,提醒 RFID 卡错误。
if(flag == 0)
{
for(int k =0; k<= 10; k++)
{
digitalWrite(4,HIGH);
delay(300);
digitalWrite(4,LOW);
delay(300);
}
}
基于Arduino的RFID门锁的工作原理
RFID系统由两个组件组成:RFID标签和阅读器。RFID标签由集成电路和天线组成,集成电路用于存储数据,天线用于将数据传输到RFID阅读器模块。每当RFID标签进入RFID阅读器的范围内时,RF信号为标签供电,然后标签开始串行传输数据。数据进一步由RFID阅读器接收,阅读器将其发送到Arduino板。之后,根据微控制器中的代码执行不同的任务。
在我们的电路中,我们已经在代码中保存了RFID标签的值。因此,每当该特定标签进入范围内时,继电器就会被激活。在这里,我们将LED与继电器连接起来进行演示,但是该LED可以用电动门锁代替,因此每当继电器被激活时,锁都会打开。
如果我们扫描任何其他RFID卡,蜂鸣器将开始发出哔哔声,因为它是错误的RFID标签。因此,对于门锁系统,我们使用了这个概念,即只有使用正确的RFID标签才能打开门。继电器本身将在 5 秒后停用,门将在 5 秒后关闭,您可以在代码中更改此延迟。
char tag[] ="180088F889E1";
char input[12];
int count = 0;
boolean flag = 0;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(3,1);
if(Serial.available())
{
count = 0;
while(Serial.available() && count < 12)
{
input[count] = Serial.read();
count++;
delay(5);
}
if(count == 12)
{
count =0;
flag = 1;
while(count<12 && flag !=0)
{
if(tag[count]==input[count])
flag = 1;
else
flag= 0;
}
if(flag == 1)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
delay(5000);
digitalWrite(2,LOW);
}
if(flag == 0)
{
for(int k =0; k<= 10; k++)
{
digitalWrite(4,HIGH);
}
}
}
}
}
全部0条评论
快来发表一下你的评论吧 !