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

ROBOTICKÉ RAMENO

Stavebnice obsahuje všechny potřebné díly na sestavení robotnického ramene včetně spojovacího materiálu, pouze je nutné dokoupit čtyři kusy MIKRO SERV SG90. Dále je nutné dokoupit řídící jednotku já jsem použil domácí zásoby ARDUINO NANO a pro něho pak modul ARDUINO NANO IO SHIELD pro jednoduchost zapojení. Díly pro sestavení ramene jdou dobře tzv. vylamovat „vypadávají skoro sami. K servům pokud použijete nové tak doporučuji je před montáží odzkoušet zda jsou funkční v plném rozsahu tj. od 0° do 180°, po namontování a zjištění že servo nefunguje to pak opravdu dost zahýbá s nervy. 

Electronic TiltMaze

Cílem tohoto projektu je vytvoření jednoduchého ovládacího systému, který umožňuje naklápění dvou servomotorů pomocí analogového joysticku. Platforma řízená servomotory může simulovat pohyb například v ose X a Y — tedy naklánění doleva/doprava a dopředu/dozadu. Tento systém může sloužit jako základ pro různé aplikace:

- Manuální ovládání kamery nebo senzoru (např. na pohyblivé konstrukci nebo robotovi)
- Interaktivní ovládací panel pro školní projekty nebo herní ovladač