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:
kopírovat do schránky#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ů.