刷卡开门的原理
RFID门禁的原理其实不复杂:RC522读卡器通过SPI接口和Arduino通信,当有13.56MHz的RFID卡靠近天线时,读卡器读取卡片的唯一ID(UID),然后和Arduino里存的授权卡号列表做比对。匹配上了就驱动继电器开锁,匹配不上就蜂鸣器报警。整个过程不到1秒。
RC522的SPI接线
RC522有8个引脚,常用6个:VCC接3.3V(千万不要接5V,会烧模块),GND接GND,RST接D9,SS/SDA接D10,MOSI接D11,MISO接D12,SCK接D13。IRQ引脚中断用,基础项目不用接。特别注意RC522的逻辑电平是3.3V,如果你的Arduino是5V的(UNO/Nano),在D10、D11、D12、D13这四根线上最好加电平转换,或者至少串1k电阻分压,不然长期运行可能损坏RC522。
读取卡片UID
安装MFRC522库之后,在示例里找到DumpInfo,上传代码,打开串口监视器。拿一张RFID卡靠近读卡器,串口会打印出卡片的全部信息,其中高亮显示的4字节就是UID。把这4个字节记下来,填进你的门禁代码里的授权卡号数组里。每张卡的UID是出厂唯一的,理论上不会重复。
EEPROM存储授权卡号
直接把授权卡号写在代码里不太方便,改卡号要重新烧录。更好的做法是用Arduino的EEPROM来存储授权卡号列表。EEPROM是非易失性存储,断电不丢失,写入寿命10万次。设计一个简单的数据结构:第一个字节存卡号数量,后面每4个字节存一张卡的UID。增加一张授权卡就是往EEPROM末尾追加4字节,删除就是把后面的数据往前移。这样即使断电,授权列表也不会丢。
继电器驱动电磁锁
Arduino的数字引脚不能直接驱动电磁锁,需要通过继电器模块。继电器模块的IN引脚接Arduino的一个数字引脚(比如D7),VCC接5V,GND接GND。电磁锁接继电器的常开触点。匹配成功时,digitalWrite(D7, LOW)触发继电器闭合,电磁锁通电开门,延时2-3秒后digitalWrite(D7, HIGH)断开。注意如果用电磁锁的话,继电器另一侧需要单独供电(通常12V),不要和Arduino共用一个5V电源。










门禁做好之后加了个蜂鸣器反馈,体验好很多
电磁锁记得要单独供电,别和Arduino抢5V
EEPROM存卡号这个方案比硬编码灵活多了
MFRC522库的DumpInfo示例确实好用,直接就能看到UID
RC522接5V真的烧过一块,血泪教训