El módulo RFID-RC522 lee y escribe tags sin contacto a 13,56 MHz y se conecta a un Arduino UNO por el bus SPI. Open Electronics publicó una guía que lo usa para armar un control de accesos sobre protoboard, con los tags autorizados guardados en la EEPROM del microcontrolador.

Detrás del módulo está el MFRC522 de NXP, un lector y grabador integrado para comunicación sin contacto compatible con los estándares ISO/IEC 14443A, MIFARE y NTAG. La hoja de datos del chip la publica el propio fabricante. El medio ya había cubierto la identificación por radiofrecuencia en su número 254, con una introducción teórica y ejemplos armados sobre el módulo PN522.

¿Qué hace por dentro el MFRC522?

El transmisor que lleva adentro puede excitar una antena preparada para hablar con tarjetas y transpondedores sin necesidad de circuitos activos adicionales. El receptor demodula y decodifica las señales que devuelven esas tarjetas cuando cumplen los estándares de la lista.

El chip soporta los modelos MF1xxS20, MF1xxS70 y MF1xxS50, y admite comunicación sin contacto con velocidades de transferencia MIFARE de hasta 848 kB (kilobaudios) en modo bidireccional. Es compatible con todas las variantes de los protocolos de identificación MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 y MIFARE Plus RF, agrupadas bajo el término genérico MIFARE.

Estas son las características principales del módulo.

  • Circuito analógico para demodular y decodificar las respuestas.
  • Drivers con buffer para conectar una antena con pocos componentes externos.
  • Soporte de ISO/IEC 14443 A/MIFARE y NTAG.
  • Distancia típica de trabajo en lectura y escritura de hasta 50 mm, según el tamaño y la sintonía de la antena.
  • Soporte de cifrado MF1xxS20, MF1xxS70 y MF1xxS50 en lectura y escritura.
  • Soporte de ISO/IEC 14443 con comunicación de alta tasa de transferencia, hasta 848 kbaudios.
  • Soporte de MFIN/MFOUT.
  • Alimentación interna adicional para el circuito integrado de la tarjeta inteligente conectada vía MFIN/MFOUT.
  • Interfaces de host admitidas, con niveles de tensión que dependen de la alimentación del pin.
  • Buffer FIFO que administra el envío y la recepción con 64 bytes.
  • Modos de interrupción flexibles.
  • Reset por hardware con función de bajo consumo.
  • Apagado por software.
  • Temporizador programable.
  • Tensión de alimentación de 2,5 a 3,3 V.
  • Pines de entrada y salida programables.

Las tres interfaces de host que acepta el chip quedan así.

InterfazVelocidad máximaModo
SPI10 Mbit/s(el que usan las librerías de Arduino)
I²C-Bus400 kBdFast
I²C-Bus3.400 kBdHigh-speed
UART serie RS2321.228,8 kB/s(niveles según la tensión del pin)

Cómo se cablea con el Arduino UNO

Todas las librerías vigentes para usar el módulo con Arduino reutilizan la conexión SPI, así que la guía se concentra solo en esa. La figura 2 muestra el cableado que hay que armar para las pruebas con el Arduino UNO.

Fig. 2 Conexiones RC522_ISP
Fig. 2 Conexiones RC522_ISP

La tabla 1 describe las conexiones una por una con sus señales. A la izquierda están las del Arduino UNO y a la derecha los contactos del módulo RFID-RC522, con los colores de cable que corresponden al diagrama de la figura 2. El pin IRQ del módulo se deja sin conectar, porque el proyecto no lo administra ni lo necesita.

Tabla 1 Conexiones entre el módulo RFID-RC522 y el Arduino
Tabla 1 Conexiones entre el módulo RFID-RC522 y el Arduino

Acá hay que tener cuidado, porque intercambiar apenas dos cables hace que el módulo falle. El otro punto crítico es la alimentación. El módulo pide 3,3 V y el pin correspondiente del Arduino está justo al lado del de 5 V, así que un momento de distracción daña el módulo casi con certeza.

La placa llega con dos tiras de pines de ocho contactos, una recta y otra a 90 grados, para soldar como cada uno prefiera en los orificios de señal. También trae una tarjeta RFID y un llavero RFID para las primeras pruebas.

¿Qué librería conviene instalar?

El uso del módulo se facilita con librerías específicas y Open Electronics seleccionó dos, la de Velleman y la que escribió Miguel Balboa.

La de Velleman es mínima y consta de solo dos archivos, RFID.h y RFID.cpp. Se descarga desde el paquete vma405 y se incorpora abriendo un sketch nuevo con una versión actualizada del IDE, que en las pruebas fue la 1.8.12. Hay que ejecutar el comando Sketch, Incluir Librería, Añadir librería .ZIP, seleccionar el archivo comprimido y cerrar el IDE. Queda disponible al volver a abrirlo.

Fig. 3 Inclusión de la librería vma405
Fig. 3 Inclusión de la librería vma405

La de Miguel Balboa es bastante más amplia y articulada, y es la que recomienda el sitio oficial de Arduino. Se actualiza de forma constante, así que conviene ir siempre a la ficha de la librería MFRC522 o directo al repositorio en GitHub. Al momento de escribir el artículo la última versión era la 1.4.8. Se incluye en el IDE de la misma forma que la anterior.

Esa segunda librería es exigente y pide bastante manejo de RFID y de programación para aprovecharla, por eso la guía solo la menciona para lectores con más experiencia. Para la prueba usa la que distribuye Velleman.

La prueba de lectura del UID

La primera prueba verifica las conexiones y la instalación correcta de la librería vma405. El sketch preparado se llama RFID_TAG_CODE. Se abre en el IDE, se carga al Arduino UNO y después se abre el Monitor Serie, que muestra el mensaje "Avvicina un Tag al Modulo" (acerca un tag al módulo). Ahí hay que acercar el tag a la parte del módulo donde está serigrafiado el símbolo de las ondas de radio.

Fig. 4 Lectura de un tag con el módulo RC522
Fig. 4 Lectura de un tag con el módulo RC522

El módulo debe mantenerse siempre lejos de dispositivos capaces de generar campos eléctricos o electromagnéticos, porque si no puede que no funcione bien.

Cuando el tag es reconocido, el módulo lee su UID, el código de identificación único, y lo muestra en el Monitor Serie en formato decimal y hexadecimal. En la figura 5 se ve la lectura sucesiva de dos tags.

Fig. 5 Lectura del UID de dos tags
Fig. 5 Lectura del UID de dos tags

Si después de la primera identificación se vuelve a acercar el mismo tag no pasa nada, porque el sketch no incluye una acción alternativa. Acercar otro tag sí devuelve su UID en los dos formatos.

Cuando la prueba resulta, hay que decidir qué tag será el administrador del sistema del circuito y anotar los cinco números decimales que forman su UID. El ejemplo de la guía usa el primer grupo visible en la figura, 197, 5, 190, 35 y 93.

El proyecto de control de accesos

Con una protoboard y muy pocos componentes más, la guía arma un circuito que simula un sistema de control de accesos con tecnología RFID sobre el módulo RC522.

El sketch preparado se descarga con el nombre Access_Control.rar, consta de dos pestañas, y la carpeta que sale de descomprimir el archivo va en la carpeta de sketches del IDE. La librería vma405 tiene que estar instalada antes.

La idea es un sistema hipotético de control de accesos donde la aceptación de un tag se indica con el encendido y apagado alternado de un LED azul, mientras que el rechazo se representa con un LED rojo que se enciende durante unos tres segundos.

Los tags autorizados quedan pregrabados en la EEPROM del microcontrolador del Arduino. El sketch de la guía admite hasta tres, aunque se pueden aumentar hasta donde alcance la EEPROM. El registro solo ocurre con autorización previa del administrador del sistema, que tiene una tarjeta RFID cuyo UID se escribe a mano en el sketch. Una vez que el módulo la lee, permite acercar otros tags para acreditarlos y guardarlos en la EEPROM.

Desde ese momento, cuando se acerca un tag autorizado al módulo el LED azul se enciende o se apaga en cada pasada, alternando su estado. El LED rojo se enciende durante tres segundos cuando alguien intenta entrar con un tag no registrado, deniega la autorización y después se apaga.

Antes de cargar el sketch al Arduino hay que abrirlo y asignar los valores decimales del UID del tag elegido a las cinco variables que van de dec_code0 a dec_code4, reemplazando los valores pregrabados que vienen ahí.

Fig. 6 Ingreso del UID del administrador en el sketch
Fig. 6 Ingreso del UID del administrador en el sketch

Después se carga el sketch al Arduino y se desconecta el cable USB para quitarle la alimentación. Recién ahí se arma el montaje práctico de la figura 7, que explica cómo conectar todos los componentes.

Fig. 7 Esquema de cableado del control de accesos
Fig. 7 Esquema de cableado del control de accesos

Los materiales que hay que juntar

La lista para armar el proyecto es la siguiente.

  • Módulo RFID-RC522
  • Arduino UNO
  • Protoboard con rieles de alimentación laterales, rojo y negro, o rojo y azul
  • Pulsador de 6×6 mm
  • LED azul, o de otro color a elección
  • 2 resistencias de 220 ohm
  • 1 resistencia de 10 kilo ohm
  • 5 cables jumper macho a macho
  • 7 cables jumper macho a hembra
  • 1 puente jumper de 3 pines
  • 1 puente jumper de 5 pines
  • 1 puente jumper de 19 pines
  • 4 tags, uno de ellos marcado como administrador

La lista de cables y puentes replica el montaje exacto de la guía. Se puede variar, siempre que las conexiones propuestas queden bien hechas, porque de lo contrario el circuito no funciona. Sobre todo hay que evitar invertir la alimentación de 3,3 V y GND, porque eso quema el módulo.

¿Y si la protoboard trae los rieles cortados?

Durante las pruebas apareció un modelo de protoboard con los rieles de alimentación interrumpidos en el tramo central. La propia placa lo indicaba con el corte de las líneas serigrafiadas roja y azul, pero como es poco habitual no lo notaron al principio.

El resultado fue que el LED rojo del módulo RC522 igual se encendía, por la corriente que transportan las señales, pero la lectura de tags no funcionaba. Hubo que agregar dos cables para unir los dos rieles a lo largo de todo su recorrido, es decir, para puentearlos.

Fig. 8 Detalle de la conexión de los rieles de alimentación de la protoboard
Fig. 8 Detalle de la conexión de los rieles de alimentación de la protoboard

Cómo funciona el control de accesos

Con el circuito completo sobre la protoboard y las conexiones revisadas, basta con reconectar el cable USB entre el PC y la placa Arduino UNO. Se va a ver el LED rojo del módulo RC522 encendido, que como ya se explicó no indica que la alimentación sea la correcta, mientras los dos LED rojo y azul de la protoboard siguen apagados.

Al abrir el Monitor Serie del IDE de Arduino aparece el mensaje "Controllo accessi attivo" (control de accesos activo). La primera operación es acercar el tag de administrador al módulo. Si todo está en orden, los dos LED parpadean tres veces al mismo tiempo y quedan encendidos, y el Monitor Serie muestra el mensaje de la figura 9, que indica que el modo administrador está activo.

Fig. 9 Modo administrador
Fig. 9 Modo administrador