Tengo un proyecto divertido en mente con RFID, pero antes de nada creo que es necesario un breve intro.

¿Qué es RFID?? RFID es identificación por radiofrecuencia, aunque, como tantas otras cosas, es más conocida por sus siglas en inglés (Radio Frecuency Identification).

Somos usuarios de ella, consciente o inconscientemente. Las etiquetas que pitan en los arcos de seguridad de los grandes almacenes utilizan esta tecnología, identificación en convenciones, control de accesos en hoteles, activar/desactivar la luz de la habitación del hotel o juegos de videoconsola, los famosos Skylanders fueron pioneros en el uso de esta tecnología para jugar.

Ahora que sabemos que es, te alegrará saber que es posible integrar esta tecnología en nuestros proyectos Arduino.

Hay mucha documentación al respecto y no voy a escribir nada nuevo, únicamente mi experiencia personal y un pequeño avance para una futura entrada que tengo en mente. Empecemos!!! 😛

Hardware, lector RFID MF522

Necesitamos disponer de un lector RFID MF522.

* Los dispositivos leídos son tarjetas RFID. Cada tarjeta tiene un ID que la identifica.

* También es posible escribir en las tarjetas, aunque los dispositivos se conocen como lectores RFID por ser su utilidad mayoritariamente la lectura.

Hay muchas y muy baratas opciones en el mercado! por lo que cuesta un café se encuentran en Amazon y en Aliexpress.

Instalando librerías, MFRC522

Podríamos trabajar con el lector mediante el puerto serie, utilizando la librería SPI (Serial Periferal Interface), sin embargo, es algo engorroso.

En su lugar vamos a utilizar la MFRC522 Library de Miguel Balboa que nos simplificará mucho el trabajo. Podéis descargarla de GitHub https://github.com/miguelbalboa/rfid

Descargamos el zip a local e importamos la librería:

  • Abre el Arduino-IDE
  • En menú Programa/Incluir Librería/Añadir librería .zip…
  • Se abrirá una ventana, buscamos el zip en la ruta donde lo descargamos anteriormente y Aceptar

Esto únicamente hay que hacerlo una vez.

Ya tenemos disponible la lib para todos nuestros proyectos Arduino.

Conexiones y pines

El lector tiene 7 pines: MISO, SCK, SS (SDA), MOSI, GND, 3.3V y RST

Conectamos el lector a Arduino del siguiente modo, D es Digital:

// MF522 -> ARDUINO
// —————————
// MISO -> D12
// SCK -> D13
// SS -> D10
// MOSI -> D11
// GND -> GND
// 3.3V -> 3.3V
// RST -> D9

* Cuidado con el orden
MUY IMPORTANTE!!! conectar a 3,3V si no queremos efecto humo y olor a quemado.

 

El código…

Ya tenemos el lector rfid, el arduino, los pines cableados, … vamos al código:

Incluimos las cabeceras a SPI y MFRC522:

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

Creamos una instancia para acceder al lector, debemos pasar como parámetros los pines SS y Reset, en nuestro caso D10 y D9.

MFRC522 lector(10, 9);  // Creamos instancia del lector RFID

Inicializamos el monitor Serie para el debug, el SPI y RFID:

void setup() {   
   Serial.begin(9600);  // Inicializa monitor Serie
   Serial.print(F("setup..."));
   SPI.begin();         // Inicializa SPI
   lector.PCD_Init();   // Inicializa RFID
}

El bucle principal espera a detectar una tarjeta presente (PICC_IsNewCardPresent), se incluye un delay de 300ms entre chequeo y chequeo, si detecta tarjeta la lee (PICC_ReadCardSerial) y muestra el resultado por el monitor Serie.

void loop() {
   if (lector.PICC_IsNewCardPresent()) {
      // si detecta una tarjeta...
      if (lector.PICC_ReadCardSerial()) {
        leeTarjeta();
      }
   }
   delay(300); // pausa el bucle 300ms
}

El valor es devuelto como un array de bytes lector.uid.uidByte de tamaño lector.uid.size, para imprimirlo utilizamos la función printArray()

void leeTarjeta(){
  // lee tarjeta:
  Serial.print(F("ID: "));
  printArray(lector.uid.uidByte, lector.uid.size);
  Serial.println(); 
  lector.PICC_HaltA(); // da por finalizada la lectura
}

void printArray(byte *buffer, byte bufferSize) {
   for (byte i = 0; i < bufferSize; i++) {
      Serial.print(buffer[i] < 0x10 ? " 0" : " ");
      Serial.print(buffer[i], HEX);
   }
}

Solo queda pasar las tarjetas por el lector y ver el ID en el monitor:

 

Proyectos posibles … mmmm¿???

¿Podría tener una lista de tarjetas activas, conectarlo a una cerradura electrónica y así tener un control de acceso? ¿Controlar un relé para que solo de corriente cuando está cerca una tarjeta autorizada? ¿Un sistema de bloqueo para el ordenador por RFID? ¿Quizá algún juego?…

 

Se aceptan sugerencias. Cualquier duda en comentarios.

Saludos!

 

Referencias:

 

 

 

2 comentarios sobre «Arduino, trasteando con RFID, MFRC522»

  1. Anónimo

    ¿Como evito que un control de acceso por RFID detecte la presencia de un trasmisor RFID?

    1. admin

      pues depende…
      ¿que rango tiene el control de acceso?, ¿un control de acceso de tarjetas por proximidad?, ¿es un arco?
      ¿el transmisor es portatil? ¿es posible desconectar la corriente del transmisor temporalmente?

Deja tu comentario