Simple Features Thoughts about simple features in software development

13Nov/106

RFID Pasivo – Inexplorado, simple y rodeado de mitos

Desde hace unos meses estoy trabajando con RFID pasivo. La experiencia es dulce y amarga. Amarga porque parece que hay una regla generalizada para que los proveedores de esta tecnología se esfuercen en dar un mal servicio y considerar esta tecnología como una ciencia oculta. Dulce, porque RFID simplemente funciona.

RFID lleva un tiempo largo operando, aparentemente desde los años 70's ha sido utilizada pero es hasta épocas recientes que su uso se ha generalizado debido a que los precios se han vuelto accesibles (una antena con alcance de 12 metros puede costar alrededor de US$1,000, los identificadores cuestan entre unos centavos de dolar a un dolar). Hace años que hemos visto operar la tecnología en tiendas de ropa, tiendas de discos, bibliotecas, etc. Los granjeros lo utilizan para contabilizar su ganado, los departamentos de logística lo usan para identificar unitariamente cada paquete en las zonas de almacenaje, se utiliza para la identificación de personas en sistemas de control de acceso. En un proyecto en conjunto con Stranovotec lo utilizamos para poder controlar los tiempos durante un triatlón donde a cada participante se le asignaba una pulsera y se mantenía registro de sus avances.

En un parque de diversiones lo utilizamos para conocer la ubicación en tiempo real de cada uno de los chavitos que se encontraban adentro, así como la ubicación del guía al que está asignado cada niño y del adulto (o adultos) con el cual entró al parque; también, el niño sólo podría salir del parque acompañado del mismo adulto con quien ingresó. También, al conocer la ubicación de los guías, algunas actividades se detonan automáticamente permitiendo cuidar a los niños todo el tiempo y que el parque se opere autónomamente.

A grandes rasgos, y tal como se explica en HowStuffWorks, la tecnología funciona así:

  • Los datos almacenados en un microchip de una etiqueta RFID aguardan hasta que se haga una lectura
  • La antena de la etiqueta recibe energía electromagnética de un lector de RFID
  • Usando corriente de una batería interna o obtenida del campo electromagnético del lector, la etiqueta envía señales de radio de vuelta al lector
  • El lector recupera las ondas de radio e interpreta la señal como datos que significan algo.

Lo anterior es una rutina de lectura, sin embargo la mayoría de las lectoras y tarjetas pueden ser escritas también, de forma que el identificador puede ser asignado a necesidad. Tampoco es para emocionarse, se cuenta sólo con 12 bytes para almacenar el identificador, lo cual es entendible y más que suficiente para un identificador ya que la información de cada portador de la etiqueta y las reglas de operación se hacen en el sistema de control y no en la etiqueta (tag). La etiqueta es el medio. No olvidemos que estamos hablando de RFID pasivo.

Los "fabricantes"

Quiero hacer una pequeña inserción importante: los "fabricantes" se llaman así porque les hace ver interesantes. Nunca he podido determinar quien es fabricante y quien no. Los mismos modelos de lectores los encuentra uno en distintas marcas, con el mismo protocolo, misma API de desarrollo, mismas aplicaciones de ejemplo. Es incluso chistoso.

Primer contacto

Empezar a trabajar con RFID es de lo mas críptico y falto de información que me haya encontrado en mucho tiempo. Al sacar una antena de RFID de su caja, ésta vendrá acompañada de un disco compacto con los manuales, los programas de ejemplo y una API de programación. En casos excepcionalmente raros incluyen una descripción del protocolo de operación, pero en el caso que no lo incluya, es casi imposible hacer que el "fabricante" te lo provea argumentando que eso no existe.

Una vez que empiezas a revisar la documentación en CD te encuentras con un viaje completo a 1996: API de desarrollo para Microsoft Visual C, Delphi ó Visual Basic 6.0 y una aplicación demo en cualquiera de estos tres lenguajes. Reto a conseguir una licencia legal de Visual Basic 6.0, y luego los reto a instalarlo en Windows 7. Yo requería trabajar en Java, la respuesta oficial de dos fabricantes (hay uno ó dos "fabricantes" de RFID que apestan con los que me he encontrado) fue que no era posible ó que tenía que comprar otro modelo más grande donde se incluía la API de Java: ¡quiero hacer una aplicación por puerto serial, no estoy pidiendo convertir plomo en oro!

Luego de la imposibilidad de hacer funcionar plataformas de hace 15 años, decidí que haría mi implementación por puerto serial (funciona exactamente igual por medio de la red), y sólo pude conseguir el protocolo de una forma: me lo facilitó otro "fabricante", uno con una visión de cooperación y asistencia que me permitió tener mi trabajo finalizado. Sí era posible trabajarlo en Java, vaya adagio al anti-climax. Una sorpresa no grata: el protocolo es simplista e ineficiente.

Hay dos formas de realizar la lectura de los identificadores: unitario y por bulto.

En la lectura unitaria, el host pregunta constantemente "¿qué estas leyendo?". El lector responde cada vez que se le hace la pregunta con un paquete que incluye el identificador de una etiqueta si es que está leyendo alguna. Esta pregunta se hace, por decir un tiempo, cada 100 ms. Si estamos haciéndolo usando el puerto serial de una computadora personal no importa mucho ya que el uso de procesador no es notorio, pero si estamos utilizando un microcontrolador entonces ya el uso puede ser considerado ineficiente. El problema real y grave es cuando lo estamos haciendo por medio de la red: cada 100 ms estamos generando al menos dos paquetes, cada uno con un payload (carga útil) de entre 6 y 18 bytes más overhead, y cada uno de ellos debe ser analizado por switches, ruteadores, etc. y todo para que un porcentaje particularmente pequeño de ellos sea útil.

La lectura en bulto no es mucho mas eficiente: se pide al lector constantemente que registre lectura, digamos cada 100 ms. El lector no devuelve los identificadores que ha ido leyendo sino que los almacena en un buffer hasta que el host pide la lista de todos los identificadores que ha leído.

Una vez obtenidas los identificadores, compútalos. Haz que el sistema haga lo que le toca hacer.

Comments (6) Trackbacks (0)
  1. Hola José, estoy comenzando a realizar una aplicación en Java usando RFID, pero como tu dices, es muy complicado comenzar. Tu me podria dar unas primeras indicaciones para comenzar a leer un tag usando java?
    Gracias.

  2. Hola Jose, mira haré una aplicación para RFID, el proveedor de lector, me da una API en C Y C++, me podrías asesorar como empezar a leer una etiqueta.

    Saludos cordiales

    • Es muy simple en proceso pero la implementación tiene muchos detalles obscuros. Antes de brindarte cualquier ayuda es importate que tengas a la mano la documentación donde incluya el protocolo de comunicación, donde indica que bytes debes enviar al equipo y que bytes debes recibir de éste; el segundo paso es que tengas control de tu puerto serial para enviar y recibir información (disculpa si peco de obvio pero para algunos no lo ha de parecer tanto).
      Sin el protocolo de comunicación es muy dificil de empezar esta tarea.

  3. quiero desarrollar un programa para lecturas de tags mi proveedor me dio un api pero no se por donde empezar me ayudas?


Leave a comment

Trackbacks are disabled.