我们中的许多人都知道计算机是在 1871 年左右发明的,但直到 1961 年我们才对它们进行密码保护。在 19 年代早期,我们使用大头针和字母数字字符作为计算机的密码,今天我们有许多类型的验证方法,如密码、大头针、图案、手势、指纹识别、面部识别等等。但是,每次我在短暂休息后回到办公室电脑时,登录到我的办公室电脑仍然是一件痛苦的事。
因此,在这个项目中,我们将学习如何使用 RFID 标签解锁 Windows 笔记本电脑。Arduino 板和 RFID 阅读器将始终连接到计算机并解锁系统,我只需将 RFID 标签交换到 RFID 阅读器上。有了这个Arduino RFID windows 登录项目,我可以非常快速地解锁系统,而无需输入任何密码,后来我计划使用我的办公室身份证作为 RFID 标签,因为我的身份证已经有一个 RFID 标签,我可以编程Arduino 来验证它。听起来很有趣,所以让我们开始吧……
所需材料:
Arduino UNO(可以使用任何 Arduino)
RC522 RFID阅读器
射频识别标签
连接线
USB电缆
RC522 RFID 模块:
市场上有许多类型的 RFID 阅读器,但在这个项目中,我们使用了基于 RC522 SPI 的 RFID 模块。这在在线购物网站上很便宜且很容易获得。这是 RFID 具有 SPI、UART 和 I2C 接口,但默认情况下,它带有 SPI 接口。MFRC522 RFID 阅读器模块如下所示。
在这个项目中,上面显示的RC522 RFID 模块连接到 Arduino,而 Arduino 本身连接到计算机。当 RFID 标签放置在此阅读器附近时,Arduino 会读取 rfid 标签 ID 号并将其发送到计算机。
电路原理图:
下面给出了将RFID RC522 与 Arduino 接口的完整电路图。
如您所见,连接非常简单。由于 RFID 模块使用 SPI 通信,我们已将 MISO、MOSI、SCK 和 NSS 引脚连接到 Arduino Uno 板的 SPI 引脚。RFID 模块由 Arduino 的 5V 引脚供电。Arduino UNO 本身将始终连接到笔记本电脑,因此我们可以通过笔记本电脑的 USB 端口为其供电。连接详细信息如下表所示。
设置 RFID 解锁系统:
电路搭建完成后,如上图所示,将 Arduino 和系统(笔记本电脑或 PC)之间的 USB 线连接起来。现在用户需要找到 Arduino 的 com 端口。要查找 com 端口,您可以使用设备管理器,也可以在 Arduino IDE 中找到它,如下所示。我这里的 COM 端口号是 1;您的可能会有所不同,请记下此 COM 端口号,以便稍后使用。
现在用户需要将RC522 Arduino 代码上传到您的 Arduino 模块。本页底部给出了完整的代码;代码的解释也将在本文后面讨论。代码上传后打开串口监视器。然后将 RFID 标签放在 RFID 阅读器上,您将在串行监视器上看到 5 个值。用户需要复制它并关闭串行监视器。我的值显示在下面的串行监视器快照中。
解压缩 ZIP 文件后,进入名为 32 位或 64 位文件夹的文件夹(根据您的操作系统)并打开名为 RFIDcredentials.txt 的记事本。粘贴 RFID 值并更新系统用户名和密码。如果要添加两张卡,请在第二行添加相同的凭据,如下所示。
然后保存并关闭此文件。现在回来打开 RFIDCredSettings 记事本并更新其中的 Arduino 端口,然后保存并关闭。我的 COM 端口号再次为 1,用您的 COM 端口号更新它。将其余部分保留为默认值,如下所示。
现在复制所有四个项目并将它们粘贴到 C:\Windows\System32。如果它要求任何许可,只需给予或单击是。现在运行注册文件来注册更改。
当您运行注册文件时,您可能会看到以下对话框。
按是然后确定。现在锁定系统,用户将看到当前用户可用的另一个用户选项。
现在用户可以使用 RFID 卡解锁系统。这意味着,现在我们不需要输入密码,只需将 RFID 标签放在 RFID 阅读器上,窗户就会立即解锁。
RFID Arduino 代码:
该项目的编码部分简单易行;给出了相同的解释。首先,我们需要包含头文件并为 RFID RST_PIN 和 SS_PIN 定义引脚。如果您尚未安装mfrc522 库,您可以从以下链接下载并添加它。
#include
#include#define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN,RST_PIN); MFRC522::MIFARE_KEY;
然后在 void setup 中,我们已经初始化了串口和SPI 通信以及 RFID 阅读器
无效设置() { 序列号.开始(9600); 而(!串行); SPI.开始(); mfrc522.PCD_Init(); for(字节 i = 0; i < 6; i++) Key.KeyByte[i] = 0xFF; serial.print('>'); }
现在在循环功能中,我们正在等待卡片。
无效循环() { 如果(!mfrc522.PICC_IsNewCardPresent()) 返回; 如果(!mfrc522.PICC_ReadCardSerial()) 返回; send_tag_val (mfrc522.uid.uidByte, mfrc522.uid.size); 延迟(1000); }
如果卡片发现 send_tag_val 调用一个 RFID 标签数据,将使用串行打印将数据传输到系统。这个序列打印值将与我们之前放置的文件进行比较,如果匹配,windows 将自行解锁。
void send_tag_val (byte *buffer, byte buffersize) { 序列号.print("ID"); 对于(字节 i = 0;i < 缓冲区大小;i++) { serial.print(缓冲区 [i],DEC); 序列号.print(""); } serial.printIn(0, DEC); serial.print('>'); }
#include
#include
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN,RST_PIN);
MFRC522::MIFARE_Key 密钥;
无效设置()
{
序列号.开始(9600);
而(!串行);
SPI.开始();
mfrc522.PCD_Init();
对于(字节 i = 0;i < 6;i++)
key.keyByte[i] = 0xFF;
Serial.print('>');
}
无效循环()
{
如果(!mfrc522.PICC_IsNewCardPresent())
返回;
如果(!mfrc522.PICC_ReadCardSerial())
返回;
send_tag_val(mfrc522.uid.uidByte, mfrc522.uid.size);
延迟(1000);
}
void send_tag_val(byte *buffer, byte bufferSize)
{
Serial.print("ID:");
对于(字节 i = 0;i < 缓冲区大小;i++)
{
Serial.print(buffer[i], DEC);
序列号.print("");
}
Serial.println(0, DEC);
Serial.print('>');
}
全部0条评论
快来发表一下你的评论吧 !