风筝
发表于: 2018-6-7 21:58:13 | 显示全部楼层

在某些酒店以及其他地方,我们曾经看到过使用RFID的门锁,您无需钥匙即可解锁房间。给你一张卡片,然后只需要把它放在一个RFID阅读器的前面,就可以实现解锁,阅读器发出哔哔声,并且LED指示灯闪烁。这种RFID门锁可以在家中轻松制作实现,您可以将其安装在任何门上。这些门锁通常是电动操作的门锁,当你施加一定的电压(通常为12V)时它会打开。


在本篇文章中,我们使用Arduino开发板和继电器来触发电动门锁,并且使用RFID进行验证,因此RFID功能是一项功能。如果您在RFID阅读器附近放置错误的RFID卡,蜂鸣器会发出警报,提示卡错误。


所需的材料

●    Arduino UNO开发板

●    带标签的EM-18读卡器模块

●    5v的继电器

●    LED指示灯

●    蜂鸣器

●    连接导线

●    电阻

●    RFID电动门锁

RFID-Electric-Door-Lock.png



Arduino的RFID门锁电路原理图

以下是使用Arduino的RFID智能门锁电路原理图

Arduino-RFID-Door-Lock-circuit-diagram.png


EM-18 RFID阅读器

RFID代表射频识别。每个RFID卡都嵌入了一个唯一的ID,并使用RFID阅读器读取RFID卡号。 EM-18 RFID阅读器的工作频率为125 KHz,配有一个片上天线,可以使用5V电源供电。它提供WEIGAND协议的串行输出。通信范围大约8-12厘米。串行通信参数为9600bps、8个数据位、1个停止位。这种无线射频识别被用于许多系统中:

●    基于RFID的考勤系统,

●    安全系统

●    投票机

●    电子收费公路定价


RFID.jpg


RFID-card.jpg


EM-18 RFID阅读器提供的输出采用12位ASCII码格式。 12位数字中的前10位数是卡号,后两位数是卡号的异或结果。最后两位数字用于错误检查。

例如,从读卡器读取的卡号是0200107D0D62,则卡上的卡号将如下所示。

02 - 前导符

00107D0D = 1080589(十进制)。

62是(02 XOR 00 XOR 10 XOR 7D XOR 0D)的XOR值。

因此卡上的号码是0001080589


代码和说明

在本文的末尾处提供了RFID智能门锁的完整代码。


在下面的代码中,RFID标签号存储在“char标签”中。 “180088F889E1”是存储在发送应答器微芯片中的我的RFID标签号码。标签号码的长度是12,我们已经定义了类似“char input [12]”的数组,12定义了字符的个数或数组的大小。

  1. char tag[] ="180088F889E1";
  2. char input[12];            
  3. int count = 0;      
  4. boolean flag = 0;
复制代码

现在,在下面的代码中,我们设置了Arduino UNO开发板的引脚以进行操作,serial.begin()用于串行数据传输。这里引脚2用于继电器操作,引脚3用于备用红色LED,引脚4用于蜂鸣器。

  1. void setup()                                                                                    
  2. {
  3.   pinMode(2,OUTPUT);
  4.   pinMode(3, OUTPUT);
  5.   pinMode(4, OUTPUT);
  6.   Serial.begin(9600);   
  7. }
复制代码

代码的条件主体是void loop(),对于备用红色LED,引脚3保持高电平,直到执行任何任务。


我们将使用if条件检查是否有任何可用的串行数据。意味着我们将检查是否有任何RFID标签正在扫描。如果有任何串行数据(RFID标签号)到来,我们会将其保存在我们为保存RFID标签号而定义的输入[]数组中。

  1. void loop(
  2. {
  3.   digitalWrite(3,1);
  4.   if(Serial.available())
  5.   {
  6.     count = 0;
  7.   while(Serial.available() && count < 12)
  8.     {
  9.       input[count] = Serial.read();
  10.       count++;
  11.       delay(5);
  12.     }
复制代码

现在我们将比较扫描的RFID卡号。用我们在char tag []数组中定义的数字。如果两个匹配都匹配,那么我们将标志变量设置为1,如果扫描了错误的卡或两个数字不匹配,那么我们将标志变量设置为0。

  1. if(count == 12)
  2.     {
  3.       count =0;
  4.       flag = 1;
  5.       while(count<12 && flag !=0)
  6.       {
  7.         if(tag[count]==input[count])
  8.         flag = 1;
  9.         else
  10.         flag= 0;
  11. }
复制代码

如果您放置正确的RFID标签,则标志等于1,在这种情况下,引脚2变为高电平(继电器工作),此时引脚3变为低电平,延迟5秒后,两个引脚将返回至其初始条件。继电器将进一步连接到电动门锁,因此继电器打开后,门锁将打开,5秒钟后将再次锁定。

  1. if(flag == 1)
  2.     {
  3.       digitalWrite(2,HIGH);
  4.        digitalWrite(3,LOW);
  5.       delay(5000);
  6.       digitalWrite(2,LOW);
  7.     }
复制代码

如果您放置错误的RFID卡,该标志将为零,并且蜂鸣器开始发出蜂鸣声,提醒该RFID卡错误。

  1. if(flag == 0)
  2.       {
  3.        for(int k =0; k<= 10; k++)
  4.       {
  5.         digitalWrite(4,HIGH);
  6.         delay(300);
  7.         digitalWrite(4,LOW);
  8.         delay(300);
  9.         }
  10.         }  
复制代码

基于Arduino的RFID门锁的工作过程

Arduino-RFID-Door-Lock-in-action.jpg


RFID系统由两部分组成:一个RFID标签和一个读卡器。 RFID标签由集成电路和天线组成,集成电路用于存储数据,天线用于将数据传输到RFID读取器模块。每当RFID标签进入RFID阅读器范围时,RF信号为标签供电,然后标签开始串行传输数据。 RFID阅读器进一步接收数据,阅读器将其发送给Arduino板。然后,根据微控制器中的代码执行不同的任务。


在我们的电路中,我们已经在代码中保存了RFID标签的价值。所以,只要特定的标签进入范围内,继电器就会被激活。在这里,我们已经连接了一个带有继电器的LED来演示,但是这个LED可以被电动门锁取代,所以只要继电器被激活,锁就会打开。


如果我们扫描任何其他RFID卡,蜂鸣器会发出蜂鸣声,因为它是错误的RFID标签。因此,对于门锁系统,我们使用这个概念,即只有使用正确的RFID标签才能打开门。 5秒钟后,继电器自动关闭,5秒钟后门将关闭,您可以更改代码中的延迟时间。


代码

本文使用的完整代码如下: main.txt (914 Bytes, 下载次数: 204)

跳转到指定楼层
zombiehorde
发表于: 2018-12-21 11:06:42 | 显示全部楼层

带标签的EM-18读卡器模块有链接吗 某宝上搜不到
回复

使用道具 举报

风筝
发表于: 2018-12-21 14:45:53 | 显示全部楼层

zombiehorde 发表于 2018-12-21 11:06
带标签的EM-18读卡器模块有链接吗 某宝上搜不到

可以在淘宝上搜索“EM-18 RFID模块”,或者在亚马逊上面购买
回复

使用道具 举报

Doreen
发表于: 2019-2-3 03:03:38 | 显示全部楼层

您好我想请问一下,EM-18模块在frizting中没有找到怎么办
回复

使用道具 举报

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

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 15:47 , Processed in 0.094430 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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