RFID con RC522: identificazione a radiofrequenza con Arduino

Conosciamo e impariamo a utilizzare una scheda per l’identificazione di tag a RF, facilmente abbinabile ad Arduino.

Abbiamo più volte trattato il tema dell’identificazione a radiofrequenza, meglio nota come RFID; ad esempio nel fascicolo n° 254 le abbiamo dedicato un approfondimento attraverso una doviziosa introduzione teorica e alcuni esempi di utilizzo basati sul modulo RFID PN522, accompagnato dall’immancabile scheda Arduino. In questo articolo riprendiamo il discorso sperimentando un altro modulo, l’RFID-RC522 basato sull’omonimo chip MFRC522 prodotto dalla NXP (il datasheet è reperibile al link web https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf).

Il modulo RFID-RC522

L’MFRC522 è un lettore/scrittore RFID altamente integrato per comunicazioni senza contatto a 13,56 MHz, che supporta gli standard ISO/IEC14443A/MIFARE e NTAG.

Il trasmettitore interno all’MFRC522 è in grado di pilotare un’antenna progettata per comunicare con schede e transponder senza circuiti attivi aggiuntivi. Il ricevitore interno riesce in modo efficiente a demodulare e decodificare segnali provenienti da schede e transponder compatibili con gli standard suelencati.

L’MFRC522 supporta i modelli MF1xxS20, MF1xxS70 e MF1xxS50. Supporta inoltre la comunicazione senza contatto, con velocità di trasferimento MIFARE fino a 848 kB (kiloBaud) in modalità bidirezionale.

L’MFRC522 è compatibile con tutte le varianti dei protocolli di identificazione MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 e MIFARE Plus RF, raggruppati sotto il termine generico di MIFARE.

Qui di seguito riepiloghiamo le caratteristiche tecniche principali del modulo:

  • circuito analogico per demodulare e decodificare le risposte;
  • driver bufferizzati per il collegamento di un’antenna con un numero ridotto di componenti esterni;
  • supporta ISO/IEC 14443 A/MIFARE e NTAG;
  • distanza operativa tipica in modalità di lettura/scrittura fino a 50 mm a seconda delle dimensioni dell’antenna e della sintonizzazione;
  • supporta la crittografia MF1xxS20, MF1xxS70 e MF1xxS50 in modalità di lettura / scrittura;
  • supporta ISO/IEC 14443 con comunicazione a velocità di trasferimento elevata fino a 848 kbaud;
  • supporta MFIN/MFOUT;
  • alimentazione interna aggiuntiva all’IC della smart card collegata tramite MFIN/MFOUT
  • interfacce host supportate: SPI fino a 10 Mbit/s., I²C-Bus fino a 400 kBd in modalità Fast, fino a 3400 kBd in modalità High-speed, UART seriale RS232 fino a 1.228,8 kB/s, con livelli di tensione dipendenti dalla tensione di alimentazione dei pin;
  • il buffer FIFO gestisce l’invio e la ricezione a 64 byte;
  • modalità interrupt flessibili;
  • hard reset con funzione di bassa potenza;
  • spegnimento da software;
  • timer programmabile;
  • tensione di alimentazione da 2,5 a 3,3 V;
  • Pin I/O programmabili.

Il modulo RFID-RC522 è dettagliato in Fig. 1, dove potete vedere tutte le connessioni disponibili.

Fig. 1 Il modulo RFID-RC522

Collegamento con Arduino

Poiché al momento tutte le librerie in circolazione per l’utilizzo del modulo con Arduino riutilizzano la connessione SPI, ci concentreremo solo su di essa, la Fig. 2 illustra appunto il collegamento da effettuare per le successive prove con Arduino UNO.

Fig.2 Collegamenti RC522_ISP

Nella Tabella 1 descriviamo analiticamente i collegamenti con i relativi segnali: a sinistra quelli di Arduino UNO e a destra i contatti del modulo RFID-RC522 con i colori dei fili corrispondenti nello schema della Fig. 2. Il pin IRQ del modulo RFID va lasciato scollegato perché in questo progetto non lo gestiamo e non ci occorre.

Tabella. 1 Connessioni fra il modulo RFID-RC522 e Arduino

Naturalmente occorre fare molta attenzione, perché l’inversione di due soli cavetti tra loro comporterà il mancato funzionamento del modulo; altra cosa importante è l’alimentazione, il modulo richiede 3,3 V, il corrispondente pin su Arduino si trova proprio accanto a quello dei 5 V, una distrazione comporterebbe quasi certamente il guasto del modulo.

La scheda (il modulo RFID utilizzato nel progetto) è reperibile sul sito www.futurashop.it (2846-VMA405N) e viene fornita con due file strip da 8 pin (una dritta e l’altra a 90°) da saldare a scelta negli appositi fori dei segnali, un Tag Card RFID ed un Tag portachiavi RFID per poter fare le prime prove.

Le librerie per RC522

L’uso di questo modulo è facilitato dalla disponibilità di specifiche librerie, delle quali ne abbiamo selezionate due: quella della Velleman e quella scritta da Miguel Balboa.

Velleman: è una libreria minimal costituita da due soli file (RFID.h e RFID.cpp), una volta scaricata dal link: https://www.velleman.eu/downloads/29/vma405_library.zip occorre includerla aprendo un nuovo sketch con una versione aggiornata dell’IDE (nel nostro caso 1.8.12). Eseguire il comando Sketch – #include libreria – Aggiungi libreria da file .ZIP… e selezionare il file .zip (Fig. 3), quindi chiudere l’IDE; alla riapertura sarà disponibile. La libreria è scaricabile anche dalla sezione download del sito www.elettronicain.it col nome “vma405_library.zip”.

Fig. 3 Inclusione della libreria vma405

Miguel Balboa: questa libreria, molto più potente ed articolata, è consigliata dal sito ufficiale di Arduino, viene costantemente aggiornata quindi conviene sempre andare sul link https://www.arduino.cc/reference/en/libraries/mfrc522/ o direttamente sul github https://github.com/miguelbalboa/rfid; nel momento in cui stiamo scrivendo queste pagine l’ultima versione è la 1.4.8, che troverete sempre nella sezione download del sito www.elettronicain.it, col nome “MFRC522-1.4.8.zip”.

La sua inclusione nell’IDE si ottiene con la stessa modalità vista prima. Questa libreria è piuttosto impegnativa e richiede notevoli competenze in materia RFID e di programmazione per poterla sfruttare, quindi ci limitiamo a segnalarla ai lettori più esperti, mentre per il test che vedremo più avanti useremo quella distribuita dalla Velleman.

Test di funzionamento

Iniziamo con un test per verificare i collegamenti e la corretta installazione della libreria vma405. Nella sezione download del sito www.elettronicain.it abbiamo inserito uno sketch denominato “RFID_TAG_CODE”, occorre aprirlo nell’IDE e caricarlo su Arduino UNO, quindi bisogna aprire il Monitor Seriale che mostrerà il messaggio “Avvicina un Tag al Modulo”; a questo punto avviciniamo il Tag alla parte del modulo su cui sono serigrafati i simboli delle onde radio (Fig. 4).

Fig. 4 Lettura di un Tag col modulo RC522

Bisogna tener presente che il modulo va sempre tenuto distante da dispositivi in grado di generare campi elettrici o elettromagnetici, altrimenti potrebbe non funzionare correttamente.

Nell’istante in cui il Tag viene riconosciuto, il modulo ne legge l’UID (codice identificativo univoco) e lo visualizza sul Monitor Seriale, sia in formato decimale che in formato esadecimale; in Fig. 5 possiamo osservare la lettura successiva di due Tag.

Fig. 5 Lettura dell’UID di due Tag

Se dopo la prima identificazione si avvicina nuovamente lo stesso Tag, non succederà nulla in quanto nello sketch non abbiamo previsto un’azione alternativa, avvicinando invece un altro Tag si otterrà il relativo UID nei due formati.

Nel momento in cui questo test va a buon fine, occorre decidere quale Tag sarà l’“Amministratore di sistema” del circuito che abbiamo preparato per la sperimentazione di questo modulo e prendere nota dei cinque numeri decimali che compongono il suo UID. Per il nostro esempio useremo il primo gruppo visibile nella figura (197, 5, 190, 35, 93).

Progetto controllo accessi

Con l’ausilio di una breadboard e pochissimi altri componenti, passiamo ora alla realizzazione di un circuito per simulare un controllo di accessi mediante tecnologia RFID impiegando allo scopo il nostro modulo RC522.

Lo sketch che abbiamo predisposto si può scaricare dalla sezione download del sito www.elettronicain.it e si chiama Access_Control.rar, è composto da due schede e la cartella ricavata dalla decompressione del file dovrà essere posizionata nella cartella degli sketch dell’IDE in vostro possesso; in precedenza dovrà essere stata installata la libreria vma405_library.

L’idea è quella di un ipotetico controllo di accesso, in cui l’accettazione del Tag viene indicata con l’accensione/spegnimento alternati di un LED blu, mentre il rifiuto è rappresentato dall’accensione di un LED rosso per circa 3 secondi.

I Tag autorizzati vengono pre-memorizzati nella EEPROM del microcontrollore di Arduino; il nostro sketch ne prevede massimo tre ma possono essere aumentati fino alla disponibilità della EEPROM. La memorizzazione avviene solo previa autorizzazione dell’“Amministratore di sistema” che possiede un Tag CARD RFID, il cui UID deve essere inserito manualmente nello sketch e che, una volta letto dal modulo, permette di avvicinare altri Tag per accreditarli e memorizzarli nella EEPROM.

Da questo punto in poi avvicinando al modulo un Tag autorizzato il LED blu si accenderà o si spegnerà ad ogni passaggio, invertendo quindi il suo stato. Il LED rosso invece si accenderà per tre secondi quando si proverà ad accedere mediante un Tag non registrato, negando di fatto l’autorizzazione, quindi si spegnerà.

Prima di caricare lo sketch nell’Arduino occorre quindi aprirlo ed assegnare alle cinque variabili dec_code0 ÷ dec_code4 i corrispondenti valori decimali dell’UID del Tag prescelto (Fig. 6), inserendoli al posto di quelli che troverete pre-memorizzati.

Fig. 6 Inserimento dell’UID amministratore nello sketch

A questo punto si può caricare lo sketch nell’Arduino e successivamente scollegare il cavo USB per togliere l’alimentazione, quindi si passa alla realizzazione dello schema pratico visibile in Fig. 7, che vi spiega come collegare gli elementi occorrenti.

Fig. 7 Schema di cablaggio del controllo accessi

Materiale occorrente

Il materiale occorrente a realizzare il progetto è:

  • Modulo RFID-RC522;
  • Arduino UNO;
  • Breadboard con le linee di alimentazione laterali (rossa e nera oppure rossa e blu);
  • Tastino 6x6mm;
  • LED rosso;
  • LED blu (o altro colore a scelta);
  • n. 2 resistori da 220 Ohm;
  • n. 1 resistori da 10 kOhm;
  • n. 5 cavetti jumper M-M;
  • n. 7 cavetti jumper M-F;
  • n. 1 ponticello jumper passo 3;
  • n. 1 ponticello jumper passo 5;
  • n. 1 ponticello jumper passo 19;
  • n. 4 Tag, di cui uno contrassegnato come amministratore.

Notate che riguardo a cavetti e ponticelli jumper, abbiamo fornito l’elenco per replicare esattamente il nostro schema pratico; naturalmente è possibile apportare qualsiasi variazione, a patto di eseguire correttamente i collegamenti proposti, in caso contrario il circuito non funzionerà; soprattutto bisogna fare estrema attenzione a non invertire l’alimentazione (3,3V e GND) altrimenti si rischia di bruciare il modulo!

Una nota particolare riguarda la breadboard; nelle nostre prove ci è capitato un modello con le linee di alimentazione interrotte nella parte centrale, in realtà questo era chiaramente indicato dall’interruzione delle linee di serigrafia rosse e blu ma, essendo una cosa inusuale, inizialmente non ci abbiamo fatto caso, col risultato che il LED del modulo RC522 si accendeva lo stesso (a causa della corrente portata dai segnali) ma la lettura dei Tag non avveniva; abbiamo quindi dovuto aggiungere due ponticelli per collegare le due piste per l’intera lunghezza (Fig. 8) ossia per ponticellarle.

Fig. 8 Particolare del collegamento delle piste di alimentazione della breadboard

Funzionamento del controllo di accessi

Una volta completato il circuito su breadboard e controllati i collegamenti, per iniziare sarà sufficiente ricollegare il cavetto USB proveniente dal PC alla board Arduino UNO e si vedrà l’accensione del LED rosso del modulo RC522 (ma come abbiamo spiegato prima, questo non è indicativo di corretta alimentazione) mentre i due LED rosso e blu sulla breadboard resteranno spenti.

Ora bisogna aprire il Monitor Seriale dell’IDE di Arduino, ed apparirà il messaggio “Controllo accessi attivo”; la prima operazione da fare deve essere quella di avvicinare al modulo il Tag Amministratore, se è tutto a posto i due LED lampeggeranno contemporaneamente per tre volte e rimarranno accesi, inoltre il Monitor Seriale mostrerà il messaggio visibile in Fig. 9, ad indicare che è attiva la modalità Amministratore.

Fig. 9 Modalità Amministratore

Se alla prima accensione appare un numero diverso da 0 (in genere sarà 255) occorre resettare l’EEPROM, sarà sufficiente premere il tastino montato sulla breadboard per ottenere il risultato desiderato (Fig. 10).

Fig. 10 Reset dell’EEPROM

Dopo il reset si uscirà dalla modalità Amministratore e si spegneranno i LED; bisogna ripassare il Tag Amministratore per rientrare, poi sarà sufficiente avvicinare il Tag da autorizzare per memorizzarne l’UID (Fig. 11).

Fig. 11 Memorizzazione di un Tag autorizzato

L’operazione si potrà effettuare per un massimo di tre Tag, poi non sarà possibile memorizzarne altri, a meno di non modificare adeguatamente lo sketch.

Uso quotidiano del sistema

A questo punto possiamo vedere il comportamento del circuito in base al tipo di Tag che avviciniamo al lettore RFID; le possibilità sono due.

Tag non memorizzato: si accende il LED rosso per circa tre secondi, poi si spegne; l’autorizzazione viene negata.

Tag memorizzato: se il LED blu è spento si accende, segno che l’autorizzazione è stata concessa; il LED resta acceso finché non si passa lo stesso Tag o un altro Tag memorizzato, a quel punto si spegne.

Un’ultima curiosità: in mancanza di altri Tag per simulare la non autorizzazione è possibile usare il proprio smartphone; se disponete di un cellulare dotato di chip NFC con Android 5.0 o versioni successive, sarà sufficiente attivare l’NFC nelle impostazioni e quindi usare lo smartphone come se fosse un Tag.

Infatti avvicinandolo al modulo dal lato del chip, esso sarà riconosciuto come Tag, ma con una particolarità che non ne permette l’uso come Tag autorizzato, infatti ad ogni nuova lettura l’UID risulta diverso rispetto alla lettura precedente; questa cosa è facilmente verificabile con lo sketch “RFID_TAG_CODE”. Quindi se anche memorizzerete il chip come autorizzato, nelle letture successive non sarà comunque riconosciuto.

In alcuni rari casi lo smartphone potrebbe aver bisogno di un’APP specifica per funzionare come Tag, sarà sufficiente scaricare dal Play Store “NFC Tools” e lasciarla attiva, senza fare altre operazioni.

Conclusioni

Terminiamo questo articolo con un suggerimento: com’è facilmente immaginabile questo progetto si può ampliare aggiungendo, per esempio, un relé, pilotato tramite lo stesso pin del LED blu, che permetta di attivare un attuatore quale potrebbe essere una serratura elettrica, i limiti sono solo quelli della fantasia.

Naturalmente, maggiore sarà la complessità dell’ampliamento, maggiori saranno le variazioni ed implementazioni da fare allo sketch, ma sarà tutto un utile esercizio di programmazione che accrescerà le vostre competenze e che vi darà grande soddisfazione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu