RFID 刷卡解锁 Windows 电脑:Arduino Micro 实现键盘模拟
项目简介
利用 Arduino Micro(或 Leonardo,基于 ATmega32U4)的原生 USB HID 功能,配合 RC522 RFID 模块,将授权卡的 UID 与 Windows 密码绑定。刷卡瞬间模拟 Win+L 锁屏,随即输入密码并回车,实现“刷卡即解锁/锁屏”切换。无需额外驱动,即插即用,适合频繁锁屏解锁的办公场景。
核心原理
- ATmega32U4 内置 USB 控制器,可枚举为键盘/鼠标设备,调用
Keyboard.h发送按键 - RC522 通过 SPI 读取卡片 UID(4 字节,十六进制字符串)
- 代码中预存授权 UID 和 Windows 密码/PIN
- 刷卡时:若 UID 匹配 → 发送 Win+L → 延时 100ms → 发送 Enter(唤醒锁屏界面) → 延时 100ms →
Keyboard.print(密码)→ Enter 确认 - 若系统已解锁,Win+L 先锁屏,后续密码输入被忽略;若已锁屏,直接解锁
所需材料
- Arduino Micro / Pro Micro / Leonardo(必须含 ATmega32U4,Uno/Mega/Nano 不支持 HID)
- RC522 RFID 模块(3.3V 供电,含 S50 白卡/钥匙扣)
- 3 个 10 kΩ 电阻(用于 SPI 信号线分压,5V→3.3V)
- 面包板、杜邦线、焊接工具(可选)
硬件接线
| RC522 引脚 | Arduino Micro 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 通过分压电路或 3.3V 稳压模块供电,严禁直连 5V |
| GND | GND | 共地 |
| RST | D5 | 可在代码修改 |
| IRQ | NC | 悬空 |
| MISO | D14 (MISO) | 硬件 SPI,不可更改 |
| MOSI | D16 (MOSI) | 硬件 SPI |
| SCK | D15 (SCK) | 硬件 SPI |
| SDA (SS) | D10 | 片选,可在代码修改 |
分压电路:MOSI、SCK、SDA 各串联 10kΩ 电阻到模块端,另一端接 Arduino 引脚;MISO 直连(模块输出 3.3V 兼容 5V 逻辑)。
软件配置步骤
- 安装库:
MFRC522(库管理器搜索安装) - 板子选择 Arduino Leonardo(Micro/Pro Micro 同选此项)
- 上传初始代码,打开串口监视器(9600 波特率)
- 刷卡,记录串口输出的第一行 UID(如
48b45a10) - 修改代码中
String card1 = "48b45a10";为你的 UID - 修改
Keyboard.print("PASSWORD");为你的 Windows 密码/PIN - 重新上传代码,测试刷卡解锁
完整代码
#include <Keyboard.h>
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 5
#define KEY_RETURN 0xB0
MFRC522 mfrc522(SS_PIN, RST_PIN);
char Enter = KEY_RETURN;
String readid;
String card1 = "48b45a10"; // 替换为你的卡 UID
void setup() {
Serial.begin(9600);
Keyboard.begin();
SPI.begin();
mfrc522.PCD_Init();
}
void temp(byte *buffer, byte bufferSize) {
readid = "";
for (byte i = 0; i < bufferSize; i++) {
readid += String(buffer[i], HEX);
}
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
temp(mfrc522.uid.uidByte, mfrc522.uid.size);
if (readid == card1) {
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('l');
Keyboard.releaseAll();
delay(100);
Keyboard.press(Enter);
Keyboard.release(Enter);
delay(100);
Keyboard.print("PASSWORD"); // 替换为你的密码
Keyboard.releaseAll();
delay(100);
Keyboard.press(Enter);
Keyboard.releaseAll();
}
}
进阶与安全
- 支持多张卡:用数组存储多个 UID,分别绑定不同密码/操作
- 添加蜂鸣器/LED 指示刷卡成功/失败
- 设计 3D 打印外壳,做成便携钥匙扣形态
- 安全警示:明文密码存储在代码中,物理接触设备即可读取;不建议用于高安全需求场景,可结合加密存储或指纹模块增强
常见问题
- 识别不到卡:检查接线、供电(3.3V)、库版本、天线贴纸是否撕掉
- 按键无反应:确认板子选 Leonardo,USB 线支持数据传输,Windows 未禁用 HID 设备
- 密码输入错位:调整
delay()时间,不同电脑锁屏唤醒速度不同
制造工艺
- 银行金库内幕:历史、设计与安全未来
- 运河与船闸:美国水路运输的工程、历史与未来
- 现代弹子锁的演变与制造
- 组合锁:设计原理、制造工艺与历史演变
- 树莓派 3 配合 PubNub 实现远程气象监测
- 树莓派 Zero 配合 Node‑RED 融合 TI SensorTag 与 Blynk 物联网平台
- 树莓派 PIR 运动传感器控制 LED 实战指南
- Bridge Shield扩展板:树莓派与Arduino集成打造智能机器人
- 在 Windows 10 IoT Core 上构建语音驱动的计算机视觉机器人
- 基于 Arduino 与 ESP8266 的 WiFi 智能门锁:手机扫码解锁
- 基于 RFID 的家庭安防:低成本、免电池监控方案
- 掌握 C# using 指令:命名空间导入、别名与静态导入全解析