Lekce 33 – Arduino a modul čtečky RFID 125kHz

Dnes jsem si vyhledal pro dnešní článek modul čtečky RFID čipů. Nejdříve si ale řekneme něco o vlastní technologii, vlastnostech a modifikací technologie RFID identifikace.

    Za vznikem technologie RFID (Radio Frequency Identification) čipů v minulosti stála firma WalMart, která se taktéž zasadila o vznik čárového kódu. Oni potřebovali, ale takovou technologii, která by umožnila získat data o něčem bez přímé viditelnosti a i o více objektech najednou. Tato oblast se velice v dnešní době rozvíjí  a její uplatnění lze najít v logistice, dopravě, identifikace osob a neposlední řadě ač jde o jinou technologii (princip bude stejný) tak použití NFC tagu v mobilních telefonech.

Jek to funguje? Budeme se bavit o technologii RDIF, které nepotřebuje k identifikaci vlastní napájení. Tato se nazývá RTF (reader talk first). K identifikaci se používá tzv. pasivních čipů, které berou energii ze čtecího zařízení pomocí elektromagnetické indukce.

    Jak tedy celá věc funguje. Modul čtecího zařízení, je připojen k anténě, která má zpravidla tvar cívky. Tato neustále do okolí indukuje elektromagnetické vlnění. Když se k cívce přiblíží nějaký RDIF tag (může mít podobu klíčenky, nálepky, přívěšku, nebo náramku), kdy tento má v sobě také zabudovanou anténu, tak vlivem elektromagnetické indukce se začne napájet elektronický čip, který odešle zpět do antény přijímacího modulu informaci o sobě, kdy tyto data modul zpracuje.

Já jsem si vybral pro ukázku modul, který pracuje na frekvenci 125kHz. Jsou i jiné systémy, které pracují na frekvencích třeba 13,56 MHz. Na této frekvenci  vychází moduly a tak i hlavně RFID tagy (identifikátory) nejlevněji. Pod ruku mi přišel modul čtečky tagů s označením RMD6300, který se jednoduše připojí na Arduino přes sériový port.

     Tento modul je již dodávaný s anténou ve tvaru cívky a po zakoupení nebo sehnání nějakých RFID identifikátorů, můžeme s tímto začít experimentovat. Jednotlivé rozložení pinů na modulu je na obrázku níže:

   Na samotné zapojení s Arduinem nám postačí 3 vodiče. Napájení je jasné, můžeme si vybrat za budeme napájet modul přes P1 na pin4 a pin5 nebo přes P3 na pin2 a pin 3. Další vodič a to poslední povede v modulu z TX (P1 pin1) do Arduina na digitální pin1. ASle je to jedno v programu si to můžeme potom lehce změnit. Nebudeme používat na Arduinu již hotový sériový port, ale pomocí knihovny  ho uděláme kde chceme (to pro případ, že k programovaní Arduina používáme digitální pin 1 a 2 – tak aby nám to nedělalo problém při přehrávání programu).

Do Arduina si nahrajeme následující program:

Po nahrání programu do Arduina si zapneme SerialMonitor a zkusíme si přiložit k anténě nějaký tag. Na SerialMonitoru by jste měli vidět, jak vám přišli nějaká čísla. Mělo by jich být celkem 14. Vysvětlíme si co jednotlivá čísla znamenají.

1) Startovací byte (vždy číslo 2)

2 – 12) číslo tagu

13) kontrolní součet

14) konečný byte

Takže, můj testovací tag vrátil tyto hodnoty:

 2 48 57 48 48 53 67 54 68 66 66 56 51 3

My si teď program trosku upravíme. Načteme všechny data do pole čísel, ale poté budeme zpracovávat jenom ty červené hodnoty. Tyto nám modul vrací v ASCI kódu takže je převedeme na znaky. Tyto si poté pošleme na SerialMonitor ….. a jaký bude výsledek? Dostaneme číslo ID tagu nebo čipu, ale v hexadecimální soustavě. Převod do desítkové by byl programově náročný a hlavně 10 místné číslo, by jsme neuložili ani do proměnné long. Ale každý si může vyzkoušet, pokud má číslo čipu vytištěno jako já, převod na kalkulačce ve Windows po přepnutí na programátorskou.

Kód se moc nezměnil:

Výstup na SerialMonitoru bude vypadat asi takto:

   Tak identifikaci čipu jsme zvládli a teď si vyrobíme jednoduchý přístupový systém, který bude ovládat např. elektro-zámek ke dveřím. Na pin 8 jsem si zapojil piezo bzučák a na pin 9 jsem připojil modul elektrického relé. Pozor u mého relé je k sepnutí zapotřebí hodnota LOW, takže je při inicializaci nastaven na HIGH. Jinak se zapojení nezměnilo a do Arduina si nahrajeme následující program. Je dosti okomentován, takže si myslím, že nebude zapotřebí dalšího vysvětlování.

Vlastní povolené čipy, které budou umožňovat přístup si můžete dopsat sami i ve větším množství, jen nezapomeňte rozšířit délku pole, kde jsou hodnoty čipu uloženy.

 

 

 

2 Komentářů

  1. surac

    Zdravím, mám stejnou konfiguraci, ale při načtení čip mě to vrací stále na DobreID i když vezmu jakýkoliv čip, který není zapsaný v programu. Nevíte kde by mohla být chyba?

  2. surac

    tak jsem to vyřešil, upravil jsem funkci Kontrola na:

    int Kontrola() {
    int i;

    for (i = 0; i <= ((sizeof(idOK) / sizeof(String)) – 1); i = i + 1)
    {
    if (idOK[i] == idTest)
    {
    return 1;
    }
    }
    return 0;
    }

Napsat komentář

Translate »