jueves, 9 de abril de 2020

módulo Lector RFID RC522 (Configuracion)



La tecnología de identificación por radiofrecuencia RFID(Radio Frequency IDentification) se ha popularizado entre los sistemas más efectivos de identificación, actualmente es utilizada en una inmensa variedad de aplicaciones principalmente en aquellas que manejan inventarios con una gran cantidad de artículos, superando incluso a el tradicional código de barras.


El principio de funcionamiento de la tecnología RFID se basa en transmitir la identidad de un objeto (número de serie único) mediante ondas de radio. 

Las etiquetas RFID son dispositivos pequeños, que pueden ser adheridas o incorporadas a un producto, un animal o una persona. Contienen pequeñas antenas para recibir y enviar peticiones por radiofrecuencia desde un emisor-receptor RFID. Existen etiquetas pasivas no requieren alimentación eléctrica interna con alcance de algunos centímetros, mientras que las activas sí lo requieren con alcances mucho mayores.

En las siguientes líneas se analizará un lector de tarjetas RFID, para trabajar con la tecnología Arduino, este lector es totalmente compatible con las tarjetas Arduino y se encuentra disponible a un costo bastante accesible.

Módulo RFID RC522

El módulo utiliza 3.3V como voltaje de alimentación y se controla a través del protocolo SPI, por lo que además de Arduino es compatible con casi cualquier microcontrolador o tarjeta de desarrollo.

El RC522 utiliza un sistema avanzado de modulación y demodulación para todo tipo de dispositivos pasivos de 13.56Mhz.

El circuito MF RC522 es utilizado para comunicación inalámbrica a 13.56Mhz para escribir o leer datos de aplicaciones de bajo consumo de energía y tamaño reducido. 
Módulo RFID RC522



Características


  • Corriente de operación: 13-26mA a 3.3V
  • Corriente de standby: 10-13mA a 3.3V
  • Corriente de sleep-mode: <80 span="">
  • Corriente máxima: 30mA
  • Frecuencia de operación: 13.56Mhz
  • Distancia de lectura: 0 a 60mm
  • Protocolo de comunicación: SPI
  • Velocidad de datos máxima: 10Mbit/s
  • Dimensiones: 40 x 60 mm
  • Temperatura de operación: -20 a 80ºC
  • Humedad de operación: 5%-95%
  • Máxima velocidad de SPI: 10Mbit/s

1. Conexión del entre el módulo RFID y Arduino

La correspondencia de pines entre una tarjeta Arduino y el lector RC522 se muestra en la siguiente tabla. 

Módulo RC522
Arduino Uno, Nano
Arduino Mega
SDA (SS)
10
53
SCK
13
52
MOSI
11
51
MISO
12
50
IRQ
No conectado
No conectado
GND
GND
GND
RST
9
9
3.3V
3.3V
3.3V
RFID: Identificación por RF | Tienda y Tutoriales Arduino



El módulo trabaja con un voltaje de 3.3V, como se mencionó anteriormente, por lo que la parte lógica también debería trabajar con el mismo nivel de voltaje.



2. Programación del Módulo RC522: Lectura del código de identificación

Para el correcto funcionamiento del Módulo con Arduino es necesario descargar y agregar a nuestro proyecto la librería correspondiente, a este respecto existen varias que han desarrollado y puesto a disposición de los estudiantes algunos desarrolladores en este caso será utilizada la MFRC522.

         Librería RFID

En seguida se muestra un sketch, con el código para leer el numero de identificación del las tarjetas u tags.

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

#define RST_PIN	9    //Pin 9 para el reset del RC522
#define SS_PIN	10   //Pin 10 para el SS (SDA) del RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); //Creamos el objeto para el RC522

void setup() {
	Serial.begin(9600); //Iniciamos la comunicación  serial
	SPI.begin();        //Iniciamos el Bus SPI
	mfrc522.PCD_Init(); // Iniciamos  el MFRC522
	Serial.println("Lectura del UID");
}

void loop() {
	// Revisamos si hay nuevas tarjetas  presentes
	if ( mfrc522.PICC_IsNewCardPresent()) 
        {  
  		//Seleccionamos una tarjeta
            if ( mfrc522.PICC_ReadCardSerial()) 
            {
                  // Enviamos serialemente su UID
                  Serial.print("Card UID:");
                  for (byte i = 0; i < mfrc522.uid.size; i++) {
                          Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
                          Serial.print(mfrc522.uid.uidByte[i], HEX);   
                  } 
                  Serial.println();
                  // Terminamos la lectura de la tarjeta  actual
                  mfrc522.PICC_HaltA();         
            }      
	}	
}

   

Ahora explicaremos por partes el funcionamiento del código:

Crear una instancia del RC522 (Creamos un objeto RC522).

#define RST_PIN	9    //Pin 9 para el reset del RC522
#define SS_PIN	10   //Pin 10 para el SS (SDA) del RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); 

Para inicializar el objeto MFRC522, solo es necesario especificar los pines de Reset y SDA(SS) del módulo, el resto de pines trabajan con la interface SPI de la tarjeta Arduino.

Inicialización del RC522.

SPI.begin();        //Iniciamos el Bus SPI
mfrc522.PCD_Init(); // Iniciamos  el MFRC522


Con esta función inicia y configura el RC522, con lo cual queda preparado para recibir datos cada vez que el código del Arduino lo llame.

Instanciar para detectar una tarjeta presente.
mfrc522.PICC_IsNewCardPresent()


Como resultado esta función devuelve true o false, si es que se encuentra o no una tarjeta presente.

preparar la tarjeta para su lectura.

     mfrc522.PICC_ReadCardSerial()


Esta función es llamada si y solo si el resultado de la función anterior es true, es decir si hay una función presente, y prepara la lectura de la misma.

Se obtiene el tamaño del código de identificación de la tarjeta.

mfrc522.uid.size


La instrucción anterior retorna el tamaño del código de la tarjeta.

Lectura del codigo
mfrc522.uid.uidByte

Inicializamos el código para que el arreglo inicie en la posición cero con el comando mfrc522.uid.uidByte[0].
Finalizando la lectura.
mfrc522.PICC_HaltA();         
 

Con esta función se termina la lectura y la función IsNewCardPresent() devolverá falso mientras esta no se retire. Después de retirar la tarjeta, queda nuevamente preparado para una siguiente lectura.

Imprimiendo la lectura.
Serial.print("Card UID:");
     for (byte i = 0; i < mfrc522.uid.size; i++) {
         Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
         Serial.print(mfrc522.uid.uidByte[i], HEX);   
     } 

Finalmente, solo enviamos el código leído a través de puerto serial, para su visualización basta abrir el monitor serial.