🪪 کارتخوان RFID (RC522) (RC522 RFID Reader)
| اسم انگلیسی | RC522 RFID Reader |
|---|---|
| در ووکوی (Wokwi) | نسخهی آمادهای سراغ نداریم |
| دسته | 📦 ماژولها |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
کارتخوان RFID RC522 (RC522 RFID Reader) ماژولی با تراشهی MFRC522 است که کارتها و جاکلیدیهای ۱۳٫۵۶ مگاهرتزی را از فاصلهی چند سانتیمتری میخواند؛ یک کارت سفید و یک جاکلیدی معمولاً همراه خود ماژول است. هر کارت یک شناسهی یکتا به اسم UID دارد (اغلب ۴ بایت)؛ آردوینو آن را با فهرست کارتهای مجاز مقایسه میکند و تصمیم میگیرد. قفل در، حضور و غیاب، صندوق امانات و بازیهای کارتی پروژههای همیشگیاش هستند.
RC522 در ووکوی (Wokwi)
تا جایی که میدانیم ووکوی نسخهی آمادهی کارتخوان RC522 را ندارد. برای تست منطق قفل در ووکوی، «کارت» را با یک wokwi-pushbutton شبیهسازی کن: فشار دکمه یعنی «کارت مجاز نزدیک شد»، و بقیهی برنامه (LEDها، سروو، بازر) همان میماند. وقتی منطق درست شد، فقط تابع خواندن کارت را جایگزین میکنی.
خود RC522 در تینکرکد فارسی هست: در پنل «خواص» یکی از سه کارت مجازی را جلوی کارتخوان میگیری. باز کردن و خواندن مثالها رایگان است؛ این ماژول جزو ماژولهای حرفهای است و اجرایش اشتراک Plus میخواهد. پروژهی آماده: قفل در با کارت RFID.
سیمکشی با آردوینو
| پایهی RC522 | وصل به |
|---|---|
| SDA (همان SS در SPI) | پین 10 |
| SCK | پین 13 |
| MOSI | پین 11 |
| MISO | پین 12 |
| IRQ | آزاد |
| GND | GND |
| RST | پین 9 |
| 3.3V | پایهی 3.3V آردوینو (نه 5V) |
| LED سبز / قرمز | پین 5 / پین 6، هر کدام با ۲۲۰ اهم به GND |
در عمل بیشتر ماژولها با خطوط دادهی ۵ ولتی اونو کار میکنند، ولی برای پروژهای که قرار است ماهها روشن بماند، یک مبدل سطح منطقی روی خطوط SPI مطمئنتر است.
کد نمونه
// RC522: compare the card UID with one allowed card.
// Green LED on pin 5 = allowed, red LED on pin 6 = unknown card.
#include <SPI.h>
#include <MFRC522.h>
const int SS_PIN = 10;
const int RST_PIN = 9;
const int GREEN = 5;
const int RED = 6;
MFRC522 rfid(SS_PIN, RST_PIN);
byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF}; // replace with your card's UID
bool isAllowed() {
if (rfid.uid.size != 4) return false;
for (byte i = 0; i < 4; i++) {
if (rfid.uid.uidByte[i] != allowed[i]) return false;
}
return true;
}
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(GREEN, OUTPUT);
pinMode(RED, OUTPUT);
Serial.println("Hold a card near the reader");
}
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(" ");
if (rfid.uid.uidByte[i] < 0x10) Serial.print("0");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
int led = isAllowed() ? GREEN : RED;
digitalWrite(led, HIGH);
delay(1500);
digitalWrite(led, LOW);
rfid.PICC_HaltA(); // done with this card
rfid.PCD_StopCrypto1();
}
اول با همین برنامه UID کارت خودت را از سریال مانیتور بخوان (مثلاً 3A 7F 12 C4) و چهار بایتش را جای آرایهی allowed بگذار. کتابخانهی MFRC522 را از Library Manager نصب کن. فاصلهی خواندن معمولاً دو تا چهار سانتیمتر است و هر فلزی پشت آنتن، مثلاً قاب فلزی جعبه یا در آهنی، آن را کم میکند؛ ماژول را پشت پلاستیک یا چوب نازک نصب کن.
اشتباههای رایج
- تغذیهی ۵ ولت: RC522 ممکن است چند دقیقه کار کند و بعد خراب شود. فقط ۳٫۳ ولت.
- SDA را به A4 زدن: اسم SDA روی این ماژول یعنی SS در SPI، نه SDA در I2C. به پین 10 میرود.
- کارت ۱۲۵ کیلوهرتزی: RC522 آن را اصلاً نمیبیند؛ عیب از کد نیست.
- UID برای امنیت جدی: شناسهی کارتهای ارزان قابل کپی است؛ برای قفل اسباببازی خوب است، برای در خانه نه.
آموزشهای مرتبط
- قفل در با کارت RFID و سروو موتور
- ماژول کارت SD، همگذرگاه SPI
- کلید فشاری، جایگزین کارت در ووکوی
- درس کارت RFID و در هوشمند
سؤالهای رایج
ماژول RC522 را به ۵ ولت وصل کنم یا ۳٫۳ ولت؟
فقط ۳٫۳ ولت. تراشهی MFRC522 برای ۳٫۳ ولت ساخته شده و ۵ ولت روی پایهی تغذیه میتواند آن را خراب کند. پایهی 3.3V آردوینو اونو برای تغذیهی یک RC522 کافی است.
RC522 چه کارتهایی را میخواند؟
کارتها و تگهای ۱۳٫۵۶ مگاهرتزی مثل MIFARE Classic و MIFARE Ultralight. کارتهای ۱۲۵ کیلوهرتزی، مثل EM4100 که در بعضی ساختمانها هست، را نمیخواند.
ووکوی ماژول RFID دارد؟
تا جایی که میدانیم نه. منطق قفل را میتوانی در ووکوی با یک دکمه بهجای کارت تست کنی و خود RC522 را در تینکرکد فارسی، با اشتراک Plus، با کارتهای مجازی امتحان کنی.