RFID čtečka je vstupní modul pro Arduino. Tato čtečka s názvem RDM6300 pracuje na frekvenci 125kHz a komunikuje se všemi tagy, které jsou kompatibilní s rozšířeným čipem EM4100. RFID bezdrátová komunikace se totiž rozděluje dle použité frekvence na více kategorií, kdy pro frekvence 13.56 MHz vyšel již dříve tento návod.
Čtečka RDM6300 komunikuje pomocí sériového rozhraní s rychlostí 9600 baudů a pro její napájení je nutné použít napětí ve velikosti 5 Voltů. Proudový odběr se pak při čtení dostane maximálně na 50 mA.

RFID čtečka RDM6300 125kHz

Pro úspěšné propojení RFID modulu s Arduinem stačí zapojit celkem tři vodiče. Propojíme dle schématu na konektoru 1. pin s 5V Arduina, 2. pin se zemí Arduina a 5. pin s pinem D2.
Pro datový pin lze využít také ostatní digitální piny, ale tuto volbu je nutné provést na začátku programu. Některé desky ale mají omezenou funkci pouze na některé piny, viz reference knihovny SoftwareSerial.

RFID čtečka RDM6300 125kHz schéma

Ukázkový program obsahuje na svém začátku nastavení čísla propojovacího pinu pro datový pin čtečky a připojení potřebné knihovny SoftwareSerial s vytvořením objektu RFID z této knihovny. Pro práci s tagy si také vytvoříme dvě proměnné typu pole znaků, kdy do prvního pole budeme ukládat všechny znaky načtené z tagu a v druhém poli si můžeme uložit známý tag pro porovnávání.
Podprogram setup obsahuje pouze dva kroky, kterými je zahájení komunikace s RFID čtečkou pomocí softwarové sériové linky a poté zahájení komunikace s počítačem.
V nekonečné smyčce loop si můžeme všimnout, že veškerá funkcionalita je schována v jedné velké if podmínce. Pro splnění této podmínky kontrolujeme, jestli jsou dostupné znaky na rozhraní s RFID čtečkou. A pokud je podmínka splněna, načteme si do připravené proměnné postupně všech 14 znaků, které nám poskytuje čtečka. Po úspěšném načtení se přesuneme na výpis dat po sériové lince, kdy si můžete všimnout, že budeme tisknout pouze znaky na pozici 1-10 (tedy druhý až jedenáctý). Právě na těchto znacích se totiž nachází ID hodnota našeho tagu. Zbytek znaků by se dal použít na důkladnou kontrolu karty (první 2 znaky jsou vždy stejné, zbytek znaků na konci obsahuje kontrolní součet a ukončovací znaky), ale pro zjednodušení s nimi v této ukázce nepracujeme.
Po vytištění ID si pak ještě můžeme zkontrolovat, jestli se přečtený tag shoduje s uloženým tagem v programu. Pro tyto účely je vždy vytvořena jednobitová proměnná se jménem neshoda. Poté ve for smyčce zkontrolujeme postupně všechny znaky na místech, kde je uloženo ID, přičemž vždy kontrolujeme pomocí if podmínky, jestli se znaky shodují. A pokud se objeví alespoň jedno neshodné místo, nastavíme si proměnnou na jedničku. Po ukončení kontroly pak už jen zkontrolujeme stav kontrolní proměnné a v případě shody či neshody vypíšeme příslušnou informaci do počítače. Po tomto čtení následuje volitelná pauza po dobu dvou sekund. A poté si ještě můžete všimnout druhé kratší pauzy, která je umístěna na konci smyčky loop před novým během smyčky.

// RFID 125kHz čtečka RDM6300

// nastavení propojovacích pinů Bluetooth a LED diody
#define RX 2
// připojení knihovny SoftwareSerial
#include <SoftwareSerial.h>
// inicializace RFID z knihovny SoftwareSerial
SoftwareSerial RFID(RX, 0);
// proměnná pro uložení ID načteného a uloženého tagu
char prijateID[14];
char ulozeneID[10] = {'1', '2', '3', '0', '4', '0', '2', '8', '1', '5'};

void setup() {
  // zahájení komunikace s RFID modulem skrze
  // Softwarovou sériovou linku rychlostí 9600 baud
  RFID.begin(9600);
  // komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
}

void loop() {
  // kontrola RFID komunikace, pokud je dostupná nová
  // zpráva, tak nám tato funkce vrátí počet jejích znaků
  if (RFID.available() > 0) {
    // RFID tag je složen ze 14 znaků,
    // takže provedeme 14x čtení
    for (int i = 0; i < 14; i++) {
      // načti znak do pole na pozici i
      prijateID[i] = RFID.read();
    }
    // vytištění ID po sériové lince
    Serial.print("Nactene ID: ");
    // ID je uloženo na znacích 2-11,
    // proto vytiskneme pouze tyto pozice
    for (int i = 1; i < 11; i++) {
      Serial.print(prijateID[i]);
      Serial.print(" ");
    }
    // proměnná pro uložení informace o neshodě
    bool neshoda = 0;
    // ve smyčce zkontrolujeme všechny datové pozice
    for (int i = 1; i < 11; i++) {
      // pokud se některá z pozic neshoduje,
      // nastavíme stavovou proměnnou neshody
      if (prijateID[i] != ulozeneID[i - 1]) {
        neshoda = 1;
      }
    }
    // vypíšeme informaci, pokud se objevila neshoda nebo ne
    if (neshoda == 1) {
      Serial.println("| Ulozeny tag se NEshoduje!");
    }
    else {
      Serial.println("| Ulozeny tag se shoduje!");
    }
    // pauza po úspěšném čtení
    delay(2000);
  }
  // pauza před novým během smyčky
  delay(500);
}

Po nahrání programu do Arduino desky s připojenou RFID čtečkou RDM6300 dostaneme například tento výsledek, kdy jsem zkusil čtečkou načíst nejprve uloženou kartu a poté kartu s jiným ID.

Nactene ID: 1 2 3 0 4 0 2 8 1 5 | Ulozeny tag se shoduje!
Nactene ID: 1 6 0 0 5 4 3 2 1 0 | Ulozeny tag se NEshoduje!

RFID čtečka RDM6300 je šikovný modul, který nám umožňuje společně s Arduinem pracovat s RFID tagy, které pracují na frekvenci 125 kHz. Tyto tagy se prodávají ve formě různých plastových karet, kulatých přívěsků či samolepek a používají se často v různých přístupových systémech pro kanceláře či budovy. Tato čtečka dokáže detekovat a číst tagy ve vzdálenosti 2-5 cm, přičemž tato vzdálenost je závislá jak na velikosti antény u čtečky, tak i velikosti a vlastnostem antény v tagu. Lze ji použít v různých projektech jako například Arduino přístupový systém, trezor a další. Obecnou výhodou RFID systémů je pak rozhodně to, že můžete mít jeden RFID tag na přístup do práce, ale zároveň ho použít i v dalších systémech, které si s touto čtečkou můžete vyrobit.

 

Seznam použitých komponent:
http://dratek.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html
https://dratek.cz/arduino/1297-rfid-ctecka-125k-em4100-modul-rdm6300-uart-vystup-1462952410.html

FB tw

Další podobné články