RFID 门禁控制电脑开关机:Arduino 继电器项目
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| MFRC522 RFID 模块 | 1 | |
| 单路 5V 继电器模块 | 1 | |
| 公母跳线 | 12 | RFID 7根、继电器 3根、主板开关 2根 |
项目简介
为电脑增加物理门禁:刷 RFID 卡开机,刷钥匙扣长按 5 秒强制关机。复用经典 RFID 门锁代码,继电器并联在主板电源开关两端,模拟按键动作。
硬件连接
- MFRC522: SDA→D10, SCK→D13, MOSI→D11, MISO→D12, RST→D9, 3.3V, GND
- 继电器: IN→D7, VCC→5V, GND→GND
- 继电器常开触点并联主板 PWR_SW 两针
获取卡片 UID
先运行 MFRC522 库的 DumpInfo 示例,记录卡片 UID (如 e199312d、fbecb673),填入代码 ok_rfid_1、ok_rfid_2。
代码
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
String read_rfid;
String ok_rfid_1 = "e199312d"; // 主卡:开机
String ok_rfid_2 = "fbecb673"; // 钥匙扣:强制关机(长按5秒)
int lock = 7;
void setup() {
Serial.begin(9600);
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
pinMode(lock, OUTPUT);
digitalWrite(lock, LOW);
}
void dump_byte_array(byte *buffer, byte bufferSize) {
read_rfid = "";
for (byte i = 0; i < bufferSize; i++) {
read_rfid += String(buffer[i], HEX);
}
}
void open_lock() { // 模拟短按开机
digitalWrite(lock, HIGH);
delay(500);
digitalWrite(lock, LOW);
}
void close_lock2() { // 模拟长按 5 秒关机
digitalWrite(lock, HIGH);
delay(5000);
digitalWrite(lock, LOW);
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid == ok_rfid_1) open_lock();
if (read_rfid == ok_rfid_2) close_lock2();
}
库下载
MFRC522 Library: GitHub
原理图

制造工艺