Arduino RFID 门禁系统:从原理到实战的完整指南
RFID 技术原理
RFID(射频识别)由**标签(应答器)**和**读写器(收发器)**组成。读写器天线产生高频电磁场,无源标签进入感应区后,线圈感应得电为芯片供电。标签通过**负载调制**(切换天线负载改变读写器天线功耗)或**回散射耦合**将数据传回读写器。
MFRC522 模块与 Arduino 连接
采用 MIFARE 协议标签(1KB 内存,13.56 MHz,感应距离 ≤10 cm)与 MFRC522 读写器(SPI 接口,VCC 接 3.3V,其余引脚 5V 兼容)。连接对照表:
| MFRC522 | Arduino Uno | Arduino Mega |
|---|---|---|
| SDA (SS) | 10 | 53 |
| SCK | 13 | 52 |
| MOSI | 11 | 51 |
| MISO | 12 | 50 |
| RST | 9 | 9 |
门禁系统功能流程
- 上电等待录入**主卡**,存入
myTags[0] - 进入普通模式:刷未授权卡 → "Access Denied";刷授权卡 → 舵机转动开锁,显示 "Access Granted"
- 刷主卡进入**编程模式**:再刷已授权卡 → 删除该卡;刷新卡 → 添加授权
- 门打开时显示 "Door Opened",接近传感器检测门关闭后自动上锁复位
核心代码解析
获取标签 UID
uint8_t getID() {
if (!mfrc522.PICC_IsNewCardPresent()) return 0;
if (!mfrc522.PICC_ReadCardSerial()) return 0;
tagID = "";
for (uint8_t i = 0; i < 4; i++) {
tagID.concat(String(mfrc522.uid.uidByte[i], HEX));
}
tagID.toUpperCase();
mfrc522.PICC_HaltA();
return 1;
}
MIFARE Classic 标签 UID 为 4 字节,拼接为十六进制字符串并转大写。
主循环逻辑
void loop() {
int proximity = analogRead(A0);
if (proximity > 200) { // 门关闭
if (getID()) {
if (tagID == myTags[0]) { // 主卡 → 编程模式
// 添加/删除标签逻辑...
} else { // 普通卡 → 验证授权
for (int i = 0; i < 100; i++) {
if (tagID == myTags[i]) {
myServo.write(170); // 开锁
correctTag = true;
break;
}
}
if (!correctTag) lcd.print("Access Denied!");
}
}
} else { // 门打开
lcd.print("Door Opened!");
while (analogRead(A0) <= 200); // 等待关门
myServo.write(10); // 上锁
}
}
硬件清单
- MFRC522 RFID 模块
- 舵机(锁舌机构)
- 1602 LCD 显示屏
- CNY70 红外接近传感器(检测门状态)
- Arduino 开发板、面包板、杜邦线
完整代码已整合在文末,包含库引脚定义、初始化、主循环及辅助函数,可直接上传使用。
制造工艺
- Arduino RFID 门锁系统 – RC522 模块实现安全门禁
- 打造安全的 Arduino RFID 门锁——分步指南
- 自制可拳击的可编程键盘按钮:基于 Arduino 与压电元件的分步指南
- 基于 Arduino、键盘与线性执行器的密码门锁
- Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
- eDOT:基于 Arduino 的精密时钟与气象站,内置红外遥控
- 基于 Arduino 与 Google Sheets 的实时 RFID 考勤系统
- Arduino 合成乐音:从零实现 88 键钢琴全音域
- 基于 Arduino 和超声波传感器的自动门控制系统
- 智能无钥匙门锁:Arduino + Android 蓝牙密码控制舵机开锁
- 蓝牙遥控 Arduino 小车完整 DIY 指南
- Arduino 实时数字罗盘:HMC5883L + Processing 可视化教程