bclose

RFID: Identificación por RF

RFID: Identificación por RF

 

 

    • Presentar los RFID.
    • Comprender su utilidad.
    • Conectando un sensor RFID sencillo a Arduino.

 

Material requerido.

Imagen de Arduino UNOArduino UNO o equivalente.
kit rfidUn Lector de RFID y alguna tarjeta, llavero o tag que podamos usar

Identificando elementos

 

Hay cosas que nos parecen tan normales que al final ni siquiera reparamos en ellas, porque nos parece que no hay otra manera de hacer las cosas, o simplemente porque no dedicamos un minuto a pensar en cosas que damos por supuestas.

Por ejemplo, nos parece normal llegar a un supermercado y que la cajera identifique los productos con un código de barras de forma inmediata y lea su precio y características, pero esto es algo que a nuestros abuelos les hubiera parecido magia (Y probablemente a la mayor parte de la gente también aunque pongan cara de seta)

Los códigos de barras (o Barcodes) están muy extendidas por todos los supermercados y otras tiendas para identificar con luz un cierto producto. Son rápidos baratos y espectaculares. Solo necesitan una etiqueta con un código extraño en forma de barras que una pistola láser identifica con rapidez.

Los códigos de barras son muy baratos, justo un papelito con barras de distinta anchura o bien impresos en la envoltura del producto, pero también tienen  unos ciertos inconvenientes. Si se rayan se tornan ilegibles y esto es relativamente frecuente y además no se pueden reescribir (¿A que no lo habías pensado?) Es tecnología pre digital.

Pero el tema de esta sesión no son los códigos de barras (Eso quizás llegue en un futuro)  sino más bien su sucesor, las etiquetas RFID (O RFID tags).

Para empezar ya estás acostumbrado a su uso, aunque quizás no te hayas dado cuenta. Son esas etiquetas que te pitan a destiempo cuando sales de las grandes superficies, o los antirrobos en prendas de las tiendas de ropa, que se identifican mediante un arco.

Hace ya mucho tiempo que los códigos de barras están obsoletos, pero son tan baratos y una tecnología tan bien resuelta y establecida que nadie quiere oír hablar de cambiarla, pero más pronto que tarde los RFID van a sustituir a los códigos de barras.

 
  • RFID son las inciales de identificacion por radio frecuencia en inglés (Radio Frequency IDentification)   

Vale, ¿Y que son los RFID? Bueno son simplemente un chip digital minúsculo de memoria, que puede contener una identificación en forma de código e incluso información de diferentes cuestiones grabados en él. Son como un pendrive pero canijo y por radio, para entendernos

¿Eso es todo? Pues sí, pero además tiene una antena que permite dos cosas poco frecuentes, una identificarlos por Radio Frecuencia (O RF)  sin contacto a distancias de entre nos pocos centímetros y varios metros, mediante un receptor adecuado, y la otra es que la propia señal de RF que usamos para identificarlos es capaz de alimentar el chip de la etiqueta RFID sin necesidad de batería ¿Qué te parece el truco?

Cuando la etiqueta RFID (O Tag según la lengua de Albión) no lleva batería, se llaman pasivas y son las más baratas, aunque también las hay con batería y se las llama activas, pero ignoraremos estas ultimas con la elegancia que nos caracteriza, estas últimas.

Normalmente los tags RFID son una especie de pegatina que lleva diseños más o menos extravagantes de pistas metálicas muy finas que hacen las veces de antena y te has hartado a verlas en ropa y otros productos pero probablemente no sabías lo que era:

Sticker

Estas son las típicas insertas en las etiquetas de la ropa como antirrobo, pero las hay con aspectos muy variados, dependiendo de la forma y diseño e la antena y el destino final de las etiquetas:

RFID_label2
flexible

Pero la idea es siempre la misma, identificar el tag mediante la emisión de ondas electromagnéticas desde un lector, que alimentan un circuito de memoria interno, para que nos envíen por RF una identificación que podamos usar para validar o identificar un producto cualquiera.

Arco y etiqueta RFID
 
  • Ya ha salido antes en algún momento la idea de transponder aunque en otro ámbito. Es un sistema electrónico que envía una identificación bajo pedido externo, y estas etiquetas RFID lo son con todos los derechos.  

Y por supuesto tienen un montón de ventajas respecto de otros sistemas como los códigos de barras:

 
  • Son pasivos en su mayoría y pueden permanecer inactivos durante años.
  • No se rayan o degradan, ni con el tiempo ni con campos magnéticos, ni con el roce.
  • No necesitan verse para realizar la identificación, porque la mayor parte de los materiales son transparentes a las ondas RF que se usan.
  • Pueden disponer de una memoria interna que contenga toda la identificación del producto o su trazabilidad. Las hay de 1K, 4k y …
  • Se pueden utilizar como llaves maestras para abrir cerraduras electrónicas, tanto como para identificar productos o personas.
  • Se pueden reescribir y leer tantas veces como quieras, e ir añadiendo su historia en la propia tarjeta. Por ejemplo en una tarjeta de pago, puedes conservar las ultimas 100 compras realizadas, por ejemplo.
  • Lo que ha retrasado la implantación masiva de estos RFID ha sido más el precio que su ventaja.  

Imagínate una tarjeta de plástico con un tag interno. Lo puedes usar para llave de una cerradura, o probablemente la tarjeta de Bus o Metro que tienes en el bolsillo sea de estas.

Puedes usar estas tarjetas para que su ID interno corresponda con tu clave de acceso al ordenador y por ello solo quien tenga tu tarjeta puede iniciar sesión en él.

O si cada producto que hay en el supermercado llevara un tag RFID anexo, podrías ir echando a la bolsa y salir tranquilamente por el arco de salida y este te leería sobre la marcha los productos que te llevas y la identificación de tu bolsillo o tarjeta de crédito, con lo que haría inventario inmediato y te cargaría la VISA sin más (Hombre convendría teclear el pin de la visa para evitar robos)

No serían necesarias cajeras, porque la factura se haría leyendo los IDs de los productos que hayas cogido y el cargo automático. Sin necesidad de parar en caja (Parecería que te ibas sin pagar, pero. Ya te habrían fichado).

Y casualidad, Arduino está perfectamente preparado para este tipo de cosas ya ves, y en nuestro kit hay un set de un lector / grabador de RFID, además de una tarjeta de identificación de plástico y un llavero con tag, para que podáis hacer pruebas.

Y a eso vamos en esta sesión.

 

Conectando el Lector RFID

 

En nuestro kit de inicio Arduino, y también en la tienda podréis encontrar un pequeño conjunto de lector grabador de tags RFID, el RC522, así como una tarjeta y un llavero con identificadores que es con lo que vamos a hacer las pruebas.

El lector está basado en el típico chip MFRC522 para lectura y escritura de tags RFID:

vista principal

El chip MFRC522. Da soporte a la lectura y escritura de los tags en diferentes condiciones y con control de errores, de una forma sencilla, aunque no puede identificar más que un tag a la vez, a diferencia de otros lectores más profesionales, y requiere que la distancia de lectura sea de una par de centímetros a lo sumo (Es lo que tienen las cosas baratas)

La tarjeta presenta un interface SPI para comunicar nuestro Arduino con el MFRC522 y no tiene más dificultad. De hecho creo que os sorprenderá ver lo fácil que resulta leer estas etiquetas RFID.

Empecemos por el lector y sus pines:

patillaje externo

Como podéis ver no hay más que los pines de control SPI y la alimentación del módulo. La conexión es trivial:

Modulo RC522Arduino
SDAD10
SCKD13
MOSID11
MISOD12
IRQ—-
GNDGND
RSTD9
3.3V3.3V
sesion 170_bb

 

Programa de control

 

Como siempre vamos a empezar por descargar una librería para controla el lector, llamada rfid-master y la instalamos siguiendo el procedimiento habitual.

Incluimos la librería RFID y la SPI, para controlar la tarjeta lectora: Prog_170_1

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

Ahora definimos los pines que vamos a usar y creamos un objeto de la clase MFRC522 para nuestro lector:

#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);

Tenemos que hacer ahora una cosa un poco extraña al principio. Estas tarjetas y lectores soportan una clave de encriptación de 6 bytes hexadecimales, (Que por defecto es FF FF FF FF FF FF) pero que podríamos definir a nuestro antojo por seguridad para que no lea nuestra clave cualquiera.

 
  • Ojo que no es algo muy seguro y parece que no hay mucha dificultad en reventarla, pero menos es nada y así subimos el nivel al que venga.  

Pero en cualquier caso tenemos que pasarle una clave a nuestra librería y luego la rellenamos:

MFRC522::MIFARE_Key key;

Y cuando leamos la ID de la etiqueta necesitamos almacenarla en un array por ejemplo:

byte nuidPICC[3];

En el setup() vamos a inicializar la puerta serie, el SPI y el objeto rfid, y después rellenar el valor de la clave (Al valor por defecto):

Serial.begin(9600);
SPI.begin();                        // Init SPI bus
rfid.PCD_Init();                // Init MFRC522

for (byte i = 0; i < 6; i++)
   { key.keyByte[i] = 0xFF;
   }

Para el programa principal vamos a usar un par de funciones de apoyo que viene con la librería pero cuyo único interés es ahórranos trabajo. Podéis revisarlas en el programa aporque no tienen nada raro, ni tampoco mayor interés.

Empezamos buscando un tag en el lector y si no lo encuentra, vuelta a empezar, pero si la encuentra la lee:

if ( ! rfid.PICC_IsNewCardPresent())
       return;

if ( ! rfid.PICC_ReadCardSerial())
       return;

En el programa encontrareis ahora algunas líneas un poco extrañas, que he sacado del ejemplo original, pero que son bastante sencillas conceptualmente. Primero comprobar que la tarjeta leída es de un tipo que reconocemos, y si no volvemos a empezar:

if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) 
   {
       Serial.println(F("Your tag is not of type MIFARE Classic."));
       return;
   }

Comprobamos el tipo de tarjeta detectada (Básicamente la cantidad de memoria disponible) e imprimimos su tipo:

if (rfid.uid.uidByte[0] != nuidPICC[0] ||
    rfid.uid.uidByte[1] != nuidPICC[1] ||
    rfid.uid.uidByte[2] != nuidPICC[2] ||
    rfid.uid.uidByte[3] != nuidPICC[3] )
     {
        Serial.println(F("A new card has been detected."));
        Serial.println(F("The NUID tag is:"));
        Serial.print(F("In hex: "));
        printHex(rfid.uid.uidByte, rfid.uid.size);
        Serial.println();
        Serial.print(F("In dec: "));
        printDec(rfid.uid.uidByte, rfid.uid.size);
        Serial.println();

        rfid.PICC_HaltA();
        rfid.PCD_StopCrypto1();
    }

Fíjate que una vez escritos los valores en la consola paramos la lectura y la encriptación en la tarjeta para ahorra energía. Recuerda que la antena emite RF intensa para alimentar el tag interno de la tarjeta y consume un tanto que conviene cortar si no está en uso

Cuando arranca, nuestro programa imprime esto:

Mensaje rfid

Y cuando pasas una tarjeta o llavero por encima del lector:

Mensaje rfid

Te presenta el ID del tag en hexadecimal y decimal. Si le pasamos ahora el llavero, por ejemplo, veras como su ID es diferente:

Mensaje rfid
 
  • Creo que hasta ahora no habíamos comentado, que estos llaveros y tarjetas sencillos que usamos para estas pruebas, viene con un numero de ID pregrabado de 11 dígitos, diferente para cada uno de ellos y os dejo la tarea de calcular la posibilidad de que dos fabricantes usen el mismo número entre 1011..   

Sería muy interesante poner un Buzzer, que emitiera un pitido cada vez que lee correctamente una tarjeta y de eso modo sabríamos que hay una identificación positiva, pero os lo dejo como deberes para el que quiera nota, porque ya me he extendido más de lo que quería.

 

Resumen de la sesión

 

 

    • Hemos presentado el concepto de los RFID y un poco como funcionan.
    • Vimos el chip MFRC522 y el modulo Modulo RC522.
    • Vimos que ARduino no tiene problema con leer RFID.
    • Presentamos un programa de ejemplo de como leer la identificacion de un tag RFID. 
  • (37) Comments

      • Pedro Gonzalez

      puedo hacer que despues de que cargue el modulo en arduino, y ya me lea las tarjetas, el resultado que me genere o el codigo que da la tarjeta lo pueda lees desde un modulo de visual basic, ya me lee la tarjeta pero cuando le pido que me muestre la informacion me muestra letras y a veces un simoblo raro

    • Hola, muchas gracias por la información que compartes, siempre que busco algo sobre arduino termino en alguno de tus post y la verdad es que siempre son de mucha ayuda.

      Quería pedirte, si te es posible, algunas líneas de código a modo de ejemplo… Estoy intentando hacer funcionar este lector RFID y un módulo Micro SD por el bus SPI.
      Ya he hecho andar ambos por separado pero me resulta imposible hacerlos andar en conjunto… Entiendo que los pines MISO, MOSI Y SCK deben compartirse y que cada módulo debe tener su propio pin SS, también comprendo que se debe poner en LOW solamente el pin SS del módulo con el que se desee establecer comunicación… Mi problema es que no entiendo de qué manera hacer uso del cambio de estado de los pines SS de cada slave para comunicarme con uno u otro… llevo varios días buscando sobre el tema y toda la info que encuentro es teórica o “esquemática”, se explica el concepto a aplicar para establecer comunicación con múltiples dispositivos (el me wueda claro) pero en cuanto a código se refiere no logro encontrar nada de donde agarrarme… Agradecería si pudieras explicarme que líneas debería agregar a este código para lograr que You will need to select some options when setting up your interface. These options must match those of the device you’re talking to; check the device’s datasheet to see what it requires.

      The interface can send data with the most-significant bit (MSB) first, or least-significant bit (LSB) first. In the Arduino SPI library, this is controlled by the setBitOrder() function.

      The slave will read the data on either the rising edge or the falling edge of the clock pulse. Additionally, the clock can be considered “idle” when it is high or low. In the Arduino SPI library, both of these options are controlled by the setDataMode() function.

      SPI can operate at extremely high speeds (millions of bytes per second), which may be too fast for some devices. To accommodate such devices, you can adjust the data rate. In the Arduino SPI library, the speed is set by the setClockDivider() function, which divides the master clock (16MHz on most Arduinos) down to a frequency between 8MHz (/2) and 125kHz (/128).

      If you’re using the SPI Library, you must use the provided SCK, MOSI and MISO pins, as the hardware is hardwired to those pins. There is also a dedicated SS pin that you can use (which must, at least, be set to an output in order for the SPI hardware to function), but note that you can use any other available output pin(s) for SS to your slave device(s) as well.

      On older Arduinos, you’ll need to control the SS pin(s) yourself, making one of them low before your data transfer and high afterward. Newer Arduinos such as the Due can control each SS pin automatically as part of the data transfer; see the Due SPI documentation page for more information.

      • Hola Pedro

        Me temo que voy un poc mal de tiempo para entrar en temas especificos, pero hablando de memoria me parece recordar que para activar el pin SS bastaba con poner ese en LOW y todos los de los otros dispositivos en HIGH

      • Eduardo

      Hola, me gustaria sabe las funciones que incluye la libreria MFRC522.h y como usarlas, vamos un resumen de funciones explicando para que sirven y como se usan.

      Muchas gracias de antemano

    • buenas tardes, estoy haciendo funcionar el modulo rc 522 con un arduino mega. se me presento el siguiente problema: solo me lee el llavero que vino con el modulo y a la tarjeta ni la registra. Compre llaveros adicionales de 13.56Mhz y 125k y tampoco los lee. Puede ser un problema en el Modulo? pense que la tarjeta estaba fallada en principio porque con el llavero de fabrica funciona bien, por eso compre los adicionales que tampoco me los lee.
      desde ya gracias por la ayuda aportada

      • Hola Jose, EL problema es que tenemos varios formatos o normas de tarjetas RFID para que no sea facil e incompatibles entre si. Si te lee algun llavera el asunto es que esta correcto el lector y por regla general las tarjetas que lee son del tipo llamado MIFARE que es lo que debes buscar al comprar tarjetas

      • Francisco Javier

      Muchas gracias, creo que puede ser por la frecuencia uno de 16 y otro de 125. Mal por mi parte pero también el q me lo vendió.

      Gracias por la ayuda que nos das

      • Francisco Javier

      Hola, e realizado una prueba con un servo y dos Led, que es la que sale de ejemplo en la librería y me funciona muy bien con la tarjeta y el llavero que vienen con el lector, pero ahora quiero activar más llaveros y no me los lee, sabrías decirme porque puede ser?

      • Hola FJ, hay varios modelos o formatos de RFID que son incompatibles entre si y el formato que este chip lee se llama MFARE

        Si tu modelo no te lee los llaveros que tienes es porque sencillamente son de otro formato

    • Buenas, acabo de comprar este módulo e intente hacer mi primer hola mundo con este tutorial, pero al momento de pasar una tajeta o un llavero sobre el modulo en el monitor serial, solamente me imprime: “This code scan the MIFARE Classsic NUID. Using the following key: FF FF FF FF FF FF”, quisiera saber si tengo que hacer alguna configuración aparte de lo que se hace en este tutorial o es que mis módulos están defectuosos?

      • Hola Francky, no hay mas configuracion que la que os mostramos en el tuto hasta donde sabemos. ¿Que programa estas usando?

      • Iñaki

      Gracias por este buen tutorial. He creado un proyecto con Arduino UNO donde tras leerse la tarjeta RFID se activan dos servos. Funciona todo bien hasta pasadas varias horas que los servos comienzan a hacer pequeños ruidillos como si les llegara una pequeña señal y acaban estropeándose. El control de los servos no comparten ningún pin con la RFID. Sabes a qué podría deberse. Muchas gracias!

    • Buenas , genial el tutorial! , Alguien podria explicarme de una forma mas detallada como cambiar la clave por defecto de las tarjetas (FFFFFF), ya que estoy mirarndo varios tutoriales y no consigo hacerlo.
      Muchas Gracias.

      • Hola adrian, tengo pendiente un tuto al respecto porque efectivamente me dio bastante guerra el asunto y aun le he dedicado tiempo al respecto

    • Genial el tutorial.

      Tengo una pequeña duda estoy intentando cambiar la contraseña por defecto pero no se como hacerlo ,me podriais ayudar a cambiar dicha contraseña con el fin de que no me clonen las tarjetas.

      • Hola! Como hemos visto que hay varios comentarios acerca de esto intentaremos seguir con los tutoriales de RFID e incluir el cambio de contraseña. Un saludote.

    • Hola estoy buscando realizar un proyecto con arduino y RFID.
      La idea es tomar el dato de la tarjeta y compararlo con una base de datos. Me podrias orientar. Desde ya gracias.

      • Hola Marcelo, Llevo tiempo con ganas de hacer algo parecido. Basta con que uses un lector de RFID para leer la tarjeta con tu arduino por ejemplo, y envies via el puerto USB el ID a tu PC y aqui decidas ya si abres o no la puerta de acceso.

        Tambien puedes hacerlo solo con el arduino comparandolo con una lista de IDs aceptables, pero tendras que actualizar la lista de IDs reprogramando tu arduino

      • Sandra

      Buenas,

      muchas gracias por la información. Acabando de leer el post me ha surgido una duda. El número identificador de cada tarjeta que viene pregrabado, ¿puede ser modificado?

      Muchas gracias!

      • Hola Sandra, nunca lo he intentado pero sin duda se podra modificar

    • Buenas tardes! Tengo una preguntilla, quiero utilizar este modulo y a parte un lector de tarjetas micro sd donde escribire datos cada ve que haga una lectura el modulo en cuestion. El caso es que tanto el lector de micro sd como este modulo tienen mosi, miso y sck y arduino solamente tiene un pin de cada disponible. Que puedo hacer? se te ocurre alguna solucion? Quizas utilizar dos arduinos mini en vez de uno? En caso de ser asi tendria que mandar de un arduino a otro la combinacion en binario que el modulo me proporciona para despues guardarlo en la sd.
      Muchas gracias por tu tiempo!

      • Pere

      Hola Admin,

      Felicitarte por compartir tus conocimientos y lo bien que estas haciendo los tutoriales.

      Saludos

    • Buenas, me gustaria saber si con los pasos que esta dando podria “introducir” dos digitos a la tarjeta, para que cuando los vaya pasando me descuente los digitos hasta llegar a 0 y que sea inservible la tarjeta hasta que la recargue

      Es para un sistema de creditos en unas maquinas de ocio.

      Un saludo

      • Hola Havi, desde luego que si. Tengo previsto escribir una serie de tutos sobre los RFIDs y el proyecto que planteas es d elo mas interesante. No se cuando hare esto pero llegara

      • Jorge

      Sí. He estado informándome y los lectores UHF con antena permiten leer a distancias de 5 o 6 metros que sería lo ideal para esta tarea. Pero son difíciles de conseguir y muy caros. En internet no hay demasiada información.

      Respecto a lo del dorsal en el zapato, ha ido cambiando. En el último año he asistido a muchas carreras donde el chip iba pegado por detrás del dorsal y no especificaban que te lo pusieras en ninguna parte concreta, así que el 90% lo llevaban en el abdomen y sin problema. No sé si el criterio obecederá más al coste de las etiquetas o a la polarización del lector en sí.

      • Hola Jorge, Por una de esas casualidades que pasan en la vida, acabo de comprar esta mañana unos lectores RFID a distancia para un proyecto que estamos evaluando y estoy en contacto con algunos proveedores chinos (Que es a quien hemos comprado unas cuantas cosas) y si quieres puedo hacer una consulta para ver lo que costaria un lector de esas caracteristicas

        El que yo he cogido han sido sobre 500€ (Ya veremos luego la aduana y demas) y en principio deberia permitir leer a 20 metros, otro problema es que midiese justo a cruzar la raya. Esa va a ser la consulta si te parece

        UN saludo

        charly

          • Johanny Pérez

          buenos días hermano, cómo haría con el arduino o qué agregaría para aumentar la distancia de lectura a unos 10 – 15 metros, gracias.

          • Hola Johanny! Pues si buscas verás que venden lectores que pueden leer a la distancia que comentas, pero claro el precio sube con la distancia.

          • Hola Jhoanny, No es posible esta distancia con ese lector de RFID, pero si que existen algunos de mayor alcance como los que fabrica invelion, y que puedes encontrar enseguida en una busqueda en google

      • Jorge

      Hola Admin. Lo primero darte las gracias por todos los tutoriales que te curras que son una pasada. Mi pregunta es si esto es extrapolable a lectores de más distancia que permitiera, por ejemplo, identificar dorsales (con su etiqueta RFID) como los sistemas de cronometraje de las carreras de running que ahora están tan de moda.

      Saludos.

      • Hola Jorge,

        Plane postear algunos tutoriales adicionales sobre rfid porque es una tecnologia sorprendemente madura y sencilla de manejar

        EN cunato a tu pregunta ciertamente existen lectores de RFID capaces de detectar la ID hasta unos 100 m y en mas corto alrededor de 15 20 m con precision. No los he usado (Aun) pero podrian ser una buena solucion para ese problema de deteccion de corredores que planteas

      • Hola Jorge. Los chips que usan los organizadores de carreras, solo funcionan por debajo de la rodilla. Por eso suele ir en los cordones o el tobillo, debido a que el emisor está en la alfombra de goma por la que deben pasar los corredores. Los antirrobo de los comercios permiten detectar el chip a cualquier altura del cuerpo. La potencia del emisor es clave para la detección. Por eso los datáfonos para pago con tarjeta te obligan a casi pegar la misma al dispositivo. Si no, el cobro se haría a la primera tarjeta que entre en su rango.

        Saludos.

    • Hola Admin. Interesantes, como siempre. ¿Leería los famosos adhesivos antirrobo que comentas más arriba, u otro tipo de tarjeta comercial?

      Gracias y saludos.

      • Hola Jesus, Pues no estoy seguro porque aun estoy investigando un poco el tema y parece que hay varios tipos. Lo que dese luego me ha leido sin problemas son las tarjetas del metro bus y demas. Seguire investigando a ver

    Give a Reply

    WordPress Anti-Spam by WP-SpamShield