教程概述
这篇教程将带领完全没有电子硬件基础的读者,从零开始搭建一个完整的RFID感应电磁锁机关。当玩家将正确的RFID卡片放置在感应区域时,系统会验证卡片信息,验证通过后自动释放电磁锁实现开门效果。整个项目的物料成本约85元人民币,制作时间约2至3小时。
采购清单(BOM表)
以下是完成本项目所需的全部元器件清单。建议在同一家店铺购买以节省运费,大部分元器件在主流电子元件商城均有售。
- Arduino Uno R3 开发板 × 1(约25元)
- MFRC522 RFID读卡器模块 × 1(约8元)
- 13.56MHz RFID白卡 × 3(约3元)
- 5V单路继电器模块 × 1(约5元)
- 12V电磁锁(吸力型)× 1(约20元)
- 12V/2A直流电源适配器 × 1(约15元)
- 面包板 × 1(约5元)
- 杜邦线(公对母)× 若干(约4元)
- LED指示灯(红绿各一)× 2(约1元)
- 220Ω电阻 × 2(约0.5元)
接线步骤
第一步:连接RFID模块
MFRC522模块使用SPI协议与Arduino通信。将模块的SDA引脚连接到Arduino的数字引脚10,SCK连接到引脚13,MOSI连接到引脚11,MISO连接到引脚12,RST连接到引脚9,VCC连接3.3V电源(注意不是5V),GND连接地线。接线时务必确认电压正确,错误的电压可能损坏模块。
第二步:连接继电器与电磁锁
继电器模块的VCC连接Arduino的5V,GND连接地线,IN(信号输入)连接数字引脚7。继电器的常开触点(NO)连接12V电源的正极与电磁锁的正极,电磁锁的负极连接12V电源的负极。当Arduino给引脚7高电平信号时,继电器吸合,12V电路导通,电磁锁通电释放。
第三步:连接LED指示灯
绿色LED的正极通过220Ω电阻连接到数字引脚6,负极接地——用于指示验证通过。红色LED的正极通过220Ω电阻连接到数字引脚5,负极接地——用于指示验证失败。LED指示灯虽然不是必须的,但能极大提升机关的交互反馈感受。
代码烧录
首先需要在Arduino IDE中安装MFRC522库。打开Arduino IDE,进入「工具」→「管理库」,搜索「MFRC522」并安装。然后将以下代码复制到IDE中,通过USB线连接Arduino并上传。
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#define LOCK_PIN 7
#define GREEN_LED 6
#define RED_LED 5
MFRC522 rfid(SS_PIN, RST_PIN);
// 授权卡片的UID(需替换为你自己卡片的UID)
byte authorizedUID[] = {0xDE, 0xAD, 0xBE, 0xEF};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(LOCK_PIN, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
digitalWrite(LOCK_PIN, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, LOW);
Serial.println("=== RFID电磁锁机关系统启动 ===");
Serial.println("等待卡片靠近...");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
Serial.print("检测到卡片,UID: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
if (checkUID(rfid.uid.uidByte, rfid.uid.size)) {
Serial.println(">>> 验证通过!电磁锁释放5秒 <<<");
digitalWrite(GREEN_LED, HIGH);
digitalWrite(LOCK_PIN, HIGH);
delay(5000);
digitalWrite(LOCK_PIN, LOW);
digitalWrite(GREEN_LED, LOW);
} else {
Serial.println(">>> 验证失败!卡片未授权 <<<");
digitalWrite(RED_LED, HIGH);
delay(2000);
digitalWrite(RED_LED, LOW);
}
rfid.PICC_HaltA();
}
bool checkUID(byte *uid, byte size) {
if (size != sizeof(authorizedUID)) return false;
for (byte i = 0; i < size; i++) {
if (uid[i] != authorizedUID[i]) return false;
}
return true;
}
测试与调试
代码上传成功后,打开串口监视器(波特率9600)。将RFID卡片靠近读卡器,串口会显示卡片的UID。将显示的UID替换代码中authorizedUID数组的值,重新上传代码。再次刷卡测试,如果绿灯亮起且听到电磁锁释放的「咔哒」声,说明机关搭建成功。