Hoy voy hablar después de tiempo de RFID, que es con el que inicio una nueva serie que espero crezca de cuadernos técnicos en los que ire poniendo en un documento PDF y ejemplo de elementos que podemos usar con Arduino.
Comenzamos aunque te aconsejo que si te llama la atención este breve POST vayas a la sección de Cuaderno Tecnico «RFID» que esta debajo del menú Arduino donde profundizamos más y ademas tienes los ejemplos de programación que mejoraremos y ampliaremos.
¿Que es RFID?
RFID (Radio Frequency Identification), es un sistema de identificación por radio frecuencia de etiquetas o tarjetas en las que se puede almacenar información. Una gran ventaja frente a los códigos de barra es que se pueden actualizar por eso se utilizan también para medios de pagos como por ejemplo el abono transporte.
Las etiquetas o tarjetas pueden ser pasivas o activas y lo que las diferencias es que las activas no llevan baterías, increíblemente se alimenta con las ondas que lanza el lector para preguntarla, y las activas que si tienen baterías y claro en este caso podemos leerlas desde mayores distancias y no solo unos centímetros.
Empezamos con las conexiones
Yo he utilizado el lector/escritor RC-522, que me permite leer tarjetas con una frecuencia de 13,56 Mhz y el estandar 14443, que es el más utilizado en Arduino y se basa en el chip MFRC522 de philips aunque en realidad es de la empresa NXP que se crea a partir de la división de semiconductores de esta.
El esquema de conexión es el siguiente:
- SDA a D10
- SCK a D13
- MOSI a D11
- MISO a D12
- IORQ No la conectaremos aunque otro día escribiremos de como podemos utilizarla.
- GND a la masa.
- RST a D9
- 3.3V al positivo de una alimentación de 3,3V que usaremos la del arduino.
Es conveniente poner un adaptador de niveles ya que los D tendrán 5 V y es recomendable usar 3,3 en los puertos SPI pero como no tenia en el momento de escribir este POST he preferido poner lo que realmente he utilizado, cuando los compre ya actualizare el nuevo esquema y ampliare los tipos de tarjeta según vayan cayendo en mis manos.
Continuamos con la programación
La programación la realizamos con la librería de Miguel Balboa MFRC522 que permite usar este lector mediante una conexión SPI.
Voy a resumir la programación pues lo mejor es ver y jugar con los ejemplos que he colgado el Cuaderno Tecnico «RFID».
Lo primero es crear el objeto lector e iniciarlo :
MFRC522 rfid(SS_PIN, RST_PIN);
rfid.PCD_Init(); ;
Luego esperaremos a que se acerque una tarjeta y leemos los datos básicos de la tarjeta como es el tipo y el UID
rfid.PICC_IsNewCardPresent();
rfid.PICC_ReadCardSerial()
Esto es importante para luego saber como leer el resto de los datos o interactuar con la tarjeta, reduciendo saldo por ejemplo, pues según sea el tipo así estarán organizado los datos. Así por ejemplo en nuestros ejemplo se usa la tarjeta MIFARE CLassic de 1K que por ejemplo tiene la particularidad de tener que autentificarse en cada lectura de sector/bloque que realice, todo esto con una descripción de como se organizan los datos de usuario y de permiso lo puede ver en el Cuaderno Tecnico «RFID» y que iré actualizando según tenga diferentes tipos de tarjeta.
El código para la lectura de datos de usuario y poniendo la clave por defecto de fabrica, ya que esta la podremos cambiar, seria el siguiente.
MFRC522::MIFARE_Key clave;
byte Bloque0 = sector*4; // Calculamos direccion bloque 0 del sector
byte dirBloque = Bloque0 + bloque; // Direccion del bloque a leer
// Clave por defecto 0xFFFFFFFFFFFF
for(byte i =0 ; i< 6 ; i++) clave.keyByte[i] = 0xFF;
estado = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, Bloque0, &clave, &rfid.uid);
Hasta aquí un resumen de como leer una tarjeta RFID y que puedes encontrar en Cuaderno Tecnico «RFID». que es donde tendré todas las actualizaciones de nuevas operaciones y tarjetas, así como si encuentro otros lectores de interes. Para eso en la página del Cuaderno Tecnico «RFID» estara el historial de cambios para saber que se añade o modifica.
Espero que disfrutéis.