Utilizzare il lettore del card RFID RC-522

Questo Card Reader RFID RC-522 a 13.56 Mhz, basato sul chip MFRC522 della NXP Semiconductors che è stato progettato per la lettura/scrittura di tag per l’identificazione a radio frequenza.
Il modulo può essere utilizzato per svariate applicazioni sia professionali che amatoriali nell’ambito di controllo accessi, identificazione automatica, robotica, navigazione, sistemi di pagamento e antifurto immobilizzatori per auto.

card RFID RC-522

Dove trovare il dispositivo

Il dispositivo può essere trovato sul sito HOMOTIX,

Oltre a l kit potranno essere acquistati le singole schede Formato Tessera, oppure gli RFID formato portachiavi

card RFID RC-522

 

Modulo RFID RC-522 e TAG
codice HMTRC522
Tag RFID Mifare Formato Tessera
codice HMTTAGT
Tag RFID Mifare Formato Portachiavi
codice HMTTAGP

Contenuto del Kit

Come illustrato nell’immagine riportata in basso, la confezione contiene:

  • Modulo-Lettore di card RFID RC-522,

  •  IC card S50 standard, Formato Tessera operante a 13,56 MHz, ogni tag è fornito pre programmato con un codice univoco, realizzato in ABS con capacità di memoria: 1024 Kbit

  • 1 x card S50 dalla particolare forma a portachiavi, operante a 13,5 MHz, ogni tag è fornito preprogrammato con un codice univoco.

  • 1 Connettore strip 1x8pin a 90° + 1 x connettore strip 1x8pin

Nota: in pin sono da saldare da parte dell’utilizzatore

card RFID RC-522

Tutti i componenti sopra riportati sono presenti nel Kit Arduino Avanzato con Arduino Uno R3 Compatibile, venduto dal sito HOMOTIX, il kit è adatto a utenti esperti e principianti, con i componenti forniti è possibile realizzare una ampia varietà di progetti.

Caratteristiche

  • Alimentazione: 3.3V
  • Assorbimento :13-26 mA, in Stand-by:10-13 mA, in Sleep:<80 uA
  • Corrente di picco:<30 mA
  • Frequenza operativa: 13.56MHz
  • Card supportate: S50, S70 Ultralight, Pro, DESFire
  • Temperatura operativa: -20/80° C
  • Temperatura di stoccaggio: -40/85° C
  • Umidità relativa:5%-95%
  • Interfaccia: SPI
  • Velocità di trasferimento dati:max 10Mbit/s
  • Dimensioni:40 x 60 mm
  • Peso: 20,5g

card RFID RC-522

card RFID RC-522

L’integrato MFRC522

Il modulo reader RFID-RC522 utilizza l’integrato MFRC522, lo schema a blocchi semplificato è visibile nella foto sottostante

L’MFRC522 è un integrato lettore/scrittore altamente integrato per la comunicazione senza contatto a 13,56 MHz. Il lettore MFRC522 supporta ISO / IEC 14443 A / MIFARE e NTAG.
Il trasmettitore interno dell’MFRC522 è in grado di pilotare un’antenna reader/writer progettata per comunicare con schede ISO / IEC 14443 A / MIFARE e transponder senza ulteriore circuiteria attiva.
Il modulo ricevitore fornisce un’implementazione robusta ed efficiente per segnali di demodulazione e decodifica di schede compatibili ISO / IEC 14443 A / MIFARE e transponder.
Il modulo digitale gestisce l’inquadratura ISO / IEC 14443 A completa e funzionalità di rilevamento degli errori (parità e CRC).
L’MFRC522 supporta i prodotti MF1xxS20, MF1xxS70 e MF1xxS50. L’MFRC522 supporta la comunicazione senza contatto e utilizza MIFARE velocità di trasferimento più elevate fino a 848 kBd in entrambe le direzioni.

Frontend MIFARE e NTAG prestazioni standard Sono fornite le seguenti interfacce host:

  • Serial Peripheral Interface (SPI)

  • UART seriale

  • Interfaccia bus I2C

MFRC522 Standard performance MIFARE and NTAG frontend

MFRC522

Come Funziona un sistema RFID

Un sistema RFID, in particolare, si compone di transponder, detto anche tag, il cui chip contiene i dati, di antenna, per comunicare con il tag e gestita dal controller, e di reader (o controller), che attraverso il segnale radio legge l’identificativo del tag e può scriverne la memoria, trasmettendo poi il segnale all’host (PC).

Un sistema RFID può operare in bassa frequenza (LF), alta (HF) o altissima frequenza (UHF e VHF):

  • LF (125-135 KHz): utilizzabile worldwide con distanza di lettura limitata ed applicata per anti furti, chiavi, etc.

  • HF (13,56 MHz): normalizzata dagli standard ISO 14443 e ISO 15693; è utilizzata worldwide, con distanza di lettura ridotta (fino a 1,20 mt.) ed applicata per libri, pallet, controllo accessi, abbigliamento etc. Il lettore presente in questa pagina appartiene a questa gamma di frequenza.

  • UHF (868-915 MHz): incontra limiti locali definiti dalle autorità dei singoli paesi, applicata per pallet, container, etc.

  • VHF (2,4 o 5,8GHz): utilizzata globalmente per transponder attivi, applicata per controllo accessi, veicoli, etc.

In particolare, i tag / transponder RFID sono sostanzialmente delle memorie dotate di un apparato radio ricetrasmittente, spesso inserito nel medesimo chip di silicio: eccitato da un apparato esterno (fisso o portatile) con il quale stabilisce un dialogo via radio, il tag restituisce poi il suo codice identificativo e/o le altre eventuali informazioni contenute.
I tag RFID possono assumere svariate forme a secondo del tipo di applicazione considerata: ad esempio i tag utilizzati per l’identificazione degli animali sono di piccolissime dimensioni, in quanto devono essere inseriti sotto la pelle (ci sono progetti pilota anche su esseri umani in ambito sanitario), mentre per applicazioni di controllo accessi assumono le sembianze di una carta di credito o del più classico badge.

Antenne RFID

Le antenne RFID, gestite dal controller, generano un campo magnetico che “risveglia” il tag, avviando così la comunicazione via radio; le antenne, talvolta incorporate nel controller, possono essere a polarizzazione lineare oppure circolare, in base alle condizioni di lettura, all’orientamento dei tag ed all’ambiente in cui opera l’RFID.

Il controller RFID

Il controller RFID, detto anche lettore o reader, è la componente di un sistema RFID dedicata alla lettura/identificazione e scrittura dei tag RFID e della comunicazione dei loro codici ai sistemi di alto livello (Middleware o ERP) tramite le antenne, l’altro elemento del sistema che irradia il segnale RF.
La potenza del controller, unitamente al tipo di antenna ad esso collegata, ne determina una delle performance più importanti, ossia la distanza di lettura (del tag), che può essere qualificata in 4 tipologie:

  • Proximity: letture da 10 cm fino max 20-25 cm

  • Vicinity: letture su alcune decine di cm e max i m.

  • Mid Range: distanza di ca. 1 m

  • Long Range: alcuni metri

Caricamento libreria Arduino

Per includere la libreria per la gestione del modulo occorre seguire quanto mostrato nelle figure mostrate sotto

Utilizzare la funzione “Gestione librerie” presente nell’IDE

Inserire nel campo ricerca “rfid” dovrebbe essere mostrata la “MFRC222”

Selezionare “More info” in questo modo apparirà il tasto “Installa” e premerlo

Conclusa l’installazione apparirà la scritta “INSTALLED

Per il funzionamento occorre anche caricare la libreria RFID, per fare questo, occorre scaricare questo file (rfid.zip). Questa volta per il caricamento utilizzeremo la funzione Aggiungi libreria da file .ZIP

Schema del circuito di prova

Per testare il modulo si utilizzano i seguenti componenti

KitCard reader card RFID RC-522 Scheda Arduino Nano Arduino UNO
Convertitore Expander seriale Bus I2C
con PCF8574 con Display LCD
 Cavetti di vari colori

 

card RFID RC-522

Collegamenti da effettuare

Pin Arduino/NanoModulo RFIDModulo
A4 (SDA)SDA
A5 (SCL)SCL
D9RST
D10SS
D11MOSI
D12MISO
D13SCK
+3,3V VCC
+5VVCC
GNDGNDGND

card RFID RC-522

card RFID RC-522

Programma di prova

Il programma di prova per il nostro dispositivo card RFID RC-522 si limita a mostrate il codice univoco presente all’interno del TAG. il valore viene mostrato sia in esadecimale che in decimale nella finestra del monitor seriale, e se è collegato il display, su di esso viene mostrato il codice i esadecimale. NOTA:Prima di caricare il programma, assicurarsi di aver attivato la libreria.

Programma Schema circuito di prova

// impostazione lettore RFID
#include <SPI.h>;
#include <RFID.h>;
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);

// Impostazione display LCD tramite I2C
#include <LiquidCrystal_I2C.h>;
LiquidCrystal_I2C lcd(0x27, 16, 2);


// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.init();

  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Lettura cod.RFID");
  lcd.setCursor(0, 1);
  lcd.print("www.adrirobot.it");
}

void loop()
{

  if (rfid.isCard()) {
    if (rfid.readCardSerial()) {
      if (rfid.serNum[0] != serNum0
          && rfid.serNum[1] != serNum1
          && rfid.serNum[2] != serNum2
          && rfid.serNum[3] != serNum3
          && rfid.serNum[4] != serNum4
         ) {
        /* With a new cardnumber, show it. */
        /* Se trova un nuovo numero di tag lo mostra */
        Serial.println(" ");
        Serial.println("Trovata card");
        serNum0 = rfid.serNum[0];
        serNum1 = rfid.serNum[1];
        serNum2 = rfid.serNum[2];
        serNum3 = rfid.serNum[3];
        serNum4 = rfid.serNum[4];


        Serial.println("Numero RFID:");
        Serial.print("Dec: ");
        Serial.print(rfid.serNum[0], DEC);
        Serial.print", ");
        Serial.print(rfid.serNum[1], DEC);
        Serial.print(", ");
        Serial.print(rfid.serNum[2], DEC);
        Serial.print(", ");
        Serial.print(rfid.serNum[3], DEC);
        Serial.print(", ");
        Serial.print(rfid.serNum[4], DEC);
        Serial.println(" ");

        Serial.print("Hex: ");
        Serial.print(rfid.serNum[0], HEX);
        Serial.print(", ");
        Serial.print(rfid.serNum[1], HEX);
        Serial.print(", ");
        Serial.print(rfid.serNum[2], HEX);
        Serial.print(", ");
        Serial.print(rfid.serNum[3], HEX);
        Serial.print(", ");
        Serial.print(rfid.serNum[4], HEX);
        Serial.println(" ");

        /* Write the HEX code to the display */
        /* Scrive il codice HED sul display */
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Num Card (hex):");
        lcd.setCursor(0, 1);
        lcd.print(rfid.serNum[0], HEX);
        lcd.print(',');
        lcd.print(rfid.serNum[1], HEX);
        lcd.print(',');
        lcd.print(rfid.serNum[2], HEX);
        lcd.print(',');
        lcd.print(rfid.serNum[3], HEX);
        lcd.print(',');
        lcd.print(rfid.serNum[4], HEX);
      } else {
        /* If we have the same ID, just write a dot. */
        /* se trova lo stesso ID, scrive solamente punti. */
        Serial.print(".");
      }
    }
  }

  rfid.halt();
}