🔐 قفل در با کارت RFID (MFRC522) و سروو موتور در آردوینو
کارت مترو، کارت ورود ساختمان و کلید کارتی هتل همه با یک فناوری کار میکنند: RFID. در این پروژه با ماژول ارزان RC522، آردوینو و یک سروو موتور یک قفل در میسازیم: کارت مجاز را که نزدیک کنی، چراغ سبز روشن میشود و سروو چفت در را باز میکند؛ کارت ناشناس بوق قرمز میگیرد. اگر این پروژه را در wokwi یا ویدیوهای خارجی دیدهای، اینجا نسخهی کامل فارسیاش را داری.
RFID چطور کار میکند؟
ماژول RC522 یک میدان رادیویی ضعیف ۱۳٫۵۶ مگاهرتزی میسازد. داخل کارت یا جاکلیدی یک سیمپیچ و یک چیپ کوچک است که باتری ندارد؛ برقش را از همین میدان میگیرد و شمارهی منحصربهفردش، یعنی UID، را برمیگرداند. ما فقط این شماره را با شمارهی کارت مجاز مقایسه میکنیم.
قطعهها
- آردوینو Uno
- ماژول RFID RC522 با کارت و جاکلیدی
- سروو موتور
- یک LED سبز و یک LED قرمز با دو مقاومت ۲۲۰ اهم
- یک بازر
سیمکشی
| قطعه | پایه | آردوینو Uno |
|---|---|---|
| RC522 | SDA (SS) | 10 |
| RC522 | SCK | 13 |
| RC522 | MOSI | 11 |
| RC522 | MISO | 12 |
| RC522 | RST | 9 |
| RC522 | 3.3V | 3.3V (نه 5V!) |
| RC522 | GND | GND |
| سروو | سیگنال | 6 |
| بازر | + | 5 |
| LED سبز / قرمز | آند از راه مقاومت | 7 / 8 |
کد کامل
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define SERVO_PIN 6
#define BUZZER_PIN 5
#define GREEN_LED 7
#define RED_LED 8
MFRC522 rfid(SS_PIN, RST_PIN);
Servo lockServo;
byte allowedUID[4] = {0xDE, 0xAD, 0xBE, 0xEF}; // UID کارت خودت را اینجا بنویس
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
lockServo.attach(SERVO_PIN);
lockServo.write(0); // قفل بسته
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
Serial.println("Card ro nazdik kon...");
}
bool isAllowed() {
if (rfid.uid.size != 4) return false;
for (byte i = 0; i < 4; i++) {
if (rfid.uid.uidByte[i] != allowedUID[i]) return false;
}
return true;
}
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] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
if (isAllowed()) {
Serial.println("Access granted");
digitalWrite(GREEN_LED, HIGH);
tone(BUZZER_PIN, 1500, 150);
lockServo.write(90); // باز
delay(3000);
lockServo.write(0); // دوباره بسته
digitalWrite(GREEN_LED, LOW);
} else {
Serial.println("Access denied");
digitalWrite(RED_LED, HIGH);
tone(BUZZER_PIN, 300, 600);
delay(1000);
digitalWrite(RED_LED, LOW);
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
توضیح بخشهای مهم
- SPI: RC522 با پروتکل SPI حرف میزند که چهار سیم دارد. روی Uno پایههای 11، 12 و 13 ثابتاند؛ فقط SS و RST را خودت انتخاب میکنی.
rfid.PCD_Init(): ماژول را راه میاندازد. حتماً بعد ازSPI.begin().PICC_IsNewCardPresent()وPICC_ReadCardSerial(): اولی میپرسد «کارتی نزدیک است؟» و دومی شمارهاش را میخواند. اگر هر کدامfalseبدهد، باreturnاز این دورloopبیرون میرویم.rfid.uid.uidByte: آرایهای از بایتهای UID. کارتهای معمولی ۴ بایت دارند.- چاپ با HEX: UID را به شکل مبنای ۱۶ چاپ میکنیم. اگر بایت کمتر از 0x10 باشد، یک صفر جلویش میگذاریم تا «0A» بهجای «A» چاپ شود.
isAllowed(): بایتبهبایت مقایسه میکند. با اولین بایت نابرابر،false.PICC_HaltA(): به کارت میگوید «کارت تمام شد»، تا با نگه داشتن کارت جلوی ماژول در هر دور دوباره خوانده نشود.
allowedUID بنویس.اجرا در شبیهساز
در تینکرکد فارسی مثال آمادهی قفل در با کارت RFID و نسخهی درسیاش در هوشمند با RFID را میتوانی باز کنی. درس قدمبهقدمش درس ۷۹: کارت RFID و در هوشمند است. ماژول RFID RC522 جزو ماژولهای حرفهای اشتراک پلاس است؛ مثال برای خواندن رایگان باز میشود و برای اجرا پلاس لازم داری. سروو، LED و بازر بهتنهایی رایگاناند.
اشکالهای رایج
- هیچ کارتی خوانده نمیشود: سیمهای SPI را یکییکی چک کن؛ جابهجا زدن MISO و MOSI رایجترین اشتباه است.
- ماژول داغ میشود یا کار نمیکند: RC522 را به ۵ ولت وصل کردهای. این ماژول ۳٫۳ ولتی است.
- کارت درست، Access denied میگیرد: UID را اشتباه کپی کردهای. به ترتیب بایتها و پیشوند 0x دقت کن.
- سروو هنگام خواندن کارت میلرزد یا آردوینو ریست میشود: سروو جریان زیادی میکشد؛ آن را از منبع جدا تغذیه کن و GNDها را یکی کن.
- کارت با نگه داشتن چند بار پشت سر هم خوانده میشود:
PICC_HaltA()را جا انداختهای.
اگر با سروو آشنا نیستی، اول سروو موتور با آردوینو را بخوان. برای افزودن کتابخانهی MFRC522 به پروژهها صفحهی کتابخانهها و برای همهی پروژهها صفحهی شبیهساز آردوینو را ببین.
قفل RFID را در شبیهساز باز کن 🔐