Tento projekt ukazuje, jak vytvořit jednoduchý přístupový systém pomocí RFID čtečky, LCD displeje, bzučáku a servomotoru. Systém umožňuje kontrolu přístupu pomocí RFID tagů – při správném tagu se servo otočí, zobrazí se zpráva, a systém se resetuje. Při špatném tagu bzučák vydá zvuk a zobrazí se zamítnutí přístupu.
Jak to funguje?
- Naskenování RFID tagu
RFID čtečka detekuje blízký tag a přečte jeho unikátní ID (UID). Tento UID se porovnává s předem uloženým správným UID v kódu. - Vyhodnocení tagu
- Pokud UID odpovídá správnému tagu:
- Na LCD se zobrazí "Přístup povolen".
- Servo motor se otočí na 25°.
- Po 10 sekundách se Arduino resetuje.
- Pokud UID neodpovídá:
- Na LCD se zobrazí "Přístup zamítnut".
- Bzučák vydá zvuk.
- Po 3 sekundách se systém resetuje.
- LCD displej
LCD displej informuje o aktuálním stavu systému, například výzvu "Naskenuj RFID", nebo zobrazuje UID tagu. - Bzučák
Při chybném tagu zazní tři pípnutí.
- Pokud UID odpovídá správnému tagu:
Co potřebuji?
- Arduino Uno R3 (může být i klon)
- RFID modul RC522
- Servomotor (SG90)
- Bzučák (Může být aktivní i pasivní)
- RFID Karta / tag
- I2C LCD displej (16x2)
- Dráty
Zapojení: (schéma):
Knihovny:
- Otevři Arduino IDE
- Spusť Arduino IDE na svém počítači.
- Otevři Správce knihoven
- Klikni na Nástroje -> Správce knihoven
- Nebo použij klávesovou zkratku Ctrl + Shift + I.
- Vyhledej požadovanou knihovnu
- Do pole napiš název knihovny.
Pro RFID-RC522:
- Do pole napiš MFRC522.
- Ve výsledcích vyber knihovnu MFRC522.
- A stáhni.
Pro I2C LCD displej:
- Do pole napiš LiquidCrystal_I2C.
- Ve výsledcích vyber knihovnu LiquidCrystal_I2C.
- A stáhni.
Kód pro Arduino:
#include <Wire.h> // Knihovna pro I2C komunikaci #include <LiquidCrystal_I2C.h> // Knihovna pro I2C displej #include <SPI.h> // Knihovna pro SPI komunikaci #include <MFRC522.h> // Knihovna pro RFID čtečku MFRC522 #include <Servo.h> // Knihovna pro Servo motor #define BUZZER_PIN 4 // Pin pro bzučák #define SS_PIN 10 // Pin pro slave select (SS) #define RST_PIN 9 // Pin pro reset (RST) #define SERVO_PIN 6 // Pin pro Servo LiquidCrystal_I2C lcd(0x27, 16, 2); MFRC522 rfid(SS_PIN, RST_PIN); Servo myServo; byte correctUID[] = {0xC3, 0xDB, 0x3B, 0x14}; void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); SPI.begin(); rfid.PCD_Init(); pinMode(BUZZER_PIN, OUTPUT); myServo.attach(SERVO_PIN); lcd.setCursor(0, 0); lcd.print("Naskenuj RFID"); } void loop() { if (rfid.PICC_IsNewCardPresent() & rfid.PICC_ReadCardSerial()) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("UID: "); byte uid[rfid.uid.size]; for (byte i = 0; i < rfid.uid.size; i++) { uid[i] = rfid.uid.uidByte[i]; lcd.print(uid[i], HEX); lcd.print(" "); } if (jeSpravnyTag(uid)) { lcd.clear(); lcd.print("Pristup povolen"); digitalWrite(BUZZER_PIN, HIGH); delay(100); digitalWrite(BUZZER_PIN, LOW); myServo.write(25); delay(10000); asm volatile ("jmp 0"); } else { lcd.clear(); lcd.print("Pristup zamitnut"); zapipBuzzerChyba(); delay(3000); asm volatile ("jmp 0"); } rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } } bool jeSpravnyTag(byte* uid) { for (byte i = 0; i < 4; i++) { if (uid[i] != correctUID[i]) { return false; } } return true; } void zapipBuzzerChyba() { for (int i = 0; i < 3; i++) { digitalWrite(BUZZER_PIN, HIGH); delay(200); digitalWrite(BUZZER_PIN, LOW); delay(200); } }
Vysvětlení kódu:
- Čtení RFID tagu
Funkce rfid.PICC_IsNewCardPresent() detekuje nový RFID tag a rfid.PICC_ReadCardSerial() načte jeho UID. - Porovnání UID
Funkce jeSpravnyTag kontroluje, zda načtený UID odpovídá uloženému správnému UID (correctUID). - Výstup na LCD displej
- Správný tag: Zobrazení "Přístup povolen" a otočení serva.
- Špatný tag: Zobrazení "Přístup zamítnut" a pípání bzučáku.
- Servo
Servo se po správném tagu otočí na 90°, což lze využít například k odemčení dveří. - Reset systému
Po 10 sekundách u správného tagu, nebo po 3 sekundách u špatného tagu, se Arduino resetuje pomocí instrukce asm volatile ("jmp 0").
Změna uloženého RFID tagu:
- Připoj Arduino k počítači a otevři Serial Monitor.
- Načti nový RFID tag. V konzoli Serial Monitoru se zobrazí UID tagu ve formátu hexadecimálních hodnot (například C3 DB 3B 14).
Uprav kód
V kódu najdi tuto část:
byte correctUID[] = {0xC3, 0xDB, 0x3B, 0x14};
Nahraď hodnoty UID hodnotami nového tagu.
Například:
byte correctUID[] = {0xA1, 0xB2, 0xC3, 0xD4};
Tím bude nový tag uložen jako správný.
Změna stupně serva
- Najdi část kódu pro servo
V kódu najdi řádek:
myServo.write(90);
Číslo 90 odpovídá pozici serva ve stupních (střední pozice).
Změn toto číslo pro stupně serva.
Využití v praxi:
- Zabezpečení dveří: Ovládání elektromagnetického zámku pomocí servomotoru.
- Kontrolu přístupu: Přístup do omezených prostor pouze pro autorizované osoby.
- Průmyslové aplikace: Ovládání zařízení pomocí RFID tagů.