RFID Systém s LCD displejem, bzučákem a servomotorem

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

 

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 8        // Pin pro bzučák
#define SS_PIN A3           // Pin pro slave select (SS)
#define RST_PIN 9           // Pin pro reset (RST)
#define SERVO_PIN 10        // 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ů.

 

Další podobné články

Test ESC a BLDC motoru

Cílem tohoto Arduino projektu je testování a kalibrace obousměrného regulátoru otáček (ESC) pomocí PWM signálu. Program simuluje sekvenci pohybů: dopředu, neutrální pozici a reverzní chod, což umožňuje ověřit správnou funkci ESC včetně přepínání směru otáčení motoru.

Laserový alarm

Cílem tohoto projektu je vytvořit jednoduchý, ale funkční bezpečnostní systém, který detekuje narušení prostoru pomocí vysílače (laserového paprsku) a přijímače (fotorezistoru). Jakmile je paprsek přerušen, Arduino to vyhodnotí jako narušení a spustí alarm – například zvukový signál pomocí piezo bzučáku.