Componentes · 6 min de lectura

Cómo usar el RFID RC522: leer tarjetas con Arduino y una cerradura con tarjeta

¿Cómo funciona el módulo RFID RC522? Tarjetas y llaveros de 13,56 MHz, conexión SPI a 3,3 V, librería MFRC522, leer el UID, comprobar tarjetas autorizadas, cerradura con servo y uso con ESP32 y Pico.

El RFID (Radio Frequency IDentification) es una tecnología que identifica una tarjeta o un llavero por radio sin tocar el lector. Las tarjetas de transporte, las tarjetas de acceso a oficinas, las etiquetas antirrobo de las tiendas y los microchips de las mascotas usan RFID. El RC522 es un módulo lector barato que funciona a 13,56 MHz y que suele venderse con una tarjeta blanca y un llavero azul. Es la base de muchos proyectos, desde cerraduras con tarjeta hasta sistemas de control de asistencia.

Módulo lector RFID RC522
Módulo RFID RC522: la pista de cobre de la placa es la antena del lector; al lado, una tarjeta y un llavero que puede leer.

¿Cómo funciona el RFID?

La antena de cobre de la placa lectora crea un campo magnético de 13,56 MHz. Dentro de la tarjeta o del llavero hay una bobina fina y un chip diminuto, pero no hay pila. Cuando la tarjeta se acerca al campo, la energía inducida en la bobina alimenta el chip, y este envía su identidad y sus datos al lector modificando el campo de forma muy leve. Por eso las tarjetas funcionan años sin cargarse nunca, pero con el RC522 la distancia de lectura es de solo unos 3–5 centímetros.

Las tarjetas de los kits suelen ser MIFARE Classic 1K: su 1 KB de memoria se divide en 16 sectores, cada uno con 4 bloques de 16 bytes. Cada tarjeta tiene un UID (identificador único) grabado de fábrica, normalmente de 4 bytes. La mayoría de los proyectos sencillos reconocen la tarjeta leyendo este UID en lugar de escribir datos en ella.

Características técnicas del RC522

CaracterísticaValor
Frecuencia de trabajo13,56 MHz
Alimentación3,3 V (no 5 V)
Consumo13–26 mA
Distancia de lecturaUnos 3–5 cm (según la tarjeta)
Tarjetas compatiblesMIFARE Classic 1K/4K, Ultralight, NTAG (ISO 14443A)
InterfazSPI (el chip también admite I2C y UART)

Conexión del RC522 (SPI)

El RC522 se comunica con la placa por SPI. Los pines SCK, MOSI y MISO deben ir a los pines SPI fijos de cada placa; SDA (SS) y RST pueden ir a cualquier pin digital siempre que coincidan con el código. Puedes consultar los pines SPI de tu placa en la herramienta Pinout.

Pin del RC522Arduino UnoArduino MegaESP32Raspberry Pi Pico
SDA (SS)D1053GPIO 5GP17
SCKD1352GPIO 18GP18
MOSID1151GPIO 23GP19
MISOD1250GPIO 19GP16
IRQSin conectarSin conectarSin conectarSin conectar
GNDGNDGNDGNDGND
RSTD95GPIO 22GP20
3.3V3.3V3.3V3V33V3
Nunca conectes el RC522 al pin de 5V; el módulo funciona a 3,3 V y 5 V pueden estropearlo para siempre. Mucha gente lo conecta directamente a los pines de datos de 5 V del Uno y suele funcionar, pero el chip no es oficialmente tolerante a 5 V. Para proyectos que vayan a funcionar mucho tiempo es más seguro usar un convertidor de nivel; el ESP32 y la Pico ya funcionan a 3,3 V, así que no tienen este problema.

La librería MFRC522 y cómo leer el UID de una tarjeta

En el Gestor de librerías busca MFRC522 e instala la librería de GithubCommunity (miguelbalboa). El código siguiente escribe en el Monitor Serie, en hexadecimal (HEX), el UID de cada tarjeta que acerques:

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3
4const int SS_PIN = 10;
5const int RST_PIN = 9;
6
7MFRC522 rfid(SS_PIN, RST_PIN);
8
9void setup() {
10  Serial.begin(9600);
11  SPI.begin();
12  rfid.PCD_Init();
13  Serial.println("Kartı okutun / scan a card");
14}
15
16void loop() {
17  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;  // kart yok / no card
18
19  Serial.print("UID:");
20  for (byte i = 0; i < rfid.uid.size; i++) {
21    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
22    Serial.print(rfid.uid.uidByte[i], HEX);
23  }
24  Serial.println();
25
26  rfid.PICC_HaltA();        // kartı beklemeye al / halt the card
27  rfid.PCD_StopCrypto1();
28}
Apunta el UID de tu tarjeta y de tu llavero; en el siguiente paso los usarás como «tarjetas autorizadas». Si no se lee ninguna tarjeta, carga Archivo > Ejemplos > MFRC522 > DumpInfo; si el Monitor Serie muestra «Firmware Version: 0x0» o «0xFF», el problema está en el cableado.

Comprobar si una tarjeta está autorizada

Comparando el UID leído con un valor guardado puedes decidir si la tarjeta está autorizada. El ejemplo siguiente comprueba una sola tarjeta autorizada; para varias, convierte el array en bidimensional y compara en un bucle:

Arduino (C++)
1// yukarıdaki tanımlar ve setup() aynen / definitions and setup() as above
2byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};   // kendi kartının UID'si / your card's UID
3
4bool isAllowed() {
5  if (rfid.uid.size != 4) return false;
6  for (byte i = 0; i < 4; i++) {
7    if (rfid.uid.uidByte[i] != allowed[i]) return false;
8  }
9  return true;
10}
11
12void loop() {
13  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
14  Serial.println(isAllowed() ? "İzin verildi / access granted" : "Reddedildi / access denied");
15  rfid.PICC_HaltA();
16  rfid.PCD_StopCrypto1();
17}

Cerradura con tarjeta y servo

Vamos a hacer una cerradura que gira un servo 90 grados y abre durante 3 segundos con una tarjeta autorizada, y que da un pitido corto con un zumbador ante una tarjeta no autorizada. Para conectar el servo, mira ¿Qué es un servomotor?, y para el aviso sonoro, ¿Qué es un zumbador? En el Uno la librería Servo usa el Timer1 y tone() el Timer2, así que funcionan juntos sin problemas.

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4
5MFRC522 rfid(10, 9);       // SS, RST
6Servo lock;
7const int BUZZER_PIN = 8;
8byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};
9
10void setup() {
11  SPI.begin();
12  rfid.PCD_Init();
13  lock.attach(6);
14  lock.write(0);                          // kilitli / locked
15}
16
17void loop() {
18  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
19  bool ok = rfid.uid.size == 4 && memcmp(rfid.uid.uidByte, allowed, 4) == 0;
20  if (ok) {
21    lock.write(90);                       // kilidi aç / unlock
22    delay(3000);
23    lock.write(0);                        // tekrar kilitle / lock again
24  } else {
25    tone(BUZZER_PIN, 400, 600);           // reddedildi sesi / denied beep
26  }
27  rfid.PICC_HaltA();
28  rfid.PCD_StopCrypto1();
29}
Una cerradura que solo mira el UID sirve para aprender y para proyectos de afición, pero no da seguridad real: los UID de las tarjetas MIFARE Classic se pueden copiar con aparatos baratos. Para una puerta de verdad, pide un PIN además de la tarjeta o verifica datos guardados en sectores cifrados.

RC522 con el ESP32 y la Raspberry Pi Pico

En el ESP32 funciona la misma librería MFRC522; usa los pines VSPI y declara el objeto como MFRC522 rfid(5, 22);. Como el ESP32 trabaja a 3,3 V, encaja perfectamente con el RC522, y gracias al Wi-Fi puedes registrar en internet las tarjetas leídas. En la Pico con MicroPython, copia un archivo mfrc522.py (por ejemplo, la librería de danjperron) en la Pico y úsalo así:

Python
1from mfrc522 import MFRC522      # mfrc522.py Pico'da olmalı / mfrc522.py must be on the Pico
2import time
3
4reader = MFRC522(spi_id=0, sck=18, miso=16, mosi=19, cs=17, rst=20)
5
6while True:
7    reader.init()
8    stat, tag_type = reader.request(reader.REQIDL)
9    if stat == reader.OK:
10        stat, uid = reader.SelectTagSN()
11        if stat == reader.OK:
12            print("UID:", "".join("{:02X}".format(b) for b in uid))
13    time.sleep_ms(200)

Tipos de RFID: ¿qué tarjetas lee el RC522?

TipoFrecuenciaDistancia de lecturaUso típico
RFID LF125 kHzUnos 10 cmTarjetas de acceso antiguas, microchips de mascotas (EM4100)
RFID HF / NFC13,56 MHz1–10 cmTarjetas de transporte, MIFARE, NFC de los móviles
RFID UHF860–960 MHzVarios metrosEtiquetas de almacén, logística y tiendas

El RC522 solo lee tarjetas HF de 13,56 MHz. Las tarjetas de 125 kHz que se usan en muchos portales (a menudo llevan «EM») no se pueden leer con el RC522; para ellas hace falta un lector de 125 kHz como el RDM6300. El NFC es un tipo de RFID de 13,56 MHz que pueden leer los móviles; el RC522 puede leer el UID de las pegatinas NTAG.

Ideas de proyectos con RFID

  • Cerradura de puerta o cajón con tarjeta: una cerradura que se abre con la tarjeta autorizada y avisa con las demás.
  • Control de asistencia: asocia cada tarjeta a un nombre y guarda la hora de llegada en una tarjeta SD o en internet.
  • Pantalla de bienvenida: muestra «Bienvenido» y el nombre de la persona en una LCD al pasar la tarjeta; para la pantalla, mira Cómo usar una pantalla LCD I2C.
  • Caja de cuentos: asigna un archivo de sonido distinto a cada tarjeta y crea un juguete sonoro para niños con un DFPlayer.
  • Comedero inteligente: da comida cuando se lee la etiqueta del collar de la mascota.
  • Juego con tarjetas: monta un juego de preguntas o de memoria con tarjetas.

Errores comunes y cómo solucionarlos

  • No se lee ninguna tarjeta y la versión sale 0x0: los cables SPI están en pines equivocados; revisa sobre todo MOSI y MISO.
  • Conectar el módulo a 5V: el RC522 funciona a 3,3 V; 5 V pueden destrozarlo.
  • Intentar leer una tarjeta de 125 kHz: el RC522 no ve estas tarjetas; usa una de 13,56 MHz.
  • La tarjeta está demasiado lejos o sobre metal: acerca la tarjeta a 1–3 cm; las superficies metálicas alteran el campo.
  • La misma tarjeta se lee una y otra vez: falta llamar a PICC_HaltA(); pon la tarjeta en reposo después de leerla.
  • Cables largos: las señales SPI se degradan con cables largos; mantenlos por debajo de 20 cm.

El RFID responde a la pregunta «¿quién eres?» con un simple gesto, y eso aporta mucho a los proyectos de seguridad y automatización. En la app BlueGrays encontrarás proyectos de lectura de valores RFID, lector de tarjetas con LCD y cerradura RFID con servo, paso a paso con esquemas y código.

Preguntas frecuentes

¿A cuántos centímetros lee una tarjeta el RC522?

Con las tarjetas y llaveros de los kits suele leer a 3–5 cm. El tipo de tarjeta, el tamaño de la antena y los metales cercanos influyen en la distancia. Para alcances mayores se necesitan lectores UHF, que trabajan a otras frecuencias.

¿Qué tarjetas lee el RC522? ¿Lee las de 125 kHz?

El RC522 solo lee tarjetas ISO 14443A de 13,56 MHz, como MIFARE Classic 1K/4K, Ultralight y etiquetas NTAG. No puede leer las tarjetas EM de 125 kHz habituales en los portales; para ellas se usa un lector de 125 kHz como el RDM6300.

¿El RC522 funciona a 5V?

No, el RC522 debe alimentarse a 3,3 V. Conectarlo al pin de 5V puede estropear el módulo. Sus pines de datos suelen aguantar las señales de 5 V del Uno, pero como el chip no es oficialmente tolerante a 5 V, para proyectos permanentes se recomienda un convertidor de nivel.

¿El UID de una tarjeta puede cambiar o copiarse?

El UID de una tarjeta normal se graba en fábrica y no cambia. Sin embargo, existen tarjetas «mágicas» cuyo UID sí se puede cambiar, y los UID de MIFARE Classic pueden copiarse en ellas. Por eso un sistema que solo confía en el UID no ofrece seguridad real.

¿Se pueden escribir datos en una tarjeta con el RC522?

Sí. En las tarjetas MIFARE Classic cada sector está protegido por una clave; en las tarjetas nuevas la clave por defecto es FF FF FF FF FF FF. Con el ejemplo ReadAndWrite de la librería MFRC522 puedes escribir datos en los bloques y volver a leerlos. El último bloque de cada sector guarda las claves, así que no escribas datos al azar en él.

¿Puedo usar el móvil como tarjeta en el RC522?

Normalmente no de forma fiable. Los iPhone no abren el NFC para emular tarjetas, y los Android envían un UID aleatorio que cambia en cada lectura. Para un sistema con móvil es mejor leer una etiqueta NFC con el teléfono y enviar el resultado a la placa por Wi-Fi o Bluetooth.

Ver todos los proyectos
Lectura de valores RFID
#53Principiante
Premium

Lectura de valores RFID

Proyecto que lee el número de serie en Serial Monitor cuando se acerca la tarjeta o llavero con el módulo RC522 RFID. Enseña los fundamentos de la comunicación SPI y la lectura RFID.

4.7(47)
61
Lector de tarjetas RFID RC522 para ESP32 (con LCD)
#123Intermedio
Premium

Lector de tarjetas RFID RC522 para ESP32 (con LCD)

En este proyecto, conectaremos el módulo RFID RC522 basado en MFRC522 al ESP32 a través de SPI y leeremos el UID de la tarjeta o etiqueta. Esto constituye la base de aplicaciones como cerraduras, sistemas de afiliación y control de acceso. Mostraremos el UID leído en la pantalla LCD y daremos un ejemplo de comparación con la lista de tarjetas autorizadas. **ATENCIÓN:** El RC522 solo funciona a **3,3 V**; si le aplicas 5 V, ¡el módulo se quemará!

4.8(21)
38
Cerradura RFID ESP32 (RC522 + servo + OLED + zumbador + LED)
#137Avanzado
Premium

Cerradura RFID ESP32 (RC522 + servo + OLED + zumbador + LED)

Vamos a construir una cerradura inteligente utilizando un ESP32, un módulo RFID RC522, un servomotor SG90, una pantalla OLED SSD1306, un zumbador activo y 2 LED. Cuando se lee una tarjeta, su código UID se compara con la lista de tarjetas autorizadas definida en el sistema; si es autorizada, el servomotor gira y se desbloquea la cerradura (LED verde + 2 pitidos cortos), y se vuelve a bloquear automáticamente tras 5 segundos. Si la tarjeta no está autorizada, se enciende el LED rojo, se emite una

4.8(9)
15
Caja fuerte electrónica inteligente
#92Avanzado
Premium

Caja fuerte electrónica inteligente

Smart Electronic Safe es un sistema de seguridad protegido por contraseña basado en Arduino. Activa y desactiva el mecanismo de cierre controlado por servomotor con la contraseña de 4 dígitos introduc

4.7(42)
63
Teclado 4x4 Pantalla LCD Aplicación de contraseña
#64Avanzado
Premium

Teclado 4x4 Pantalla LCD Aplicación de contraseña

Proyecto de seguridad que abre la puerta con servo si es correcta introduciendo una contraseña con un teclado 4x4 y enciende un LED rojo si es incorrecta. Enseña la comparación de contraseñas y la int

4.8(57)
75
Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram)
#145Avanzado
Premium

Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram)

Un sistema inteligente de alarma de seguridad que activa el buzzer y el LED cuando el sensor PIR detecta movimiento, y envía simultáneamente una notificación instantánea al propietario vía Telegram. Cuenta con un cooldown de 30 segundos para evitar falsas alarmas. Ideal para seguridad del hogar, vigilancia de garajes, almacenes o salas de trabajo. Con ESP32-CAM se pueden añadir notificaciones con fotos; con el clásico ESP32 DevKit V1 se envían notificaciones de texto.

0.0(0)
8
Alarma con sensor de movimiento ESP32
#140Intermedio
Premium

Alarma con sensor de movimiento ESP32

En este proyecto, elaborado con un ESP32 y un sensor PIR, cuando se detecta movimiento, el zumbador se activa y emite una alarma sonora. Se trata de una aplicación sencilla y económica para un sistema de seguridad. (Las imágenes son ilustrativas; por favor, conéctelas según las instrucciones)

4.4(10)
15
Pantalla LCD I2C para ESP32 (16x2)
#119Intermedio
Premium

Pantalla LCD I2C para ESP32 (16x2)

En este proyecto, mostramos texto conectando una pantalla LCD de 16x2 caracteres al ESP32 a través del protocolo I2C. Gracias al I2C, podemos controlar la pantalla con solo 2 pines de datos (SDA y SCL); así se elimina el desperdicio de pines que supone la conexión paralela clásica, que requiere más de 6 pines. El código imprime un mensaje fijo en la primera línea y un contador que aumenta cada segundo en la segunda línea. Además, al inicio ejecutamos el escáner I2C para mostrar la dirección de l

4.9(22)
39

Aprende cómo el RFID lee tarjetas sin pila, cómo conectar el RC522 a Arduino de forma segura, leer el UID de una tarjeta y montar una cerradura con servo que se abre con una tarjeta autorizada.

Cómo usar el RFID RC522: leer tarjetas con Arduino y una cerradura con tarjeta | BlueGrays