Está en la página 1de 25

GRADO EN

INGENIERÍA DE
TECNOLOGÍAS DE
TELECOMUNICACIÓN

PROGRAMACIÓN DE
SISTEMAS
EMPOTRADOS Y DE
TIEMPO REAL

4º CURSO

FECHA: 05/04/2016

PROYECTO DE
CONTROL DE
ASISTENCIA IGNACIO JUSTICIA
RAMOS

MARÍA LÓPEZ MARÍN

1
Índice
1. INTRODUCCIÓN .................................................................................................. 2
2. TRABAJO TEÓRICO. TECNOLOGÍA RFID ................................................... 2
2.1. ¿Qué es la tecnología RFID? ..................................................................................... 2
2.2. Un poco de historia .................................................................................................... 3
2.3. ¿Cómo funciona? ....................................................................................................... 4
2.3.1. Etiquetas RFID ................................................................................................... 4
2.3.2. Lector RFID........................................................................................................ 6
2.3.3. Subsistema de procesamiento de datos o middleware RFID .............................. 7
2.3.4. Programadores RFID .......................................................................................... 8
2.4. Rangos de frecuencia ................................................................................................. 8
2.5. Comparación de RFID con otras tecnologías ............................................................ 9
3. TRABAJO PRÁCTICO. CONTROL DE ASISTENCIA ................................ 11
3.1. Funcionalidad y alcanzabilidad ............................................................................... 11
3.2. Arquitectura ............................................................................................................. 12
3.3. Descripción hardware .............................................................................................. 13
3.4. Desarrollo/Realización del proyecto ....................................................................... 16
3.5. Manual de usuario ................................................................................................... 18
4. CONCLUSIÓN ......................................................................................................... 20
5. BIBLIOGRAFÍA ...................................................................................................... 20
6. ANEXO ...................................................................................................................... 21
1. INTRODUCCIÓN

Este documento es la memoria de un proyecto de la asignatura Programación de


Sistemas Empotrados y de Tiempo Real, de 4º curso de Grado en Ingeniería de
Tecnologías de Telecomunicación. El proyecto práctico se llama CONTROL DE
ASISTENCIA, y ha consistido en hacer de un Arduino DUE y de un lector RFID un
dispositivo capaz de controlar la asistencia de un grupo de personas a un determinado
lugar.
El ámbito de uso más inmediato de la aplicación desarrollada es el de llevar el
control de asistencia a clase de un grupo de estudiantes, pero también podría emplearse
en multitud de ocasiones parecidas. En el apartado 3 se explica el funcionamiento del
proyecto y los componentes necesarios para su correcta actividad.
No obstante, antes de comenzar con el estudio del proyecto, vamos a analizar el
fundamento teórico del mismo, además de hacer un recorrido histórico sobre la tecnología
RFID, ver en qué consiste y cuáles son sus principales características, así como examinar
su utilización en el mundo actual.

2. TRABAJO TEÓRICO. TECNOLOGÍA RFID

En esta sección de la memoria trataremos los conceptos teóricos del proyecto,


analizando en qué consiste la tecnología RFID y estudiando sus características. Además,
se lleva a cabo una comparación de esta tecnología con otras cercanas a su modo de
funcionamiento, como por ejemplo NFC o los tradicionales códigos de barras.

2.1. ¿Qué es la tecnología RFID?

La identificación por radio frecuencia o


RFID, en inglés Radio Frequency
IDentification, es un sistema inalámbrico que
permite intercambio de información
normalmente entre un elemento activo y otro
pasivo. Los elementos pasivos se conocen
como etiquetas, tarjetas o tags RFID.
Concretamente, la información que se suele
intercambiar es un identificador (como por
ejemplo un número de serie de algo).

RFID permite identificar automáticamente un objeto gracias a una onda emisora


incorporada en el mismo que transmite por radiofrecuencia los datos identificativos del
objeto, siendo la identificación unívoca.
Gracias a las microemisoras o transpondedores, llamadas de aquí en adelante como
etiquetas o tags, el objeto que contenga la etiqueta o la persona que la porte puede ser
localizado a una distancia variable (desde pocos centímetros hasta unos pocos
kilómetros). La distancia de recepción, la fiabilidad del sistema, la velocidad de
transmisión y la capacidad de información emitida dependerá completamente de las
características del tag que se esté utilizando. Dichas características pueden ser la
frecuencia de emisión, la antena incorporada o el tipo de chip que se use en cada
aplicación concreta.
Otra tecnología para la identificación de objetos que todos conocemos es la de los
códigos de barras que hay en los productos de los supermercados o en los artículos de una
tienda. Pues bien, hoy en día la tecnología RFID está sustituyendo poco a poco a estos
códigos de barras, así como a las tarjetas magnéticas, debido a su comodidad de uso.

La principal ventaja de RFID en comparación con los códigos de barras es que estos
no poseen la capacidad de ser reprogramados y, además, la cantidad de datos de
información que caben en ellos es muy inferior (en comparación con los 2 Kbytes de
datos que consiguen almacenar las etiquetas RFID).
La tecnología RFID supone claramente una evolución tecnológica. Siguiendo con
la comparación entre los tradicionales códigos de barras y RFID, esta última incorpora la
notable mejora de que la visión directa entre las dos partes que se comunican no es
necesaria. Esto es posible gracias a la utilización de unos chips constituidos de silicio
situados en las tarjetas, que son los encargados de transmitir los datos que almacenan al
lector sin el requisito de visión directa entre la tarjeta y el lector. Por el contrario, los
códigos de barras necesitan la visión directa entre las dos partes, pues se basan en la
lectura mediante infrarrojos.

2.2. Un poco de historia

Probablemente su origen se remonta a los años 20, aunque parece que ya se empezó
a utilizar durante la Segunda Guerra Mundial, donde comenzó su uso para que los aviones
se identificasen como “amigos” ante sus propios efectivos. Hasta entonces en aquella
época, el uso del radar permitía la detección de aviones a kilómetros de distancia, pero no
su identificación. Así, el ejército alemán descubrió que si los pilotos balanceaban sus
aviones al volver a la base, cambiaba la señal de radio reflejada de vuelta. Este método
hacía distinguir a los aviones alemanes de los aliados y se convirtió en el primer
dispositivo de RFID pasiva.
Partiendo de esa idea, la cual hacía posible la identificación de objetos sin necesidad
de dos elementos activos en transmisión (sino uno solo, el situado en la base militar), con
el paso del tiempo y mediante un proceso de investigación se llegó al primer sistema
RFID. El sistema, que pertenecía a una empresa norteamericana, no fue comercializado
hasta finales de los años 70, y permitía la identificación de aviones y demás equipamiento
militar a distancia y sin la necesidad de visión directa entre el avión y el campamento
militar.

2.3. ¿Cómo funciona?

El funcionamiento de esta tecnología se basa en la señal de radio que genera la


etiqueta RFID (microchip adjunto a una antena de radio), en la que previamente se han
grabado los datos identificativos del objeto al que está adherida. Un lector físico se
encarga de recibir esta señal, transformarla en datos y transmitir dicha información a la
aplicación informática específica que gestiona RFID (denominada middleware).

Los componentes que integran la tecnología RFID pueden resumirse en cuatro: las
etiquetas, los lectores de etiquetas, el software que procesa la información y los
programadores.

2.3.1. Etiquetas RFID

Las etiquetas o tags RFID son unos elementos pequeños y normalmente pasivos
que se incorporan en los objetos con que se quieran tratar. Estos elementos permiten
almacenar y enviar información a un lector mediante ondas de radio. Si por ejemplo
estuviésemos ante un sistema que tiene que identificar los productos del inventario de un
comercio, encontraríamos las etiquetas incorporadas en los mismos.
Como se puede apreciar en las dos siguientes imágenes, la parte que más espacio
ocupa de la etiqueta es la antena (en forma de espiral).

La etiqueta RFID está compuesta principalmente por:


 Una antena: es la encargada de transmitir la información que identifica la
etiqueta. En el caso de las etiquetas pasivas, la antena se encarga además
de captar la energía del lector RFID y alimentar al microchip.
 Un transductor radio: es el que convierte la onda de radio que capta la
antena en una señal eléctrica digital.
 Un microchip: es un elemento que no siempre está presente, ya que no está
incluido en las versiones de menor tamaño.

Las etiquetas actualmente tienen precios muy bajos, formas muy diferentes
(etiquetas adhesivas, disco de plástico, chapa PVC, ampolla de vidrio, cilindro de
plástico, llaveros, brazaletes, etc.) y dimensiones de hasta 0.4 mm2, por lo que están
preparadas para su integración en todo tipo de objetos. En la siguiente imagen se muestran
los principales tipos de etiquetas pasivas:
En cuanto a su pasividad, esta se refiere a que no necesitan alimentación eléctrica
interna. Es decir, las etiquetas son alimentadas por el dispositivo que escribe o lee en
ellas, lo cual es una gran ventaja. A ese dispositivo, que es activo, se le conoce como
lector RFID.
Aunque hasta ahora nos hemos centrado en las etiquetas pasivas, cierto es que
existen además otros tipos de etiquetas clasificadas según su fuente de energía: activas y
semipasivas (o asistidos por batería). Veamos las diferencias entre ellas:

 Pasivas:
o No requieren batería o fuente de alimentación interna, sino que se alimentan
directamente del lector RFID.
o La señal respuesta tiene un tiempo de vida bastante corto y su radio de
emisión puede llegar como mucho a 6 metros.
o El punto anterior es una ventaja pues permite instalarlas en ambientes difíciles
(cerca del agua, lugares con poco espacio, etc).
o Son menos fiables.
o Son las más extendidas.
o Bajo coste (entre 10 céntimos y 1 euro).

 Activas:
o Fuente autónoma de energía (por ejemplo, una pila).
o Son más fiables, pues tienen una tasa de error inferior a la de las pasivas.
o Capacidad para transmitir señales a mayor potencia.
o Pueden funcionar a distancias mayores (hasta varios kilómetros).
o Poseen una mayor sensibilidad a las señales que reciben que una etiqueta
pasiva.
o Vida útil más corta.
o Pueden integrar sensores: temperatura, vibración, luz, radiación, etc.
o Capacidad de almacenamiento mayor: entre 4 y 32 kBytes.
o Precio elevado: entre 30 y 90€.

 Semipasivas
o Pequeña fuente autónoma de energía. En este caso, se utiliza para alimentar
el microchip y no para transmitir la señal.
o La señal se envía al lector RFID al igual que se hace en el caso de las etiquetas
pasivas. El hecho de que el circuito integrado esté constantemente
alimentado, le da la posibilidad de tener mejores tiempos de respuesta.

2.3.2. Lector RFID

Es el encargado de leer los tags y pasar la información en formato digital a la


aplicación específica que se utiliza RFID. Sus componentes principales son tres:
 Antena: las hay de varios tipos pero la más aceptada es un cable enrollado
a modo de bobina, como el de la siguiente imagen:
Además, este tipo de
antena es el que hemos
empleado en nuestro proyecto
práctico de control de asistencia.

 Transceptor: este elemento cuenta con un transmisor y un receptor que


comparten la misma circuitería para llevar a cabo sus tareas. Cabe destacar
que la comunicación de este tipo de transceptores es semidúplex, lo que
significa que pueden enviarse señales en ambos sentidos, pero no
simultáneamente.

 Decodificador: es el que posee la lógica combinacional para decodificar las


señales entrantes y codificar aquellas salientes.

La tarea del lector es enviar constantemente señales con la intención de ver si hay
alguna etiqueta RFID cerca de él. Al captar una señal de una etiqueta, obtiene la
información de la misma y los envía al Middleware RFID.

2.3.3. Subsistema de procesamiento de datos o middleware RFID

Es un software que reside en un servidor y que sirve de intermediario entre el


lector y las aplicaciones empresariales. Se encarga de filtrar los datos que recibe del lector
o red de lectores, de forma que a las aplicaciones software sólo les llega información útil.
Además de filtrar los datos agregan información de control a estos y posteriormente los
envían al sistema de gestión (ERP, sistema de producción, sistema de inventario de un
almacén, sistema de control de personal, etc.).
2.3.4. Programadores RFID

Los programadores RFID son los dispositivos que realizan la escritura de


información sobre la etiqueta RFID, es decir, codifican la información en un microchip
situado dentro de la tarjeta RFID. La programación de las etiquetas se realiza una única
vez si las etiquetas son de sólo lectura, o tantas veces como se desee si son de
lectura/escritura.

2.4. Rangos de frecuencia


Hay 4 tipos diferentes de sistemas RFID de acuerdo al rango de frecuencia en el
que operan (LF, HF, UHF y SHF):

 LF, Frecuencia baja: 120 a 134.2 KHz.


 HF, Frecuencia alta: 13.56 MHz
 UHF: 868 a 956 MHz.
 SHF, Microondas: 2.4 GHz. Esta es la variante que se puede implementar para
aprovechar como lectores nuestros access point IEEE 802.11b/g.
En la siguiente tabla comparativa hemos recogido las características principales de
cada tipo de sistema RFID:

Frecuencia LF HF UHF SHF


120-134KHz 13.56MHz 860-930MHz 2.45, 5.8GHz
Distancia de lectura 0.5 - 1m <1m 3 – 6m >100m (ACTIVO)
Coste Alto Medio Bajo
Penetración en materiales Alta Baja
Afectación por el agua No No Si Si
Tipo de antena Bobina inductiva Bobina inductiva Dipolo Dipolo
Velocidad de transmisión Baja Alta
Control de acceso, Farmacia, librerías, Trazabilidad de Autopistas,
identificación control de acceso, paquetes o productos, contenedores de
industrial, llaves de fidelización, automatización productos…
Aplicaciones acceso a vehículos, aplicaciones de industrial, control de
automatización, pago electrónico, acceso a vehículos…
autoguiado de NFC, pasaporte…
vehículos…

A la vista de las características de cada tarjeta, es inmediato pensar que RFID ofrece
un amplio rango de posibilidades. La tecnología se adapta muy bien a las necesidades de
cada aplicación, pudiendo emplear diferentes tipos de tarjetas.
Cabe destacar que en el caso en que la distancia de lectura es mayor, las tarjetas no
son pasivas sino activas. Esto quiere decir que para esa frecuencia se pueden alcanzar
distancias superiores a 100 metros, pero los dos extremos de la comunicación son
transmisores/receptores activos (lectores RFID más potentes).

2.5. Comparación de RFID con otras tecnologías

Como hemos visto en el apartado anterior, RFID puede operar a diferentes


frecuencias. Aunque no se ha comentado hasta ahora en este documento, RFID tiene que
convivir con otras tecnologías en cuanto a la frecuencia de operación se refiere. Por
ejemplo, en la banda de los 2.4GHz RFID convive con la tecnología Wi-Fi.
En el punto 2.1 explicábamos que RFID es un buen sustituto de los tradicionales
códigos de barras, y conforme más vaya pasando el tiempo menos utilizados serán estos
últimos. La principal ventaja de RFID frente a estos es que no requiere visión directa entre
las partes que se comuniquen. Por otro lado, los lectores infrarrojos capaces de operar con
códigos de barras trabajan a una frecuencia inferior, que ronda los 36KHz normalmente.
Sin embargo, no todo son ventajas para la tecnología protagonista de este proyecto,
sino que también tiene fuertes competidores tales como Bluetooth y NFC (Near Field
Communication). Con respecto a estas dos tecnologías, Bluetooth y NFC, quizás este es
más aceptado o conocido que RFID por la sociedad por el hecho de que los Smartphones
los llevan integrados. Además, Bluetooth consigue tasas de transferencia superiores a las
que puede lograr RFID.
La comparación con NFC es especial, ya que esta tecnología es un subconjunto de
RFID que opera a 13.56MHz. Otra diferencia fundamental es que la distancia de
operación o lectura de NFC está inicialmente pensada para que sea muy pequeña, por la
seguridad que esto supone. De hecho, uno de los aspectos que más ha cuestionado a RFID
es su distancia de operación en algunas aplicaciones. El motivo es que resulta preocupante
para ciertas aplicaciones que la lectura de la tarjeta se pueda hacer a una distancia muy
grande sin que el portador de la misma se dé cuenta.
Por último, señalar que RFID puede ser mejor solución que Bluetooth y Wi-Fi en
ocasiones en que el coste del sistema sea un problema. Además, el establecimiento de una
conexión Bluetooth o Wi-Fi es mucho más lento que una comunicación RFID.
Es difícil predecir qué tecnología de las citadas en este apartado va a triunfar más
en el mercado o va a extenderse más. En nuestra opinión, dentro de unos años seguirán
conviviendo todas estas tecnologías, y cada una de ellas se especializará en un tipo de
aplicación determinado. Sin embargo, pensamos que hay aplicaciones en que RFID
seguirá funcionando de forma óptima, como por ejemplo:
- Identificación de mascotas -Inventario de productos

Ya se han citado diferentes ámbitos de utilización o aplicaciones que utilicen RFID,


pero a continuación vamos a hacer una recopilación:
 Logística. Es quizás la más importante en la actualidad, ya que permite la
rápida localización de un elemento concreto dentro de un almacén o una
cadena de distribución.
 Bibliotecas. Para el seguimiento y localización de ejemplares.
 Control de acceso de personal.
 Seguimiento de equipaje en tránsito.
 Seguimiento de mascotas.
 Sistemas antirrobo. Colocado en la llave de un vehículo, se podrían impedir
que el mismo arranque si el lector no identifica la llave como la verdadera Es
la llamada "llave inteligente.
Adicionalmente, por proximidad se puede abrir la puerta y arrancar el
vehículo.
 Identificación vehicular (control de tránsito, peajes, etc.).
 Forma de pago en transporte público.
 Identificación de pacientes. Utilizando etiquetas activas se puede almacenar
en la etiqueta una síntesis de la historia clínica del paciente
3. TRABAJO PRÁCTICO. CONTROL DE ASISTENCIA

En este apartado de la memoria vamos a explicar la aplicación práctica de nuestro


trabajo teórico sobre la tecnología RFID. Trataremos diversos aspectos tales como la
funcionalidad del proyecto, la arquitectura del mismo, la descripción tanto hardware
como software, el desarrollo del proyecto y, finalmente, el funcionamiento.

3.1. Funcionalidad y alcanzabilidad

El proyecto que se ha desarrollado consiste en una aplicación de control de


asistencia. La idea nos surgió porque, como alumnos universitarios, estamos
acostumbrados a ver a los profesores pasar lista de los estudiantes asistentes a una clase.
Algunas veces se opta por plataformas que permiten dicha tarea, tales como SWAD o
TUTOR, otras se prefiere exigir al alumno la entrega de algún documento por correo que
justifique que se ha asistido al seminario o clase, u otras se opta por el método tradicional
en el que los estudiantes escriben su nombre, apellidos y firma en un folio de papel.
De esta manera, pensamos en una unificación del control de asistencia y en hacer
el prototipo de un sistema que permitiera ejecutar esta labor. Además, como miembros de
la Universidad de Granada, estamos habituados a tener que usar el carnet universitario
inteligente para poder hacer una serie de tareas como:
 Acceso al comedor universitario.
 Abrir/cerrar la puerta del parking de bicicletas vigilado por cámara.
 Alquiler de pistas deportivas pertenecientes al Campus Universitario de Ciencias.
 Acceso a las aulas de libre acceso y trabajos en grupo.
Por lo tanto, queda totalmente justificado el proyecto elegido debido al interés que
puede despertar y su amplio rango de uso. En cuanto a la usabilidad del proyecto, cabe
señalar que aunque inicialmente está pensado para llevar a cabo el control de asistencia a
clase de un grupo de estudiantes, su alcanzabilidad es mucho mayor. Por ejemplo, se
podrían hacer una serie de adaptaciones para llevar a cabo otras aplicaciones como:
 Sistema de control de acceso: un ejemplo de esta aplicación podría ser el control de
acceso a una zona protegida, como pudiera ser el acceso a un parking. Para ello, los
usuarios que abonen la cuota del parking dispondrían de una tarjeta, con la cual se
identificarían cada vez que entrasen o saliesen con su vehículo.
 Sistema de gestión de un almacén: consistiría en adaptar nuestro proyecto para
poder administrar el inventario de artículos de un almacén. Por ejemplo, pensemos
en el almacén de ropa de una tienda. El sistema consistiría en equipar a las prendas
de un tag RFID. Cada vez que se vende una prenda de vestir, habría que pasar su
etiqueta por el lector RFID y posteriormente se notificaría al sistema de gestión que
se ha producido dicha venta. Con esta funcionalidad, el sistema sería capaz de saber
en cada momento si algunas prendas se están agotando, si otras se venden poco, si
se ha producido algún robo, etc.
3.2. Arquitectura

El proyecto está constituido de los siguientes elementos:


 Un Arduino DUE.
 Un módulo RFID que opera a 125Khz.
 Una antena: es un hilo conductor dispuesto o enrollado en forma de bobina.
 Una shield: para poder adaptar el módulo RFID a la placa Arduino.
 Tags pasivos: son las tarjetas de los usuarios. En nuestro caso, cada estudiante
dispondría de una tarjeta para poder anotar su asistencia a las clases.
 Un ordenador personal: como se trata de un prototipo y no de lo que podría ser la
implementación final del proyecto, empleamos un PC para visualizar los
resultados en él. Concretamente, es el profesor el que tendría que usar su
ordenador si quisiera utilizar el sistema de control de asistencia desarrollado.

A continuación mostramos la arquitectura del sistema en una imagen. Para construir


dicha imagen hemos utilizado la herramienta Fritzing.

La herramienta Fritzing nos ha permitido, además de poder emplear todos los


componentes, superponerlos y hacer las conexiones de los pines que utilizamos. Así, los
pines conectados aparecen en color verde en la imagen anterior, mientras que los que no
hemos utilizados se quedan en color negro. Además, los elementos que hemos utilizado
para mostrar la arquitectura son exactamente los que hemos empleado en la práctica, y
para ello hemos descargado los modelos desde la página: http://fritzing.org/home/.
3.3. Descripción hardware

En este apartado se lleva a cabo la descripción hardware de los elementos que


componen el proyecto.
Arduino DUE
Es una placa de desarrollo creada por la compañía Arduino. Para cargar los
programas desarrollados hemos empleado un cable microUSB, y hemos utilizado el IDE
o entorno de desarrollo Arduino.
Hemos recogido sus principales especificaciones y componentes en la siguiente
tabla:
Componente/especificación Descripción
Microcontrolador AT91SAM3X8E
Voltaje de operación 3.3V
Voltaje de entrada recomendado 7-12V
Límites del voltaje de entrada 6-16V
Pines digitales de entrada/salida 54 (de los cuales 12 proporcionan salida
PWM)
Pines de entrada analógicos 12
Pines de salida analógicos 2 (DAC)
Corriente de salida continua total en todos los pines 130 mA
de entrada/salida
Corriente continua para 3.3V 800 mA
Corriente continua para 5V 800 mA
Memoria flash 512 KB disponibles para las aplicaciones del
usuario
SRAM 96 KB (dos bancos: 64KB y 32KB)
Velocidad del reloj 84 MHz
Dimensión: Largo 101.52 mm
Dimensión: Ancho 53.3 mm
Peso 36 g

El Arduino DUE es la primera placa de Arduino basada en un controlador en ARM


de 32 bits. Concretamente, se trata de un potente microcontrolador ARM CortexM3 de
32 bits que es programable a través de la conocida IDE Arduino.
Como se puede observar en la tabla anterior, dispone de 54 pines de entrada/salida,
lo cual es un número muy superior a otros modelos anteriores. Por otro lado, cuenta con
la posibilidad de establecer hasta 4 comunicaciones serie o UART (Recordemos que
Arduino UNO solo permite un puerto de este tipo). En general, sus especificaciones son
muy buenas y bastante superiores a placas más antiguas de la misma familia Arduino.
En la siguiente imagen mostramos una placa Arduino DUE como la empleada en
este proyecto, y además señalamos los pines empleados para conectar la shield en color
verde y los correspondientes al LED en color rojo.
Se ha empleado el puerto serie 0 para la comunicación entre el Arduino y el
monitor serie, cuyos pines son el 0 para RX y el 1 para TX. Lo curioso de esto es que
también se ha utilizado el mismo puerto serie para la comunicación entre el Arduino y el
módulo RFID. Esto se hace posible mediante el código del programa. Además, hemos
utilizado los pines GND y 13 para colocar las patillas cátodo y ánodo del LED
respectivamente.
Por otro lado, hemos empleado los pines PWM del 2 al 7, el 0 y 1, así como los
pines analógicos de la A0 a la A5 para conectar la shield con la placa Arduino.

Módulo RFID 125KHz

 Para funcionar únicamente requiere alimentación y una antena.


 Trabaja a una frecuencia de 125KHz.
 Demodula y decodifica la señal RF de forma automática.
 Únicamente funciona con tarjetas Atmel/Temic T55xx y EM4102. En
nuestro caso empleamos tarjetas Atmel/Temic T555.
 Puede operar en un rango de 3.3V-5V.
 Permite el modo de operación sleep, en el cual se consigue ahorrar mucha
energía.
 Posee una interfaz UART que funciona hasta una velocidad de 115000bps.
 Interfaz I2C que alcanza hasta los 400KHz.
 Su firmware es actualizable para poder usarlo en algunas aplicaciones más
específicas.

En la siguiente imagen se muestra un módulo RFID como el empleado en este


proyecto, dispuesto de una antena.
Shield de Arduino:
En la siguiente fotografía se muestra una shield como la que hemos empleado para
este proyecto. En este componente es donde se coloca el módulo RFID.

Tarjeta T555
Estas tarjetas RFID trabajan a una frecuencia de 125KHz. Entre sus características
destacan:
 Son de lectura y escritura (R/W).
 Compatibles con T55xx.
 Capacidad para 28 bytes (estructurados en 7 bloques de 4 bytes).
3.4. Desarrollo/Realización del proyecto

En este apartado se analiza el código del programa Arduino. Para ello, primero
vamos a hacer un esquema lógico del programa, explicando cómo funciona a grandes
rasgos.
En cuanto a las librerías, solo necesitamos una: “Keyboard.h”. Se necesita dicha
librería para poder capturar las pulsaciones del teclado. Esto es así porque el programa se
divide en dos subprogramas y empleamos las teclas ‘1’ y ‘2’ para ejecutar uno u otro. Los
subprogramas en cuestión son:
 [1] Programa para pasar el control de asistencia: es el que usará el profesor para
ver qué estudiantes han asistido a clase.
 [2] Programa para guardar alumnos: consiste en que los alumnos acercan sus
tarjetas al lector RFID, de manera que el programa les asocia un número de
identificación. Es decir, este subprograma se encarga de inicializar las tarjetas.
Primeramente veamos qué datos miembro o variables globales tiene el programa:
 byte valueToStore: esta variable se utiliza para guardar un número de
identificación de cada alumno en la tarjeta correspondiente.
 int led: especifica el pin donde irá conectado el LED. Concretamente se trata del
pin 13.
 byte block1_byte1, block1_byte2, block1_byte3, block1_byte4,
block2_byte1, block2_byte2, block2_byte3, block2_byte4,

block7_byte1, block7_byte2, block7_byte3, block7_byte4:
Cada byte se corresponde con un byte de la tarjeta RFID. Al principio del
programa se inicializan todas estas variables al valor 0x00, y cuando se lee una
tarjeta se modifica dicho valor por el que contenga realmente la tarjeta.
 int val: variable temporal para almacenar lo que se lee en un instante
determinado.
 char inChar: es otra variable temporal para guardar el carácter de entrada que se
pulsa mediante el teclado.

En segundo lugar, analicemos qué se hace en el método setup():


 pinMode(led,OUTPUT): para establecer el pin 13 como salida y poder utilizar
el LED.
 Serial.begin(19200): abre el puerto serie 0 a 19200 baudios.
 Keyboard.begin(): inicializa el teclado como entrada. De esta manera, el usuario
del programa podrá escribir y elegir qué programa desea utilizar.
 Serial.write(): lo utilizamos tantas veces como comandos hexadecimales
necesitamos enviar. Concretamente, tenemos que enviar el siguiente comando
para iniciar el módulo RFID:
0xFF 0x01 0x09 0x87 0x01 0x01 0x07 0x00 0x10 0x20 0x30 0x40 0x3A
De esta manera se establece el modo automático de lectura de tarjetas RFID, sin
contraseña y de 7 bloques de 4 bytes.
 Serial.println(): empleamos esto para mostrar al usuario que el programa ya se
ha iniciado, así como el menú de selección (manejable con las teclas ‘1’ y ‘2’
como hemos indicado anteriormente).

El método loop() contiene toda la funcionalidad del programa. Vamos a analizar


primeramente su estructura lógica. El programa, tras mostrar al usuario las opciones, está
a la espera de que este pulse una de las dos teclas de selección (‘1’ o ‘2’) para cargar un
programa u otro. Por lo tanto, hasta que no se pulse una de las opciones por teclado
seguidas de la tecla INTRO no arrancará ningún programa.
Programa de guardar alumnos: para arrancarlo hay que pulsar la tecla ‘2’. Lo
primero que se hace en este programa es enviar el siguiente comando al módulo RFID:
0xFF 0x01 0x06 0x40 0x32 0x64 0x5A 0x1E 0x60 0xB5
Este comando se encarga de establecer el modo de lectura y escritura de tarjetas
RFID, pues en el método setup() únicamente habíamos establecido el modo de lectura.
Acto seguido el programa entra en un bucle infinito en el cual se pide al usuario que
acerque una tarjeta. Si no se encuentra ninguna tarjeta se avisa este hecho por pantalla,
pues se hace una comprobación de si hay una tarjeta en las inmediaciones y se actualiza
la variable booleana hayTarjeta (inicialmente establecida a valor FALSE). De lo
contrario, en caso de encontrar una tarjeta, se lee su contenido y a continuación se
sobreescribe con el valor del número de identificación correspondiente. Para escribir las
etiquetas se utiliza el método writeTag comentado posteriormente.
Ese número de identificación lo hemos definido como una variable entera
autoincremental, por lo que nunca habrá dos números de identificación iguales.
Por último, cuando la tarjeta está lista, si la escritura ha sido satisfactoria, se muestra
un mensaje de ello por el monitor y el LED parpadea 10 veces rápidamente. A
continuación otro estudiante puede pasar a guardar la identificación correspondiente en
su tarjeta RFID.

Programa de control de asistencia: para arrancarlo hay que pulsar la tecla ‘1’.
Este programa es más sencillo que el anterior.
Al iniciarse entra en un bucle infinito a la espera de que una tarjeta se aproxime,
mostrando por pantalla el mensaje “Esperando identificación, aproxime su tarjeta”.
Cuando se encuentra una tarjeta, las variables que representan los bloques de bytes de la
tarjeta se rellenan con los valores que esta contiene. Para ello se utiliza lo siguiente:
blockX_byteY = Serial.read();
Una vez se han leído todos los bloques hemos de comprobar el checksum. Basta
hacer un Serial.read(), sin la necesidad de almacenar el valor recibido si no se quiere
comprobar el checksum.
Por último, empleamos bucles if y else if para ver de qué alumno es la tarjeta que
se ha acercado comprobando el número de identificador, y mostramos el mensaje por
pantalla: “Se ha registrado su asistencia, + nombre_del_alumno”.
3.5. Manual de usuario

Este apartado tiene como finalidad aprender a utilizar el programa implementado.


Los pasos para una correcta ejecución del programa tras lanzarlo son:
1. Elegir mediante el teclado qué programa se desea utilizar [teclas ‘1’ y ‘2’ +
‘INTRO’].
2. Programa [1] Control de asistencia:
2.1. Cada estudiante ha de acercar su tarjeta al lector RFID para poder anotar
su asistencia.
2.2. Esperar la verificación por parte del programa. El LED parpadea una
vez.
3. Programa [2] Guardar alumnos:
3.1. El profesor llamará a los estudiantes por orden alfabético, y estos
acercarán su tarjeta al lector de uno en uno.
3.2. Cuando una tarjeta esté lista el LED parpadeará repetidas veces en un
intervalo pequeño de tiempo.
A continuación encontramos un ejemplo en el que mostramos la salida del
programa [1] de Control de asistencia. Hemos simulado que tres fueron los alumnos que
asistieron a clase.

PROGRAMA DE CONTROL DE ASISTENCIA

Por favor, seleccione un modo de operacion


[1] Control de asistencia
[2] Guardar alumnos
1
***************************************************************
***** Modo de control de asistencia iniciado *****
***************************************************************
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
---------------------------------------
-- Se ha registrado su asistencia, --
-- Ignacio Justicia Ramos --
---------------------------------------
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
---------------------------------------
-- Se ha registrado su asistencia, --
-- Maria Lopez Marin --
---------------------------------------
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
---------------------------------------
-- Se ha registrado su asistencia, --
-- Alfonso Salinas Extremera --
---------------------------------------
---------------------------------------
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta
Esperando identificacion, aproxime su tarjeta

Por último mostramos la salida del programa [2] de Guardar alumnos, en el que
hemos almacenado los identificadores de tres alumnos a modo de ejemplo. Estos alumnos
están previamente cargados en el código del programa.

PROGRAMA DE CONTROL DE ASISTENCIA

Por favor, seleccione un modo de operacion


[1] Control de asistencia
[2] Guardar alumnos
2
***************************************************************
***** Modo de almacenamiento de alumnos iniciado *****
***************************************************************
Acerque una tarjeta...

Tarjeta encontrada con contenido:


---------------------------------------
-- Bloque 1 -- | 52 | 58 | 8B | 45 |
-- Bloque 2 -- | 03 | 03 | 03 | 03 |
-- Bloque 3 -- | 02 | 02 | 02 | 02 |
-- Bloque 4 -- | 03 | 03 | 03 | 03 |
-- Bloque 5 -- | 02 | 02 | 02 | 02 |
-- Bloque 6 -- | 02 | 02 | 02 | 02 |
-- Bloque 7 -- | 00 | 00 | 00 | 00 |
---------------------------------------

Preparando la identificacion del alumno en la tarjeta...01


ÿ__ _____-ÿ__ _____.ÿ__ _____/ÿ__ _____0ÿ__ _____1
¡Tarjeta lista!
Acerque una tarjeta...

Tarjeta encontrada con contenido:


---------------------------------------
-- Bloque 1 -- | 52 | 58 | 8B | 45 |
-- Bloque 2 -- | 04 | 04 | 04 | 04 |
-- Bloque 3 -- | 01 | 01 | 01 | 01 |
-- Bloque 4 -- | 03 | 03 | 03 | 03 |
-- Bloque 5 -- | 03 | 03 | 03 | 03 |
-- Bloque 6 -- | 03 | 03 | 03 | 03 |
-- Bloque 7 -- | 00 | 00 | 00 | 00 |
---------------------------------------

Preparando la identificacion del alumno en la tarjeta...02


ÿ__ _____1ÿ__ _____2ÿ__ _____3ÿ__ _____4ÿ__ _____5
¡Tarjeta lista!
Acerque una tarjeta...

Tarjeta encontrada con contenido:


---------------------------------------
-- Bloque 1 -- | 52 | 58 | 8B | 45 |
-- Bloque 2 -- | 01 | 01 | 01 | 01 |
-- Bloque 3 -- | 01 | 01 | 01 | 01 |
-- Bloque 4 -- | 01 | 01 | 01 | 01 |
-- Bloque 5 -- | 01 | 01 | 01 | 01 |
-- Bloque 6 -- | 01 | 01 | 01 | 01 |
-- Bloque 7 -- | 00 | 00 | 00 | 00 |
---------------------------------------

Preparando la identificacion del alumno en la tarjeta...03


ÿ__ _____5ÿ__ _____6ÿ__ _____7ÿ__ _____8ÿ__ _____9
¡Tarjeta lista!

4. CONCLUSIÓN

Para finalizar la memoria de este proyecto, hemos de destacar nuevamente


que la tecnología RFID toma ventajas con respecto a otras en determinadas
aplicaciones. Con esta tecnología se podrá aumentar considerablemente el rendimiento
productivo y la eficacia en cualquier sector que se nos ocurra. De esta manera, por
ejemplo, en el sector de la industria, gracias a las características de RFID se consigue
un ahorro tanto en tiempo como en dinero debido a la optimización por la
automatización. En otras palabras, se agiliza el proceso de lectura de identificación
en los productos como consecuencia de una reducción de la intervención humana
en esta tarea. Además, al ser programable, podemos cambiar el estado de un paquete,
conocer si quedan existencias de un producto o incluso tener un control exacto del
inventario de productos en un almacén en cualquier momento.
Por otro lado, señalar que podemos incluir a esta tecnología de identificación
basada en radiofrecuencia dentro de los sistemas de localización de tiempo real (RTLS).
Estos sistemas son completamente automáticos que monitorizan con una determinada
frecuencia la posición de un elemento móvil, como es por ejemplo la localización de
personas en tiempo real, la ubicación de bienes materiales en tiempo real.
Por todo lo anterior, podemos confirmar la elevada alcanzabilidad del proyecto. No
solo sirve para poder controlar la asistencia a clases en la universidad, sino que
puede adaptarse fácilmente al control de inventario, al control de acceso, al control de
asistencia laboral o a la localización de objetos, personas o animales, pago automático de
peajes, entre otras muchas aplicaciones más.

5. BIBLIOGRAFÍA

 Cooking Hacks. RFID 125KHz Module for Arduino and Raspberry Pi:
https://www.cooking-hacks.com/documentation/tutorials/rfid-125-khz-module-
arduino-raspberry-pi-tutorial/
 Fritzing:
http://fritzing.org/home/
 Arduino DUE:
https://www.arduino.cc/en/Main/ArduinoBoardDue

6. ANEXO
 Código Arduino del programa desarrollado:
#include "Keyboard.h"
byte valueToStore = 0x00;
int led = 13;
byte block1_byte1 = 0x00;
byte block1_byte2 = 0x00;
byte block1_byte3 = 0x00;
byte block1_byte4 = 0x00;

byte block2_byte1 = 0x00;


byte block2_byte2 = 0x00;
byte block2_byte3 = 0x00;
byte block2_byte4 = 0x00;

byte block3_byte1 = 0x00;


byte block3_byte2 = 0x00;
byte block3_byte3 = 0x00;
byte block3_byte4 = 0x00;

byte block4_byte1 = 0x00;


byte block4_byte2 = 0x00;
byte block4_byte3 = 0x00;
byte block4_byte4 = 0x00;

byte block5_byte1 = 0x00;


byte block5_byte2 = 0x00;
byte block5_byte3 = 0x00;
byte block5_byte4 = 0x00;

byte block6_byte1 = 0x00;


byte block6_byte2 = 0x00;
byte block6_byte3 = 0x00;
byte block6_byte4 = 0x00;

byte block7_byte1 = 0x00;


byte block7_byte2 = 0x00;
byte block7_byte3 = 0x00;
byte block7_byte4 = 0x00;

int val = 0;

char inChar = 0;
void setup() {
pinMode(led, OUTPUT);
// open the serial port:
Serial.begin(19200);
// initialize control over the keyboard:
Keyboard.begin();
Serial.write(0xFF);
Serial.write(0x01);
Serial.write(0x09);
Serial.write(0x87);
Serial.write(0x01);
Serial.write(0x01);
Serial.write(0x07);
Serial.write((byte)0x00);
Serial.write(0x10);
Serial.write(0x20);
Serial.write(0x30);
Serial.write(0x40);
Serial.write(0x3A);
delay(500);
while (Serial.available() > 0)
{ Serial.read(); }
Serial.println();
Serial.println();
Serial.println("PROGRAMA DE CONTROL DE ASISTENCIA");
Serial.println();
Serial.println("Por favor, seleccione un modo de operacion");
Serial.println("[1] Control de asistencia");
Serial.println("[2] Guardar alumnos");
}

void loop() {
if (Serial.available() > 0) {
inChar = Serial.read();
Serial.println(inChar);
}
if (inChar == '1') {
Serial.println("***************************************************************");
Serial.println("***** Modo de control de asistencia iniciado *****");
Serial.println("***************************************************************");
while (true) {
val = Serial.read();
while (val != 0xff) {
Serial.println("Esperando identificacion, aproxime su tarjeta");
val = Serial.read();
delay(500);
}
// Serial.read(); // we read ff
Serial.read(); // we read 01
Serial.read(); // we read 1d
Serial.read(); // we read 10

block1_byte1 = Serial.read(); // we read block 1 byte 1


block1_byte2 = Serial.read(); // we read block 1 byte 2
block1_byte3 = Serial.read(); // we read block 1 byte 3
block1_byte4 = Serial.read(); // we read block 1 byte 4

block2_byte1 = Serial.read(); // we read block 2 byte 1


block2_byte2 = Serial.read(); // we read block 2 byte 2
block2_byte3 = Serial.read(); // we read block 2 byte 3
block2_byte4 = Serial.read(); // we read block 2 byte 4

block3_byte1 = Serial.read(); // we read block 3 byte 1


block3_byte2 = Serial.read(); // we read block 3 byte 2
block3_byte3 = Serial.read(); // we read block 3 byte 3
block3_byte4 = Serial.read(); // we read block 3 byte 4

block4_byte1 = Serial.read(); // we read block 4 byte 1


block4_byte2 = Serial.read(); // we read block 4 byte 2
block4_byte3 = Serial.read(); // we read block 4 byte 3
block4_byte4 = Serial.read(); // we read block 4 byte 4

block5_byte1 = Serial.read(); // we read block 5 byte 1


block5_byte2 = Serial.read(); // we read block 5 byte 2
block5_byte3 = Serial.read(); // we read block 5 byte 3
block5_byte4 = Serial.read(); // we read block 5 byte 4

block6_byte1 = Serial.read(); // we read block 6 byte 1


block6_byte2 = Serial.read(); // we read block 6 byte 2
block6_byte3 = Serial.read(); // we read block 6 byte 3
block6_byte4 = Serial.read(); // we read block 6 byte 4

block7_byte1 = Serial.read(); // we read block 7 byte 1


block7_byte2 = Serial.read(); // we read block 7 byte 2
block7_byte3 = Serial.read(); // we read block 7 byte 3
block7_byte4 = Serial.read(); // we read block 7 byte 4
Serial.read(); // we read checksum
if (block2_byte1 == 0x01) {
digitalWrite(led, HIGH);
Serial.println("---------------------------------------");
Serial.println("-- Se ha registrado su asistencia, --");
Serial.println("-- Ignacio Justicia Ramos --");
Serial.println("---------------------------------------");
delay(2000);
digitalWrite(led, LOW);
} else if (block2_byte1 == 0x02) {
digitalWrite(led, HIGH);
Serial.println("---------------------------------------");
Serial.println("-- Se ha registrado su asistencia, --");
Serial.println("-- Maria Lopez Marin --");
Serial.println("---------------------------------------");
delay(2000);
digitalWrite(led, LOW);
} else if (block2_byte1 == 0x03) {
digitalWrite(led, HIGH);
Serial.println("---------------------------------------");
Serial.println("-- Se ha registrado su asistencia, --");
Serial.println("-- Alfonso Salinas Extremera --");
Serial.println("---------------------------------------");
Serial.println("---------------------------------------");
delay(2000);
digitalWrite(led, LOW);
}
}
} else if (inChar == '2') {
Serial.println("***************************************************************");
Serial.println("***** Modo de almacenamiento de alumnos iniciado *****");
Serial.println("***************************************************************");
while (true) {
// Parámetros de configuración para la programación de la tarjeta
Serial.write(0xFF);
Serial.write(0x01);
Serial.write(0x06);
Serial.write(0x40);
Serial.write(0x32);
Serial.write(0x64);
Serial.write(0x5A);
Serial.write(0x1E);
Serial.write(0x60);
Serial.write(0xB5);
delay(500);
Serial.flush();
readTag(0x01, 0x07);
Serial.println("Acerque una tarjeta... ");
Serial.flush();
delay(5000);

bool hayTarjeta = getTag();


if (hayTarjeta == false) {
Serial.println("No se ha encontrado ninguna tarjeta cerca");
} else if (hayTarjeta == true) {
// Add 1 to the value to store in card
if (valueToStore == 0xFF) {
valueToStore = 0x00;
}
else {
valueToStore++;
}

Serial.print("Preparando la identificacion del alumno en la tarjeta...");


writeByte(valueToStore);
Serial.println();
writeTag(0x02, valueToStore, valueToStore, valueToStore, valueToStore);
writeTag(0x03, valueToStore, valueToStore, valueToStore, valueToStore);
writeTag(0x04, valueToStore, valueToStore, valueToStore, valueToStore);
writeTag(0x05, valueToStore, valueToStore, valueToStore, valueToStore);
writeTag(0x06, valueToStore, valueToStore, valueToStore, valueToStore);
Serial.println();
Serial.println("¡Tarjeta lista!");
// Led blink
for (int i = 0; i < 10; i++) {
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
}
delay(5000);
}

}
}
}

void readTag(byte modeRead, byte blocks) {


byte checksum = 0x01 + 0x03 + 0x10 + modeRead + blocks;
Serial.write(0xFF);
Serial.write(0x01);
Serial.write(0x03);
Serial.write(0x10);
Serial.write(modeRead);
Serial.write(blocks);
Serial.write(checksum);
delay(200);
while (Serial.available() > 0) {
Serial.read();
}
}

void writeByte(byte data) {


int aux_1 = 0;
int aux_2 = 0;
aux_1 = data / 16;
aux_2 = data % 16;
if (aux_1 < 10) {
Serial.write(aux_1 + 48);
}
else {
Serial.write(aux_1 + 55);
}
if (aux_2 < 10) {
Serial.write(aux_2 + 48);
}
else {
Serial.write(aux_2 + 55);
}
Serial.print(" ");
}

void writeTag(byte block, byte data0, byte data1, byte data2, byte data3) {
byte checksum = 0x01 + 0x06 + 0x20 + block + data0 + data1 + data2 + data3;
Serial.write(0xFF);
Serial.write(0x01);
Serial.write(0x06);
Serial.write(0x20);
Serial.write(block);
Serial.write(data0);
Serial.write(data1);
Serial.write(data2);
Serial.write(data3);
Serial.write(checksum);
delay(2000);
while (Serial.available() > 0) {
Serial.read();
}
}

bool getTag() {
val = Serial.read(); // we read ff
if (val > 0) {
Serial.read(); // we read 01
Serial.read(); // we read 0d
Serial.read(); // we read 10

block1_byte1 = Serial.read(); // we read block 1 byte 1


block1_byte2 = Serial.read(); // we read block 1 byte 2
block1_byte3 = Serial.read(); // we read block 1 byte 3
block1_byte4 = Serial.read(); // we read block 1 byte 4

block2_byte1 = Serial.read(); // we read block 2 byte 1


block2_byte2 = Serial.read(); // we read block 2 byte 2
block2_byte3 = Serial.read(); // we read block 2 byte 3
block2_byte4 = Serial.read(); // we read block 2 byte 4

block3_byte1 = Serial.read(); // we read block 3 byte 1


block3_byte2 = Serial.read(); // we read block 3 byte 2
block3_byte3 = Serial.read(); // we read block 3 byte 3
block3_byte4 = Serial.read(); // we read block 3 byte 4

block4_byte1 = Serial.read(); // we read block 4 byte 1


block4_byte2 = Serial.read(); // we read block 4 byte 2
block4_byte3 = Serial.read(); // we read block 4 byte 3
block4_byte4 = Serial.read(); // we read block 4 byte 4

block5_byte1 = Serial.read(); // we read block 5 byte 1


block5_byte2 = Serial.read(); // we read block 5 byte 2
block5_byte3 = Serial.read(); // we read block 5 byte 3
block5_byte4 = Serial.read(); // we read block 5 byte 4

block6_byte1 = Serial.read(); // we read block 6 byte 1


block6_byte2 = Serial.read(); // we read block 6 byte 2
block6_byte3 = Serial.read(); // we read block 6 byte 3
block6_byte4 = Serial.read(); // we read block 6 byte 4

block7_byte1 = Serial.read(); // we read block 7 byte 1


block7_byte2 = Serial.read(); // we read block 7 byte 2
block7_byte3 = Serial.read(); // we read block 7 byte 3
block7_byte4 = Serial.read(); // we read block 7 byte 4

Serial.read(); // we read checksum


Serial.println();
Serial.println("Tarjeta encontrada con contenido: ");
Serial.println("---------------------------------------");
Serial.print("-- Bloque 1 -- | ");
writeByte(block1_byte1);
Serial.print(" | ");
writeByte(block1_byte2);
Serial.print(" | ");
writeByte(block1_byte3);
Serial.print(" | ");
writeByte(block1_byte4);
Serial.println(" |");
Serial.print("-- Bloque 2 -- | ");
writeByte(block2_byte1);
Serial.print(" | ");
writeByte(block2_byte2);
Serial.print(" | ");
writeByte(block2_byte3);
Serial.print(" | ");
writeByte(block2_byte4);
Serial.println(" |");
Serial.print("-- Bloque 3 -- | ");
writeByte(block3_byte1);
Serial.print(" | ");
writeByte(block3_byte2);
Serial.print(" | ");
writeByte(block3_byte3);
Serial.print(" | ");
writeByte(block3_byte4);
Serial.println(" |");
Serial.print("-- Bloque 4 -- | ");
writeByte(block4_byte1);
Serial.print(" | ");
writeByte(block4_byte2);
Serial.print(" | ");
writeByte(block4_byte3);
Serial.print(" | ");
writeByte(block4_byte4);
Serial.println(" |");
Serial.print("-- Bloque 5 -- | ");
writeByte(block5_byte1);
Serial.print(" | ");
writeByte(block5_byte2);
Serial.print(" | ");
writeByte(block5_byte3);
Serial.print(" | ");
writeByte(block5_byte4);
Serial.println(" |");
Serial.print("-- Bloque 6 -- | ");
writeByte(block6_byte1);
Serial.print(" | ");
writeByte(block6_byte2);
Serial.print(" | ");
writeByte(block6_byte3);
Serial.print(" | ");
writeByte(block6_byte4);
Serial.println(" |");
Serial.print("-- Bloque 7 -- | ");
writeByte(block7_byte1);
Serial.print(" | ");
writeByte(block7_byte2);
Serial.print(" | ");
writeByte(block7_byte3);
Serial.print(" | ");
writeByte(block7_byte4);
Serial.println(" |");
Serial.println("---------------------------------------");

Serial.println();
return true;
} else {
return false;
}
}

También podría gustarte