Radares Mirando al Sur

Fundamentos, Tecnologías, Aplicaciones, Historia y Memoria

Módulos RFID para Arduino: RC522 y PN532

La identificación por radiofrecuencia (RFID) es una tecnología que permite identificar objetos mediante un identificador único (UID) transmitido por ondas de radio. Un sistema RFID se compone de dos elementos principales: la etiqueta (tag o tarjeta) y el lector. El lector genera un campo electromagnético; cuando una tarjeta pasiva se acerca, se alimenta de ese campo y responde enviando su información.

Para proyectos con Arduino, los módulos más populares son el RC522 y el PN532. Vamos a verlos en detalle.


1. Módulo Lector RFID RC522

Es el caballo de batalla del maker. Usa el chip MFRC522 de NXP, un lector/escritor altamente integrado para comunicación sin contacto a 13.56 MHz.

Especificaciones técnicas (según datasheet y fabricantes):

ParámetroValor
Voltaje de alimentación3.3 V (¡nunca a 5V!)
Corriente en operación13-26 mA
Corriente en reposo10-13 mA
Corriente en sueño< 80 µA
Frecuencia13.56 MHz
Distancia de lecturahasta 50 mm (depende de la antena)
Interfaces soportadosSPI, I2C, UART (por defecto se usa SPI)
Tarjetas soportadasMIFARE Classic (S50, S70), MIFARE Ultralight, MIFARE DESFire, NTAG

El módulo RC522 tiene 8 pines. La nomenclatura puede variar según el fabricante, pero los más comunes son:

Pin del móduloFunción
VCCAlimentación 3.3V
GNDTierra
RSTReset del módulo
IRQInterrupción (opcional, casi siempre sin conectar)
MISOSPI – Master In Slave Out
MOSISPI – Master Out Slave In
SCKSPI – Clock
SDA (o SS)SPI – Slave Select

⚠️ Importante: El módulo trabaja con lógica de 3.3V, pero los pines de entrada suelen ser tolerantes a 5V en la mayoría de las placas. Sin embargo, VCC siempre debe ir a 3.3V; conectarlo a 5V puede dañarlo.

Conexión a Arduino Uno

La conexión es por SPI. Este es el esquema estándar:

RC522Arduino Uno
VCC3.3V
GNDGND
RSTPin 9 (o cualquier digital)
SDA (SS)Pin 10 (SS por defecto)
MOSIPin 11
MISOPin 12
SCKPin 13
IRQNo conectar

Para Arduino Mega, los pines SPI cambian: MOSI→51, MISO→50, SCK→52.


2. Módulo RFID/NFC PN532

El PN532 es más versátil y potente. Soporta los mismos protocolos que el RC522 (MIFARE Classic, Ultralight, NTAG) pero añade FeliCa, ISO 14443B y modo NFC peer-to-peer.

Ventajas sobre el RC522:

  • Soporta más tipos de tarjetas y etiquetas.
  • Se puede comunicar por SPI, I2C o UART (se selecciona con switches en la placa).
  • Ideal si quieres leer etiquetas NFC de móviles o tarjetas de transporte.

Conexión por I2C (la más común):

PN532 (I2C)Arduino Uno
VCC3.3V o 5V (según modelo)
GNDGND
SDAA4
SCLA5

⚠️ Atención: algunos módulos PN532 funcionan a 3.3V y no son tolerantes a 5V, por lo que puede ser necesario un conversor de nivel lógico si se usa con Arduino Uno de 5V.


3. Tarjetas y tags RFID

Los tags son el otro lado del sistema. Los más comunes para estos módulos son:

  • MIFARE Classic 1K (S50): la más popular, 1 KB de memoria, viene en formato tarjeta de crédito o llavero.
  • MIFARE Ultralight: más económica, menos memoria, ideal para usos de un solo uso.
  • NTAG: variante más moderna, usada en muchas etiquetas NFC comerciales.

Todas funcionan a 13.56 MHz y son pasivas: no llevan batería, se alimentan del campo del lector.

Cada tarjeta tiene un UID (Unique Identifier) de 4 o 7 bytes, que es lo que leemos en la mayoría de los proyectos sencillos.


4. Instalación de la librería

Para el RC522, la librería de referencia es MFRC522 de Miguel Balboa (la más usada y mantenida).

  1. Abre el Arduino IDE.
  2. Ve a Sketch → Include Library → Manage Libraries.
  3. Busca «MFRC522» e instala la última versión.

Para el PN532, la librería más común es la de Adafruit PN532.


5. Código mínimo: leer el UID de una tarjeta

Este es el «Hola Mundo» del RFID: leer el UID de cualquier tarjeta o llavero que se acerque al lector.

cpp

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

#define RST_PIN  9      // Pin de reset
#define SS_PIN   10     // Pin Slave Select

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Creamos la instancia

void setup() {
  Serial.begin(9600);
  SPI.begin();                // Iniciamos el bus SPI
  mfrc522.PCD_Init();         // Iniciamos el lector
  Serial.println("Lector RFID RC522 listo. Acerca una tarjeta.");
}

void loop() {
  // ¿Hay una nueva tarjeta?
  if (!mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // ¿Se ha podido leer el serial?
  if (!mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  // Mostramos el UID por el monitor serie
  Serial.print("UID: ");
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if (mfrc522.uid.uidByte[i] < 0x10) {
      Serial.print(" 0");
    } else {
      Serial.print(" ");
    }
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }
  Serial.println();

  // Detenemos la comunicación con la tarjeta
  mfrc522.PICC_HaltA();
}

Con este código, al abrir el monitor serie a 9600 baudios y acercar una tarjeta, verás su UID impreso en pantalla.

A partir de ahí, el siguiente paso natural es comparar ese UID con una lista de autorizados y activar un relé, un LED o un motor. Justo lo que necesitaba ese local de atracciones infantiles que comentabas.


6. ¿RC522 o PN532?

CaracterísticaRC522PN532
PrecioMuy bajoMedio
ProtocolosMIFARE Classic, Ultralight, DESFire, NTAGLos mismos + FeliCa + NFC peer-to-peer
InterfazSPI (principal)SPI, I2C, UART (seleccionable)
Distancia~5 cm~5-7 cm
DificultadBajaMedia
Ideal paraControl de acceso básico, proyectos económicosProyectos que requieran NFC o múltiples tipos de tarjeta

Para el 90% de los proyectos con Arduino, el RC522 es más que suficiente: es barato, fácil de conseguir y la librería es estable y bien documentada.


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *