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.
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="">80>
- 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
|
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.
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.