🚪 درس 79: کارت RFID و در هوشمند
مثل در مدرسه و هتل: کارت درست را نزدیک کن تا در باز شود.
سطح: پیشرفته · زمان: حدود 22 دقیقه · مفاهیم: RFID، SPI، سروو
قدمهای این درس
- کارت RFID چطور کار میکند؟
- قدم ۱ — خواننده، سروو، بازر
- قدم ۲ — خواندن و مقایسهی UID
- اشتباه رایج: 5 ولت و UID اشتباه
- چالش: دو کارت مجاز
نمونهای از کد این درس
// Smart door: the white card opens the servo "door", others get an error beep.
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
MFRC522 rfid(10, 9); // SDA(SS) pin, RST pin
Servo door;
const int BUZZER = 8;
byte allowed[4] = {0xD3, 0x4A, 0x1F, 0x9B}; // UID of the white card
void beep(int times, int ms) {
for (int i = 0; i < times; i++) {
digitalWrite(BUZZER, HIGH); delay(ms);
digitalWrite(BUZZER, LOW); delay(ms);
}
}
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
door.attach(6);
door.write(0); // closed
pinMode(BUZZER, OUTPUT);
Serial.println("Tap a card...");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent()) return; // no new card
if (!rfid.PICC_ReadCardSerial()) return; // could not read it
bool ok = true;
Serial.print("UID:");
for (int i = 0; i < 4; i++) {
Serial.print(" ");
Serial.print(rfid.uid.uidByte[i], HEX);
if (rfid.uid.uidByte[i] != allowed[i]) ok = false;
}
Serial.println();
if (ok) {
Serial.println("Welcome! Door open.");
beep(1, 100);
door.write(90); // open
delay(3000);
door.write(0); // close again
} else {
Serial.println("Access denied!");
beep(3, 80);
}
rfid.PICC_HaltA();
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓