El shield PN532 es una placa de expansión para Arduino diseñada y distribuida por Adafruit Industries que le permite utilizar RFID/NFC. Se trata de una placa con una antena de de 13.56 MHz que posee dos protocolos de comunicación: SPI e I2C.
Esta placa es muy versátil. Puede ser utilizada como Shield o como un Breakout Board. Yo prefiero utilizarla como shield debido a que puedo conectarla directamente sobre mi Arduino UNO o el Yún que son los modelos que utilizo más frecuentemente. Podemos soldar los pines en las pistas que trae la placa y nos quedará algo similar a esto:
Esto facilita mucho el uso de este dispositivo ya que las conexiones quedan fijas y fuertes.
El uso de este dispositivo es muy sencillo. Adafruit posee una librería que puede ser descargada gratuitamente desde Github. En la librería vienen varios ejemplos dentro de la carpeta.
Yo me he tomado la tarea de sintetizar el código de uno de los ejemplos para la detección e impresión de los códigos de tarjetas (o tags) del estándar ISO 14443a, el cual es uno de los más utilizados del mundo. En Panamá, por ejemplo, se utiliza en el Metro de Panamá y en el Metrobus con las tarjetas prepagadas.
El código es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <SPI.h> //LIbreria para el uso de SPI #include <Wire.h> //Libreria para el uso de I2C #include <Adafruit_PN532.h> //Libreria para el uso del shield //Parámetros por default #define PN532_IRQ (2) #define PN532_RESET (3) Adafruit_PN532 nfc(2, PN532_RESET); //Instancia de la libreria del PN532 void setup(void) { //Se inicia comunicacion serial Serial.begin(115200); //Se inicia el objeto NFC nfc.begin(); //Se verifica si el shield esta conectado if (! nfc.getFirmwareVersion()) { Serial.print("No se ha encontrado un PN53X conectado al Arduino"); } nfc.setPassiveActivationRetries(0xFF); nfc.SAMConfig(); } void loop(void) { boolean success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; uint8_t uidLength; //Se hace la lectura del tag success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); //Si se consigue una lectura, se hace la impresion primero colectando los caracteres en un buffer if (success) { String code = ""; for (int i = 0; i < uidLength; i++) { //Se concatenan los bytes dentro de un buffer code += String(uid[i], HEX); } //Los caracteres se pasan a letras mayúsculas code.toUpperCase(); //Se imprime el código Serial.println(code); //Pausa de un segundo delay(1000); } else { Serial.println("No se ha podido leer el TAG"); } } |
Este es un código sencillo que solamente imprimirá el código cuando sea detectado. En cuando a los tag de RFID, a través del tiempo he ido adquiriendo algunos dispositivos para hacer diferentes pruebas. Para poder hacer pruebas con este shield se necesita que los TAG trabajen a 13.56 MHz y cumplan con el estándar ISO 14443a que ya mencionamos. Existen otras bandas de frecuencia y otros estándares dentro de cada frecuencia, por lo que se debe tener cuidado a la hora de adquirir los tag. A continuación les muestro algunas fotos de los TAG y las tarjetas de PVC tamaño Carnet con los que cuento.
Cuando subimos el código al Arduino y pasamos cualquiera de estas tarjetas por el lector, en el Monitor Serie veremos: Estos son los códigos de tres tarjetas leídas por el shield PN532. Una vez obtenidos estos códigos podemos hacer lo que sea que necesitemos hacer utilizando la tecnología RFID. Hay varios ejemplos en la web y en el propio paquete que trae la librería que llevan este tema mucho más a fondo y que ofrecen opciones como la escritura de los códigos de cada tarjeta. Espero que la información presentada les sea de utilidad para ustedes. Saludos.
Hola, buen articulo. Tengo una duda, ¿es posible conectar por uart? mi idea es utilizarlo con una raspberry pi 3
No estoy seguro. Verifica la datasheet