RFID

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í.

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):

 RFID

Knihovny:

  1. Otevři Arduino IDE
    • Spusť Arduino IDE na svém počítači.
  2. Otevři Správce knihoven
    • Klikni na Nástroje -> Správce knihoven
    • Nebo použij klávesovou zkratku Ctrl + Shift + I.
  3. 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").

RFIDRFID

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ů.

 

FB tw

Další podobné články