Progetto #112 • RFID e SPI

Arduino RFID RC522: leggere UID di badge e tag

Colleghiamo un lettore RFID RC522 ad Arduino UNO tramite SPI e leggiamo l’UID di badge e tag compatibili, visualizzandolo sul Monitor Seriale.

Difficoltà★★☆☆☆ Facile
Tempo25–40 minuti
ConcettiRFID • SPI • UID

Introduzione

I sistemi RFID permettono di identificare badge e tag senza contatto. In questo progetto useremo il modulo MFRC522 / RC522 con Arduino UNO per leggere l’UID del tag e mostrarlo sul Monitor Seriale.

È un ottimo punto di partenza per capire il funzionamento di base di lettori RFID, protocollo SPI e identificazione di tag.

Cosa imparerai
  • come collegare il modulo RC522 ad Arduino UNO;
  • come comunicare con il lettore tramite bus SPI;
  • come installare e usare la libreria MFRC522;
  • come rilevare la presenza di un tag;
  • come leggere e formattare il suo UID.

Materiale necessario

Arduino UNO
Modulo RFID RC522
Badge o tag compatibile
Cavi jumper
OPTBreadboard

🧰 Non hai ancora i componenti?

Un kit Arduino per principianti contiene molti dei componenti utili per seguire i progetti del sito.

Vedi il kit Arduino consigliato →Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Nei miei libri dedicati ad Arduino trovi spiegazioni, schemi e numerosi progetti pratici pensati anche per chi parte da zero.

Scopri i miei libri su Arduino →Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema di collegamento SPI

📡 RC522 → Arduino UNO

  • SDA / SS → pin 10
  • SCK → pin 13
  • MOSI → pin 11
  • MISO → pin 12
  • RST → pin 9
  • GND → GND
  • 3.3V → 3.3V
  • IRQ → non collegato

⚙️ Protocollo

Il modulo comunica con Arduino tramite bus SPI. Su Arduino UNO i pin hardware SPI sono 11, 12 e 13; il pin SS del progetto è impostato a 10.

Schema Arduino UNO con modulo RFID RC522 collegato tramite SPI
Alimentazione: il modulo RC522 lavora a 3,3 V. Non collegare il pin di alimentazione del modulo direttamente ai 5 V.
Nota sui livelli logici: il chip MFRC522 è un dispositivo a 3,3 V. Molti moduli hobbistici vengono comunemente collegati direttamente ad Arduino UNO, ma per una progettazione più rigorosa è opportuno verificare la scheda specifica e la compatibilità dei livelli logici.

Libreria necessaria

Installa la libreria MFRC522 dal Gestore librerie dell’IDE Arduino. Il codice usa inoltre la libreria SPI, già inclusa normalmente nell’ambiente Arduino.

Codice Arduino

Ho migliorato il codice originale formattando l’UID sempre con due cifre esadecimali per byte e aggiungendo la corretta chiusura della comunicazione con il tag.

Progetto #112 — Lettura UID RFID RC522
// ============================================
// Progetto 112 - Lettura badge RFID con RC522
// Visualizza l'UID sul Monitor Seriale
// ============================================

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {

  Serial.begin(9600);

  SPI.begin();
  rfid.PCD_Init();

  Serial.println("Lettore RFID pronto");
  Serial.println("Avvicina un badge o tag...");
}

void loop() {

  // Nessun nuovo tag presente
  if (!rfid.PICC_IsNewCardPresent()) {
    return;
  }

  // Impossibile leggere il seriale del tag
  if (!rfid.PICC_ReadCardSerial()) {
    return;
  }

  Serial.print("UID: ");

  for (byte i = 0; i < rfid.uid.size; i++) {

    // Mantiene due cifre HEX per ogni byte
    if (rfid.uid.uidByte[i] < 0x10) {
      Serial.print("0");
    }

    Serial.print(rfid.uid.uidByte[i], HEX);

    if (i < rfid.uid.size - 1) {
      Serial.print(":");
    }
  }

  Serial.println();

  // Termina correttamente la comunicazione
  // con il tag corrente.
  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();

  delay(300);
}

Come funziona

1

Inizializzazione SPI

SPI.begin() inizializza il bus SPI, mentre PCD_Init() prepara il lettore RC522.

2

Rilevamento del tag

PICC_IsNewCardPresent() verifica se è stato avvicinato un nuovo tag compatibile.

3

Lettura dell’UID

PICC_ReadCardSerial() acquisisce i dati identificativi del tag e li rende disponibili nella struttura rfid.uid.

4

Visualizzazione

I byte dell’UID vengono stampati in esadecimale sul Monitor Seriale, separati da due punti.

5

Chiusura della lettura

PICC_HaltA() conclude la comunicazione con il tag corrente e prepara il sistema per una nuova lettura.

Importante: l’UID è un identificatore utile per esercizi e prototipi, ma non va considerato da solo una credenziale sicura per un vero controllo accessi.

UID e sicurezza

Molti progetti base confrontano semplicemente l’UID letto con una lista di badge autorizzati. È una tecnica utile per imparare, ma non equivale a un sistema di autenticazione robusto.

Perché? In base al tipo di tag e tecnologia utilizzata, un identificatore può non essere sufficiente come prova di autenticità. Per sistemi di accesso reali servono meccanismi e credenziali progettati specificamente per la sicurezza.

Varianti e miglioramenti

📟 Display LCDMostra l’UID o un messaggio direttamente su un display.
✅ Badge autorizzatiConfronta l’UID con una piccola lista per distinguere tag conosciuti e sconosciuti.
🔔 Feedback LED/buzzerUsa LED verde e rosso o un segnale acustico per indicare l’esito della lettura.
💾 Registro lettureMemorizza data, ora e UID in un sistema di logging adatto al progetto.