You are on page 1of 85

SISTEMA PARA CONTROL Y MONITOREO EN LOGSTICA DE EVENTOS

BASADO EN RFID




EDISON ARLEY NIO TORRES
EDWIN JAVIER MARTINEZ MESA



UNIVERSIDAD NACIONAL DE COLOMBIA
FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA
BOGOT
2010




SISTEMA PARA CONTROL Y MONITOREO EN LOGSTICA DE EVENTOS
BASADO EN RFID

EDISON ARLEY NIO TORRES
EDWIN JAVIER MARTINEZ MESA


TRABAJO DE GRADO

DIRECTOR: JHON JAIRO RAMIREZ ECHEVERRY


UNIVERSIDAD NACIONAL DE COLOMBIA
FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA
BOGOT
2010























AGRADECIMIENTOS

Este proyecto no se hubiera podido llevar a cabo sin la participacin de gran
cantidad de personas, entre las cuales debemos resaltar a nuestros familiares y
amigos como parte fundamental de nuestra formacin, por lo que agradecemos su
apoyo incondicional.
A nuestro director de tesis, ingeniero John Jairo Ramrez por su orientacin antes
y durante el desarrollo del proyecto.
Al grupo de investigacin CMUN, dirigido por el ingeniero John Jairo Ramrez y el
ingeniero Julin Herrera, por brindarnos el espacio para desarrollar nuestra idea
de tesis y poderla llevar a cabo.













CONTENIDO

1. INTRODUCCION ............................................................................................ 10
2. OBJETIVOS .................................................................................................... 11
2.1. Objetivo General. ...................................................................................... 11
2.2. Objetivos especficos. ............................................................................... 11
3. Marco terico .................................................................................................. 12
3.1. Marco Conceptual. .................................................................................... 12
3.1.1. Logstica de Eventos ............................................................................. 12
3.1.2. Software Libre ....................................................................................... 13
3.1.3. RFID: Identificacin por Radiofrecuencia. ............................................. 13
3.1.3.1. Tag Pasivo. ..................................................................................... 14
3.1.3.2. Tag Activo. ...................................................................................... 14
3.1.4. Sistema Embebido ................................................................................ 14
3.1.4.1. Compilacin Cruzada ...................................................................... 15
3.1.4.2. Buildroot .......................................................................................... 16
3.1.5. Bases de datos................................................................................... 16
3.1.5.1. Modelo Standalone ......................................................................... 17
3.1.5.2. Modelo Cliente-Servidor.................................................................. 17
3.1.5.3. Por qu MySQL? ...................................................................... 1817
3.2. Marco Contextual ...................................................................................... 18
3.2.1. Ventajas del Software libre ................................................................. 18


4. Descripcin del proyecto................................................................................. 20
4.1. Descripcin General ................................................................................. 20
4.1.1. Bloque 1: Inscripcin al Evento .......................................................... 21
4.1.2. Bloque 2: Puntos remotos de monitoreo y control .............................. 24
4.1.3. Bloque3: Base de datos ..................................................................... 27
4.2. Campos de Informacin de la base de datos ....................................... 2928
5. Especificaciones ......................................................................................... 3130
5.1. ATNGW100 Network Gateway ............................................................. 3130
5.2. RFID ..................................................................................................... 3231
5.2.1. HF Mifare Easy Compact Plug&Play RS-232 ................................. 3231
5.2.2. TAG Mifare MF1ISC50 ................................................................... 3433
5.3. Otros ..................................................................................................... 3534
5.3.1. Modulo USART-RS232 .................................................................. 3534
5.3.2. Cable USB-Serial ........................................................................... 3736
6. DEsarollo .................................................................................................... 3938
6.1. Configuracin del Sistema Embebido ................................................... 3938
6.1.1. Modificacin del Kernel con Buildroot ............................................ 3938
6.1.2. Herramientas de Compilacin Cruzada. ......................................... 4140
6.1.3. Comunicacin Serial con Modulo RFID .......................................... 4140
6.1.4. Comunicacin y Envi de Datos por Ethernet ................................ 4241
6.2. Programa en C para la aplicacin ......................................................... 4342
6.3. Base de datos ....................................................................................... 4847
6.4. Interfaz Grafica ..................................................................................... 5047
7. resultados ................................................................................................... 5351


8. Conclusiones .............................................................................................. 5654
9. Recomendaciones ...................................................................................... 5755
10. Glosario .................................................................................................... 5856
11. BIBLIOGRAFA ........................................................................................ 6058


















TABLA DE FIGURAS

Figura 1. Esquema general del Proyecto .......................................................... 2122
Figura 2. TAG Mifare MF1ISC50 ...................................................................... 2223
Figura 3. Diagrama general aclaratorio de la arquitectura de diseo de software
MVC empleado .................................................... Error! Bookmark not defined.23
Figura 4. Interfaz grfica, donde se observan las opciones que le brinda al usuario
y la informacin de los asistentes inscritos al evento que guarda y consulta de la
base de datos. ................................................................................................... 2324
Figura 5. Vista del Historial generado por la interfaz grfica. ........................... 2325
Figura 6. Utilidades de bsqueda de informacin en la base de datos. ........... 2425
Figura 7. (a) Comunicacin servidor Punto remoto. (b) Fotografa del modulo de
monitoreo y control remoto. (c) Visualizacin de ingreso aceptado. (d)
Visualizacin de ingreso Denegado. .................................................................. 2627
Figura 8.Diagrama de flujo del programa que se ejecuta en el embebido. ..... Error!
Bookmark not defined.29
Figura 9.Vista general de las tablas y campos de la base de datos relacional,
hecha en el software libre MySQL. ................................................................... 2831
Figura 3. Sistema Embebido NGW100 empleado. ........................................... 3133
Figura 3. Vista General del modulo HF Mifare Easy ......................................... 3335
Figura 4. Vista General del TAG Mifare. ........................................................... 3436
Figura 5. Conexin USART-RS232 extra. ........................................................ 3537
Figura 6. Vista del impreso diseado. ............................................................... 3638
Figura 7. Fotografa de la PCB diseada .......................................................... 3739
Figura 8, Fotografa del montaje ....................................................................... 3739
Figura 9. Cable USB-serial ............................................................................... 3840
Figura 10. Menu del Buildroot ........................................................................... 4042
Figura 11. Diagrama de flujo de la aplicacin en C. .......................................... 4446


Figura 12. Diagrama general aclaratorio de la arquitectura de diseo de software
MVC (Model-View-Controller) empleado. ............................................................. 50
Figura 13. Pantalla de representacin del interfaz grafico, donde se observa las
opciones que le brinda al usuario y la informacin de los asistentes inscritos al
evento que guarda y lee de la base de datos. ....................................................... 52
Figura 14. Vistas en tiempo real del movimiento de personas por las diferentes
actividades del evento, mostradas en grficos, y listas informativas. ................ 5253




TABLA DE ANEXOS

ANEXO A. Programa hecho en C para el Sistema Embebido. ..................... 6159
ANEXO B. Programa Interfaz Grfica en Netbeans (JAVA). ......................... 6563







1. INTRODUCCION
Cuando hablamos de eventos sociales nos estamos refiriendo a una reunin de
personas entorno a un suceso importante y programado, pertenecientes a
cualquier rea social, artstica o deportiva. Dicha reunin puede presentarse en
forma de seminario, taller, conferencia, inauguracin, exposicin, entre otros. El
desarrollo de un evento social conlleva gran cantidad de actividades para poderlo
llevar a cabo de manera exitosa. Por ejemplo, se requiere de tcnicas de gestin
sobre pblicos y de metodologas que permitan una rigurosa y adecuada
organizacin. Una buena parte de estas actividades estn relacionadas con la
identificacin de los asistentes al evento, el control de la entrada a los lugares
donde se realizarn diferentes tipos de actividades y el manejo de los permisos
que tienen los asistentes acorde con los derechos adquiridos dentro del evento.
En este trabajo de grado se utilizan como herramientas de ayuda en la logstica
de eventos la identificacin por radiofrecuencia, RFID
1
, junto con un sistema
embebido
2
y una base de datos. El sistema permite la identificacin del asistente
al evento, la verificacin de sus datos mediante un sistema embebido que se
conecta va Ethernet a una base de datos y la obtencin de informacin para el
manejo de permisos en el evento. As mismo, la base de datos almacena la
informacin necesaria para la elaboracin de estadsticas que permitan analizar la
informacin durante y despus del evento.




1
RFID (Identificacin por Radiofrecuencia) es una tecnologa para identificar un objeto mediante
ondas de radio.
2
Un embebido es un computador destinado a desarrollar tareas especficas.


2. OBJETIVOS
2.1. Objetivo General.
Monitorear y controlar el ingreso de las personas asistentes a diferentes
actividades de un evento mediante RFID y un sistema embebido para conectarse
va Ethernet.
2.2. Objetivos especficos.
Disear una aplicacin de software para crear una interfaz grafica de
usuario que permita programar los campos de informacin (nombre,
documento, etc) en la Base de Datos.
Configurar una tarjeta embebida SBC (Single board Computer, con puerto
Ethernet) para que se conecte a una red Ethernet e intercambie informacin
con la base de datos ubicada en la misma red, la cual contiene la datos de
los asistentes al evento.
Configurar una tarjeta embebida SBC (Single board Computer) con
conexin Ethernet y con sistema operativo basado en Linux, que reciba y
envi informacin mediante IP para conexin con la base de datos.
Configurar la tarjeta embebida SBC (Single board Computer) para que se
comunique con el modulo lector de RFID mediante el puerto RS232.
Crear una aplicacin en el sistema embebido SBC que genere la decisin
de habilitar o no el acceso del asistente al evento, esto mediante
indicadores visuales.
Crear una base de datos con la informacin de cada asistente al evento, la
cual se recibe mediante una red Ethernet.


3. MARCO TERICO
3.1. Marco Conceptual.
3.1.1. Logstica de Eventos
La realizacin de eventos tiene una gran cantidad de actividades que demandan
mucho trabajo. Se debe tener claro: Los objetivos, el presupuesto, cantidad de
personas a congregar, el lugar donde se va a realizar, el acceso al sitio y el
parqueadero, como cmose va a controlar la entrada de las personas y cmocomo
se va a llevar un registro del desarrollo del evento, etc.
La planificacin de un evento se inicia 6 o 8 meses atrs (dependiendo de la
magnitud del evento). Se ha llegado a decir que la realizacin de un evento puede
llegar a tener 180 tems o ms, para que ste este se desarrolle de forma
adecuada.
La seguridad de los asistentes al evento es un tem muy importante, sobre todo si
a este est asisten personas del mbito poltico como presidentes, senadores, o
personas con cargos importantes. Es importante conocer quienesquines van a
asistir al evento, llegando a ser necesario reconfirmar la asistencia de las
personas al evento y solicitar su identificacin al ingresar.
El ingreso de las personas debe realizarse de forma organizada y debe ser
controlado de alguna forma. Es necesario asegurar suficientes sitios de parqueo,
personal que se encargue de la revisin de los vehculos y corroborar la
disponibilidad de cupo. Dentro del evento es necesario contar con la labor de
diversos profesionales para hacer la estada de las personas lo mas ms
placentera posible. Se debe contar con una persona que brinde informacin
precisa a cerca de cualquier inquietud. (AENIAP, 2006)


3.1.2. Software Libre
A continuacin mostramos una definicin de software libre encontrada en la
pagina pgina de GNU: El software libre es una cuestin de la libertad de los
usuarios de ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software.
Ms precisamente, significa que los usuarios de programas tienen las cuatro
libertades esenciales.
La libertad de ejecutar el programa, para cualquier propsito (libertad 0).
La libertad de estudiar cmo trabaja el programa, y cambiarlo para que
haga lo que usted quiera (libertad 1). El acceso al cdigo fuente es una
condicin necesaria para ello.
La libertad de redistribuir copias para que pueda ayudar al prjimo (libertad
2)
La libertad de distribuir copias de sus versiones modificadas a terceros (la
3 libertad). Si lo hace, puede dar a toda la comunidad una oportunidad de
beneficiarse de sus cambios. El acceso al cdigo fuente es una condicin
necesaria para ello. (GNU Operating Sistem,2010)
3.1.3. RFID: Identificacin por Radiofrecuencia.
RFID utiliza la radiofrecuencia para el almacenamiento y recuperacin de datos
remoto. El sistema en general se compone de un lector (el cual puede ser a su vez
programador), un TAG y un sistema de procesamiento de datos.
El propsito fundamental de la tecnologa RFID es transmitir la identidad de un
objeto (similar a un nmero de serie nico) mediante ondas de radio. Las
tecnologas RFID se agrupan dentro de las denominadas Auto ID (automatic
identification, o identificacin automtica). (wikipedia, 2008)


Los TAG RFID o etiquetas RFID pueden llegar a tener diferentes presentaciones
debido a su pequeo tamao. Se puede hablar de 2 tipos de TAG: Activos y
Pasivos.
3.1.3.1. Tag Pasivo.
Son Etiquetas RFID que no poseen alimentacin, se utiliza la energa del
interrogador (lector) tanto para recibir como para transmitir. Se utilizan tcnicas de
construccin de circuitos integrados para su fabricacin, alcanzando tamaos
pequeos y llegando a estar ubicados en diferentes superficies como vidrios de
automviles. El mtodo de fabricacin hace que sean econmicos y se puedan
fabricar en cadena. Al no contar con batera, estn diseados para tener poco
alcance (distancias de lectura de 10 cm a unos pocos metros), no se comportan
muy bien en ambientes ruidosos (paredes metlicas, ruido electromagntico y
todas las superficies que reflejen la seal de radiofrecuencia).
3.1.3.2. Tag Activo.
A diferencia de los Tags pasivos, poseen fuente de alimentacin, por lo tanto
generan menos errores de lectura. Tiene alcances de cientos de metros y se
pueden utilizar para monitorean diversas variables (temperatura, posicin). Debido
a su fuente de alimentacin son mas ms costosos, tienen menor vida til y son
ms mas grandes que los Tags pasivos.
3.1.4. Sistema Embebido
Un sistema embebido es un computador diseado para un propsito especfico, a
diferencia de un computador normal, no tiene todas las aplicaciones y perifricos
que estamos acostumbrados. Un gran nmero de sistemas embebidos no tiene


interfaz grfica ni teclado, por lo que solo se puede acceder a ellos por medio del
puerto serial, USB o LAN. Debido a que las aplicaciones de los sistemas
embebidos son especficas, existen gran variedad de los mismos con funciones
distintas. El tamao de un sistema embebido es mucho menor que el de un
computador de escritorio, por esta razn la capacidad de procesamiento y
almacenamiento es menor.
Cuando se destina un sistema embebido a una actividad determinada, ste este
trabajar trabajara exclusivamente en dicha actividad. Despus de ser configurado
para trabajar de una forma determinada, un embebido no realizara realizar una
actividad diferente, lo que lo diferencia de un computador de escritorio, el cual
puede ser destinado a ejecutar diferentes trabajos, es decir, es de propsito
general.
Lo ideal de un sistema embebido es que sea robusto, consuma poca energa y
sea confiable, ya que estos se utilizan para manejar actividades que conllevan
riesgos como el control de operacin de algunos dispositivos en aviones.
Los sistemas embebidos tienen componentes de hardware y software. Al igual que
un computador de escritorio, un embebido consta de un sistema operativo, a modo
de comparacin, un computador de escritorio cuenta con Linux, mientras un
embebido utiliza u-Linux (micro Linux). Existe gran variedad de sistemas
operativos, debido a que generalmente, este es suministrado por el fabricante del
embebido, el cual desarrolla el sistema operativo o realiza algunas modificaciones
al Kernel de Linux.
3.1.4.1. Compilacin Cruzada
Para realizar una aplicacin que se va a ejecutar en el sistema embebido, es
conveniente poder utilizar la capacidad de procesamiento de un computador de
escritorio. Por esta razn, existen las herramientas de compilacin cruzada, es
Comment [U1]: ES UNA
EXPLICACIN MUY ESPECFICA
QUE NO APLICA PARA NUESTRO
TRABAJO


decir, se puede crear un ejecutable que sea compatible con las caractersticas de
hardware del sistema embebido, el cual no va a funcionar en el computador de
escritorio, pero si en el embebido. Estas herramientas de compilacin las
proporciona el fabricante del embebido, o pueden ser creadas mediante el
Buildroot (tambin proporcionado por el fabricante).
3.1.4.2. Buildroot
El Buildroot es un software que nos permite construir las herramientas de
compilacin cruzada, el Kernel de Linux para el embebido y otras herramientas
indispensables para trabajar con el embebido. Este programa tiene
configuraciones predefinidas para sistemas embebidos especficos, pero tambin
posee un men para configurar manualmente nuestro Kernel.
3.1.5. Bases de datos
Cuando se trabaja con bases de datos, hay que tener en cuenta que cantidad de
datos se van a almacenar, cuantas veces se va a acceder a ellos, cuanto se
modifican, cuantos usuarios los acceden simultneamente, que pasa si se
corrompen o pierden.
Para que una base de datos sea eficiente, es necesario normalizar los datos para
que estos no se repitan en las tablas, de esta forma es mas fcil la actualizacin,
traspaso y lectura de datos. Las normas bsicas de normalizacin son: Eliminar
datos redundantes, crear una tabla de entidades aparte para cada conjunto de
datos relacionados y por ultimo, especificar un nico campo para que funcione
como clave primaria en cada tabla.
El software para crear bases de datos es variado, pero entre los mas conocidos
tenemos Oracle (privativo y costoso), MySQL que antes era libre y fue adquirido


por Oracle, por lo que las licencias son restringidas. Por ultimo ltimo tenemos
PostgreSQL, que tiene desempeo similar a MySQL y es libre. En el momento se
todava se trabaja bastante con MySQL pero dentro de poco, la licencia va a dejar
de ser publica.
Existen bsicamente 2 arquitecturas de bases de datos: Modelo aislado o
Standalone y Modelo Cliente-Servidor.
3.1.5.1. Modelo Standalone
En este modelo, la base de datos y el servidor residen en la misma maquina, por
lo que contienen el mismo sistema de archivos. Solo puede acceder un usuario
concurrentemente y no esta en red.
3.1.5.2. Modelo Cliente-Servidor
El cliente y el servidor pueden estar en un computador diferente, pueden acceder
varios usuarios concurrentemente. Esta arquitectura es apropiada para colocarla
en la red, lo que permite el acceso instantneo a la base de datos donde y cuando
se quiera. La seguridad de la base de datos esta representada por una clave de
administrador y un nombre de usuario.



3.1.5.3. Por qu MySQL?
Elegimos MySQL como software para trabajar la base de datos por ser un
programa de cdigo abierto con licencia GPL, soporte de SQL
3
, excelente
desempeo y confiabilidad, fcil uso de sus herramientas, como la creacin de
tablas, posee soporte gratis en gran cantidad de foros a nivel mundial y puede
trabajar entre computadores que posean Linux y Windows, es decir, no excluye
entre sistema de archivos.
3.2. Marco Contextual
3.2.1. Ventajas del Software libre
El software libre tiene ciertas ventajas sobre el software privativo, pero esto no
quiere decir que este ltimo no sea til y obsoleto, ya que existen muchas
aplicaciones que tienen excelentes herramientas. A continuacin enumeramos
algunas de estas ventajas:
El factor econmico es muy importante, ya que las licencias de software
pueden llegar a ser muy costosas, impidiendo que pequeas empresas y en
general las personas, puedan contar con el software necesario para
generar progreso. Por esta razn, el software libre se convierte en una
gran alternativa de desarrollo e inclusin de la sociedad.
Las licencias de software libre, permiten la instalacin del mismo en la
cantidad de maquinas que el usuario desee, as como su redistribucin.

3
Lenguage Query System: Sistema de Lenguaje de Preguntas utilizado generalmente en sistemas
administradores de bases de datos.
Comment [U2]: Revisar si es
necesaria una seccin slo para esta
parte (Marco contextual)
Comment [U3]: Ventajas del software
libre o del software privativo?


Se tiene acceso al cdigo fuente del software, por esta razn, se pueden
desarrollar nuevas aplicaciones en base a las existentes sin tener que partir
de cero.
Se centra en la atencin al cliente y no en la venta de licencias. Esto es
debido a que las empresas que distribuyen el software compiten en
igualdad de condiciones.
Se logra un mayor soporte debido a la gran cantidad de desarrolladores de
software a nivel mundial. El software privativo esta renovando
continuamente sus productos, dejando de ofrecer el soporte adecuado a
sus productos obsoletos, obligando al usuario a adquirir una versin mas
reciente del software para corregir algn error del anterior o para tener
acceso a nuevas y mejores herramientas.
El software libre maneja formatos de archivos estndar, por esta razn no
tiene problemas de compatibilidad ni de versiones.
La correccin de errores en el software se hace por gran cantidad de
personas en la red, por esta razn, las aplicaciones tienden a ser mas
seguras y estables.
La gestin de software (instalacin) es cada vez mas sencilla, contado
actualmente con programas que permiten adquirir gran cantidad de
aplicaciones de forma gratuita con solo marcar una casilla.
Las aplicaciones de software libre estn mejorando da a da, debido al gran
trabajo de mucha gente a nivel mundial, llegando a superar al software
privativo. (Digital, 2006)
El software privativo tambin tiene ventajas, pero este trabajo esta enfocado en
desarrollar herramientas basndose nicamente en software libre.




4. DESCRIPCIN DEL PROYECTO
4.1. Poner nuevamente una pequea justificacin redactando el por qu
del proyecto de manera que sirva de contextualizacin para el lector
antes de comenzar a leer la descripcin de la solucin a la que
llegamos.
4.1.4.2. Descripcin General
El proyecto consta de tres bloques funcionales tal como se muestra en la figura 1:
Lugar de inscripcin al evento (bloque 1), puntos remotos de monitoreo y control
distribuidos en los diferentes lugares del evento (bloque 2) y servidor base de
datos (bloque 3).



Figura 1. Esquema general del Proyecto

4.1.1.4.2.1. Bloque 1: Inscripcin al Evento
En este lugar, a cada persona se le entrega una tarjeta RFID (Etiqueta o TAG
RFID). En la figura 2 se observa que el TAG utilizado en este proyecto tiene forma
de tarjeta.



Figura 2. TAG Mifare MF1ISC50
El TAG posee una identificacin (Identification, ID) propia e irrepetible, por lo cual
la relacin ID-usuario tambin ser nica.
El proceso de inscripcin se hace mediante una interfaz grfica de usuario
desarrollada en Java (Eckel, 2006), sobre la plataforma Netbeans/Linux. Dicho
software utiliza un patrn de diseo MVC (Model-View-Controller) explicado en el
numeral 6.4.
Adems de la inscripcin, a travs de la interfaz grfica que se encuentra en este
bloque 1, los organizadores del evento pueden:
Registrar los usuarios y seleccionar las actividades a las cuales stos tienen
permiso para ingresar.
Asignar tarjeta RFID a cada usuario mediante la captura de la ID por medio
un lector RFID (rfid-webshop, 2009), el cual enva la informacin en formato
RS232 (ver figura 1. Bloque 1).
Permitir bsqueda de registros realizados, por cdula, nombre o ID de la
tarjeta.
Consultar el historial de ingresos de cada usuario a las actividades del evento
detallando la hora y el lugar, tal como se muestra a manera de ejemplo en la
figura 5.
Realizar en tiempo real grficas con estadsticas del evento (ver figura 5).
Dichas estadsticas pueden ser acerca de los diferentes servicios a los que
acceden los usuarios tales como restaurante, parqueadero, seminarios o
charlas paralelas, etc.
Comment [U4]: Citar en este prrafo,
o donde corresponda, las figuras 3, 4 y
5




Figura 3. Interfaz grfica, donde se observan las opciones que le brinda al usuario
y la informacin de los asistentes inscritos al evento que guarda y consulta de la
base de datos.



Figura 4. Vista del Historial generado por la interfaz grfica.




Figura 5. Utilidades de bsqueda de informacin en la base de datos.

Indicar que todo los datos ingresados en este punto sern almacenados en la
base de datos, la cual se explicar ms adelante. Esto con el fin de que el lector
sepa que todos estos datos son guardados en un servidor y no en el hardware que
implementamos en el proyecto.

4.1.2.4.2.2. Bloque 2: Puntos remotos de monitoreo y control
Un punto remoto de monitoreo y control, hace referencia a los mdulos que se
ubican por ejemplo en la entrada, parqueadero, restaurante etc. En estos mdulos,
el usuario pasa la tarjeta RFID al momento de ingresar a alguna actividad.

Sitios a ser monitoreados. Para efectos de este proyecto se han seleccionado 3
sitios para ser monitoreados, pero la cantidad de stos est sujeta a las
necesidades del evento:


Entrada de personas: El objetivo de este sitio en el evento es tener un
punto de control de ingreso de las personas a una actividad o servicio. En
la entrada se puede diferenciar entre asistentes al evento, administrativos,
seguridad, aseo, etc. En este proyecto tomamos una sola categora de
asistentes al evento, pero las opciones anteriores se pueden desarrollar a
nivel de software en la base de datos, por lo cual la cantidad de
categoras de las personas se puede expandir, permitiendo escalar
fcilmente esta caracterstica acorde con el evento. Al momento del
ingreso las personas debern presentar la tarjeta RFID que les fue
entregada en el momento de inscripcin y que tiene la ID del usuario. El
objetivo es poder verificar si el usuario tiene o no privilegios de ingreso.
Esto se realiza por medio de un lector RFID, comunicado va Ethernet de
manera remota con la base de datos.
Parqueadero: Este sitio es un punto clave que puede llegar a generar
congestiones e incomodidades si no se tiene informacin de la cantidad
de vehculos que llegaran al evento. Por esta razn, pretendemos
controlar esta actividad con la tarjeta RFID que se le entrega a cada
asistente para ingresar al evento.
Restaurante: Dependiendo del organizador del evento, ste puede incluir
el derecho a comidas, representado en almuerzo o algn refrigerio. Con
RFID podemos garantizar que esta actividad se desarrolle de forma
organizada y segura, adems de brindar informacin de la cantidad real
de alimentos entregados, datos que son tiles para la contabilidad del
evento.
En los lugares mencionados anteriormente se ubica el mdulo de sistema
embebido con lector RFID desarrollado en este trabajo de grado, mostrado en la
figura 7b, el cual se explicar a continuacin.



Figura 6. (a) Comunicacin servidor Punto remoto. (b) Fotografa del modulo de
monitoreo y control remoto. (c) Visualizacin de ingreso aceptado. (d)
Visualizacin de ingreso Denegado.



Funcionamiento de los puntos remotos. Cada mdulo se basa en un sistema
embebido (Camargo Ivn, 2009) y un lector RFID (ver Bloque 2 en la figura 1). El
sistema embebido utilizado es la ATNGW100 (Atmel, 2009), tarjeta de desarrollo
basada en un microprocesador Atmel AT32AP7000 con arquitectura RISC, capaz
de ejecutar instrucciones a 150 MHz, tiene puertos Ethernet, USART y I/O de
propsito general requeridos por el proyecto. El embebido permite comunicar el
lector RFID con la base de datos mediante el puerto Ethernet sin tener que
disponer de un computador o PC en el punto de ingreso. Otras ventajas estn
representadas en cuanto al procesamiento de datos, manejo de interfaz grfica,


sonidos etc. Permitiendo de esta manera un mayor desarrollo del proyecto en una
siguiente etapa.
El lector RFID del mdulo obtiene la ID del TAG cuando un usuario acerca la
tarjeta. El sistema embebido recibe la informacin del lector RFID va serial, le
agrega la identificacin del lugar donde la tarjeta fue leda (sitio donde est
ubicado el mdulo: entrada, restaurante o parqueadero) y la enva al servidor de
base de datos, obteniendo la respuesta de si permite o no el acceso. En el
numeral 6.2 se muestra el diagrama de flujo de la rutina que se ejecuta dentro del
embebido.
En el diagrama de flujo mostrado en la figura 8, se describe el funcionamiento de
un punto remoto. Primero se definen los argumento necesarios para gestionar la
conexin con la base de datos: IP y puerto del servidor de base de datos, ID del
punto remoto (entrada, parqueadero y restaurante). En el siguiente bloque se
configuran los dispositivos: USART, leds y socket. A continuacin, se realiza un
bucle esperando una lectura serial generada por el lector RFID cuando un
usuario acerca su tarjeta. Al realizarse la lectura de la ID del TAG, se concatena
con la ID que identifica la ubicacin del punto remoto y se enva a la base de datos.
La base de datos responde con la orden de aceptar o denegar el acceso, para ser
visualizado mediante leds (figura 7c y 7d).
4.1.3.4.2.3. Bloque3: Base de datos
Todos los datos que se reciben de los puntos remotos de monitoreo del evento y
la informacin que se adquiere en la interfaz de usurario se guarda y organiza en
una base de datos, conectada a la red Ethernet.
El diseo de la base de datos consiste en crear 5 tablas (ver figura 9) cuya
informacin se relaciona entre si. Estas tablas son:
Comment [U5]: Estas figuras NO
existen.
Comment [U6]: NO CORRESPONDE


Usuario: Contiene los datos personales de las personas que se inscriben al
evento.
Tarjeta: Contiene el registro de los ID de todas las tarjetas con las que se
cuenta y se pueden asignar al usuario.
Lugar: Contiene las actividades donde hay puntos de control y monitoreo
(ejemplo: Parqueadero, Entrada, Restaurante)
Registro: Se carga a partir de las anteriores, ya que contiene la informacin
del usuario, el ID de la tarjeta que se le asign y los servicios o privilegios
que adquiri al usuario.
Historial: Durante el evento esta tabla recibe informacin donde se registra
el uso de las tarjetas. Incluye nombre, cdula, sitio de acceso y fecha con
hora.

Figura 7.Vista general de las tablas y campos de la base de datos relacional,
hecha en el software libre MySQL.



4.2.4.3. Campos de Informacin de la base de datos
Para el manejo de la informacin de la persona que ingresa al evento (ya sea
empleado o asistente), contamos con una base de datos donde se obtiene la
informacin al momento de la entrega de la tarjeta RFID. Esta opcin nos permite
decidir entre programar toda la informacin referente a la persona en la tarjeta RFID
o simplemente identificarla mediante la ID nica de la tarjeta RFID.
Opcin 1: Guardar cada dato de la persona tal y como aparece en el numeral anterior
Opcin 2: Identificar a la persona mediante la ID nica de la tarjeta RFID asociando
dicho numero a su informacin personal en la base de datos.
Debido a que nuestro proyecto contempla la idea de que cada modulo lector RFID
est conectado a una red Ethernet por medio de un sistema embebido, la opcin 2 es
la ms adecuada debido a que en la base de datos podemos almacenar mucha ms
informacin que la que soporta una tarjeta RFID pasiva (en nuestro caso la
MF1ISC50 contiene l6 sectores con 4 bloques de 16 Bytes cada uno, 17 de los 64
bloques son para tareas especificas). La base de datos adems de espacio de
almacenamiento, nos permite tener una estadstica exacta en tiempo real del
comportamiento del evento.
De acuerdo a las actividades mencionadas en el numeral anterior, podemos definir
los campos de informacin que se van a almacenar en la base de datos al momento
en el que el cliente adquiere su entrada al evento.
Numero ID nico de la tarjeta RFID.
Nombre del asistente.
Documento de identidad.
Sexo
Actividad que desempea en el evento (asistente, seguridad, administrativo)






5. ESPECIFICACIONES
5.1. ATNGW100 Network Gateway
El primer hardware, que se requiere para llevar a cabo el funcionamiento del
proyecto, visto anteriormente, es un sistema base que tome la informacin del
modulo lector RFID, le adicione la informacin del punto del evento en el que se
encuentra, monte dicha informacin sobre la red y finalmente reciba la respuesta
que le enva el servidor remoto sobre el que esta la base de datos. Para esta tarea
se recurri al SBC ATNGW100, o mas conocido como NGW100, el cual es una
tarjeta de desarrollo basada en un microprocesador Atmel AT32AP7000. Con
arquitectura RISC, capaz de ejecutar instrucciones a 150 MHz, diseado para
aplicaciones en sistemas embebidos de bajo costo y bajo consumo de energa.

Figura 8. Sistema Embebido NGW100 empleado.
Como se observa en la figura, cuenta con diversos interfaces implementados,
tales como:
Comment [U7]: 1.CONSIDERO
QUE ESTA SECCIN DEBE SER
PUESTA DENTRO DE LA
DESCRIPCIN DEL PROYECTO
(CAPTULO 4) EN CADA BLOQUE
DONDE CORRESPONDAN LAS
ESPECIFICACIONES QUE ESTN
PRESENTANDO. AL PONER ESTA
SECCIN DE
ESPECIFICACIONES APARTE,
QUEDA MUY FRACCIONADA LA
INFORMACIN, A TAL PUNTO
QUE LE TOCA AL LECTOR
REGRESARSE EN EL
DOCUMENTO O RECORDAR DE
QU BLOQUE O SECCIN DEL
PROYECTO LE ESTN
HABLANDO.



16/32-bit SDRAM.
Dos 10/100 Ethernet MAC.
Controlador LCD de 20482048 pixel TFT/STN
Cuatro USART
Controlador de PS/2
Controlador SPI
Dispositivo USB 2.0 High Speed (480 Mbps)
MultiMedia Card Interface (MCI)
6 Multifunction timer/counters
Watchdog timer

Para la aplicacin del proyecto, se requera un modulo USART, para la lectura
serial del modulo lector RFID, y un modulo Ethernet para la comunicacin con la
base de datos remota, igualmente la presencia de un lector de tarjetas SDRAM,
facilita la tarea de cargar el programa de la aplicacin que ejecuta el
microprocesador.
Aunque este Sistema Embebido est sobredimensionado para las necesidades del
proyecto, permite avanzar en ejecucin del mismo a fin de darle culminacin en el
tiempo presupuestado, La placa ATNGW100 es capaz de correr el sistema
operativo Linux, versin de ncleo o kernel 2.6., otro aspecto que conllevo a su
adquisicin.
5.2. RFID
5.2.1. HF Mifare Easy Compact Plug&Play RS-232
La Universidad Nacional de Colombia sede Bogot cuenta con los mdulos
necesarios para la identificacin por radiofrecuencia. Para la lectura-escritura de la
Etiqueta RFID contamos con el modulo HF Mifare Easy compact Plug&Play RS-
232.



Figura 9. Vista General del modulo HF Mifare Easy
A continuacin se presentan algunos datos generales del modulo:

Frecuencia de Operacin: 13.56 MHz
Baud Rate 9600/56700 (Opcional)
Interfaz RS232/422
Voltaje de alimentacin 5 VDC
Corriente 80 mA
Temperatura de operacin de -40C a +85C
Distancia de Operacin Mx. 50mm hasta 90mm
En cuanto a las etiquetas pasivas RFID, la Universidad cuenta con el TAG Mifare
MF1ISC50. Esta tecnologa de tarjetas inteligentes sin contacto, es una de las ms
utilizadas a nivel mundial, es de bajo costo y tiene un alcance de lectura de 10 cm.


Esta tarjeta opera de acuerdo la ISO 14443 Tipo A y es desarrollada por NPX
semiconductors.
5.2.2. TAG Mifare MF1ISC50
En cuanto a las etiquetas pasivas RFID, la Universidad cuenta con el TAG Mifare
MF1ISC50. Esta tecnologa de tarjetas inteligentes sin contacto, es una de las ms
utilizadas a nivel mundial, es de bajo costo y tiene un alcance de lectura de 10 cm.
Esta tarjeta opera de acuerdo la ISO 14443 Tipo A y es desarrollada por NPX
semiconductors.

Figura 10. Vista General del TAG Mifare.
La memoria de las tarjetas MIFARE est compuesta por sectores y bloques, los
cuales tienen mecanismos de seguridad para controlar el ingreso a la informacin.
Tienen poca capacidad de procesamiento, por esta razn estn destinadas a ser
utilizadas en tarjetas de identificacin.
Distribucin de la memoria: la memoria est dividida en l6 sectores cada uno
con 4 bloques de 16 Bytes. En cada sector estn disponibles 3 bloques para
guardar informacin en formato libre, en resumen 17 de los 64 bloques son para
tareas especificas (incluyendo 1 bloque utilizado por el fabricante). Algunos de los
bloques poseen un formato llamado formato valor, estos bloques se comportan


de manera diferente permitiendo operaciones de incremento y descuento (estos
bloques se utilizan por ejemplo en los pasajes de bus).
5.3. Otros
5.3.1. Modulo USART-RS232
Aunque el sistema embebido cuenta con una entrada serial, esta es usada para el
manejo de la consola del sistema operativo, de modo que para comunicar el
puerto USART extra requerido, se implemento un hardware adicional que permite
la correcta conexin serial entre este y el modulo lector RFID. A continuacin se
muestra un diagrama del circuito implementado:

Figura 11. Conexin USART-RS232 extra.
Como se observa, est basado en un IC Max3232, el cual tiene la cualidad de ser
un cambiador de niveles de voltaje para el acople de las seales RS232 del lector
RFID, a las seales CMOS del procesador Atmel del sistema embebido.
o LAYOUT


Para la elaboracin de las pistas, y en general del impreso se recurri a la
herramienta de software libre KiCad, la cual se instala de manera prctica
ejecutando en la consola de Linux:
$ sudo apt-get install kicad
La imagen de las pistas se muestra a continuacin:

Figura 12. Vista del impreso diseado.
o CONEXION
Luego de implementar el modulo y ajustarlo fsicamente al sistema embebido, se
procedi a realizarle pruebas.
Es de aclarar que la forma del impreso fue establecida de tal manera que tenga
mltiple funcionalidad en el montaje final, as:
Circuito de acople basado en el IC MAX3232
Regulacin para la alimentacin del embebido (+9v), modulo lector (+5v) y
del IC MAX3232 (+3.3v).
Soporte fsico del lector RFID, en la estructura del lector remoto
(parqueadero, entrada,)



Para una mayor ilustracin del resultado obtenido a continuacin se muestran
imgenes de la tarjeta.

Figura 13. Fotografa de la PCB diseada

Figura 14. Fotografa del montaje
5.3.2. Cable USB-Serial
Un ltimo hardware necesario fue un cable USB-serial, el cual no se implemento
debido q que era mas econmico adquirirlo en el mercado, y se requiere
inicialmente para el modulo de lectura RFID en el lugar de inscripcin de datos,


pero tambin se usa para el acceso a la consola del sistema embebido, por ello y
la facilidad de manejo, se compro el siguiente cable:

Figura 15. Cable USB-serial
Las nicas caractersticas necesarias que se tienen para este cable/adaptador son
que trabaje a la velocidad de la consola del embebido (115200Bps), adems que
para practicidad en la alimentacin (+5v) del lector RFID del modulo de registro de
tarjetas se modifico dicho hardware para que en uno de sus pines del DB9, que no
se utilizan, enviara dicho voltaje al modulo, solucionando as el inconveniente de
alimentacin, eliminando una hardware adicional. Adems, se tuvo en cuenta q el
consumo del HF Mifare Easy es de tan solo 80mA, que se encuentra muy por
debajo del mximo permitido para un puerto USB estndar de cualquier
computador comercial.


6. DESAROLLO
6.1. Configuracin del Sistema Embebido
El embebido utilizado trabaja con el sistema operativo Linux, antes de montarlo en
la NGW100 es necesario configurarlo de tal forma que nos habilite los perifricos
necesarios para el proyecto. Necesitamos una USART para comunicarnos con el
lector RFID, el puerto WAN para conectarnos con la red Ethernet, el puerto LAN
para tener acceso remoto al sistema embebido en caso de no conocer la IP en el
puerto WAN (suministrada por el Router de la red Ethernet), por esta razn en el
puerto LAN colocamos una IP fija, en este caso 10.0.0.1.
6.1.1. Modificacin del Kernel con Buildroot
La imagen del Kernel de Linux para la NGW100, la creamos mediante el Buildroot.
Despus de obtener el Buildroot de la pgina de Atmel, procedemos a configurarlo
para ajustarlo a nuestro hardware. Existen comandos que crean una configuracin
predeterminada para cada embebido, estas estn definidas por Atmel. Para poder
ejecutar este y posteriores comandos, es necesario ubicarnos en el directorio del
Buildroot (para poder compilar el Buildroot es necesario trabajar en un computador
con sistema operativo Linux).
Abrimos un terminal y nos ubicamos en el directorio del Buildroot Luego
ejecutamos (como sper usuario):
make atngw100_defconfig
Con este paso creamos el archivo .conf, el cual contiene la configuracin del
Buildroot para nuestra board NGW100. Es decir, el Buildroot creara el kernel,
toolchain y otras herramientas para nuestro procesador especifico APT7000. Si
Comment [U8]: Cambiar por algo as
como: Configuracin del software. La
parte anterior de Hardware tambin era
DESARROLLO del proyecto.


deseamos realizar alguna modificacin especifica al Buildroot, podemos hacerlo
manualmente mediante el comando:
make menuconfig
Este comando abre una interfaz grfica que nos permite navegar en el men del
Buildroot y seleccionar las opciones que deseemos.

Figura 16. Menu del Buildroot
Se selecciona la versin del kernel 2.XXXXX junto con la orden de crear los
archivos binarios que despus sern escritos en la memoria flash para actualizar
la versin del kernel. A continuacin ejecutamos el comando:
make source
Con esto hacemos las descargas necesarias de las fuentes descritas en el
Buildroot. Por ultimo damos la orden de compilar el Buildroot.
make
Comment [U9]: ????? Qu
significan las XXXXX?


El Buildroot se demora aproximadamente 45 minutos compilndose. Cuando
deseamos modificar los archivos binarios creados para la NGW100, no tenemos
que esperar otros 45 minutos de compilacin. En este caso realizamos los
siguientes pasos:
make rootclean
make

Estos comandos borran los archivos binarios anteriores y crean los nuevos con la
modificacin respectiva.
6.1.2. Herramientas de Compilacin Cruzada.
El toolchain necesario para compilar nuestros programas y despus ejecutarlos en
la NGW100 es creado en:
~/buildroot-avr32-v2.3.0/build_avr32/staging_dir/usr/bin/
A continuacin se presenta un ejemplo para mostrar como se utilizan estas
herramientas para crear un archivo ejecutable .elf y poder ejecutarlo en la
NGW100.
~/buildroot-avr32-v2.3.0/build_avr32/staging_dir/usr/bin/avr32-linux-gcc -pipe -O3 -
g -Wall -mcpu=ap7000 -D_GNU_SOURCE -c -o Hello_World.o Hello_World.c
~/buildroot-avr32-v2.3.0/build_avr32/staging_dir/usr/bin/avr32-linux-gcc -pipe -O3 -
g -Wall -mcpu=ap7000 -o Hello_World Hello_World.o
6.1.3. Comunicacin Serial con Modulo RFID
Para poder utilizar alguna de las 4 USART del embebido, es necesario configurar
el Buildroot para que nos cree una imagen del Kernel con las USART habilitadas.
Esto se hace modificando el archivo setup.c en $BUILDROOT_DIR/


project_build_avr32/atngw100/linux-2.6.27.6/arch/avr32/ boards/atngw100/setup.c.
Es necesario modificar este documento en 2 partes, de tal forma que quede asi:
void __init setup_board(void)
{
at32_map_usart(1, 0); /* USART 1: /dev/ttyS0, DB9 */
at32_map_usart(2, 0); /* USART 2: /dev/ttyS0 */
at32_map_usart(3, 2); /* USART 3: /dev/ttyS2 */
at32_map_usart(0, 1); /* USART 0: /dev/ttyS1 */
at32_setup_serial_console(0);
}

En esta primera partes estamos asignando a cada USART un ttyS, los cuales
aparecern dentro de la carpeta /dev en Linux. Adems podemos ver que a la
USART 1 le estamos asignando el puerto DB9 que trae el embebido.

static int __init atngw100_init(void)
{
unsigned i;
/*
* ATNGW100 uses 16-bit SDRAM interface, so we don't need to
* reserve any pins for it.
*/
at32_add_system_devices();
at32_add_device_usart(0);
at32_add_device_usart(1);
at32_add_device_usart(2);
at32_add_device_usart(3);

De esta forma, al compilar el Buildroot, estos mdulos USART estarn disponibles
en /dev para ser utilizados por el programa en C.
6.1.4. Comunicacin y Envi de Datos por Ethernet
En el men del buildroot estn las opciones de network en las cuales se crea la
posibilidad de cargar aplicaciones de red, dado esto se le activaron al Kernel
varias de estas, las cuales son:


DHCP: (Dynamic Host Configuration Protocol - Protocolo Configuracin
Dinmica de Servidor) que permite al host obtener sus parmetros de
configuracin automticamente (para gestionar una IP) poder acceder a la red
sobre el protocolo TCP/IP, es la primera y principal tarea que se debe ejecutar
para poder pensar en conectar en red el sistema embebido. Su sintaxis de
ejecucin es:
~$udhcp eth0 // donde eth0 es el puerto Ethernet asignado
SSH: (Secure SHell) el cual permite acceder a es la consola del sistema de
manera remota, que fue til para acceder al sistema embebido sin la
necesidad del cable USB-serial, y convirtindose en la principal manera de
manejar los archivos del sistema operativo montado sobre la NGW100. Luego
de cargada la aplicacin al arrancar la tarjeta, era posible acceder al sistema
desde cualquier equipo conectado en red, con la observacin que si no era
una red LAN, se deba hacer un paso adicional para conocer su IP. La sintaxis
es:
~$ ssh user_name@host_name

Para la NGW100, definiendo root y roota como ususario y contrasea, adems
de una IP fija en su puerto Ethernet eth1, seria:

~$ ssh root@10.0.0.1
~$ password: roota
6.2. Programa en C para la aplicacin
Luego de instalado el sistema operativo LINUX-AVR sobre la tarjeta NGW100, con
las aplicaciones de red e interfaces necesarias activadas y recurriendo a las
herramientas de compilacin cruzada vistas a lo largo del documento, se procedi
construir en lenguaje C la aplicacin que se ejecutara en cada punto remoto. Esta
se encarga de tomar los datos del RFID por el USART microprocesador,
establecer el socket de comunicacin con la base de datos en el servidor remoto y


dependiendo de la informacin recibida da una respuesta al usuario del sistema
que asiste al evento.
Con el fin de contextualizarse con el cdigo, a continuacin se muestra con
lenguaje de usuario, el diagrama de flujo general de dicha aplicacin:

Figura 17. Diagrama de flujo de la aplicacin en C.
Como se observa, la aplicacin tiene esencialmente dos argumentos de entrada,
IP del servidor, y el puerto, informacin que se usa para el momento de la
conexin por Ethernet. El ID remoto, se refiere al nmero que se le asigna a cada
punto en el evento, as pues se predetermin:





Tabla 1. Identificacin de Puntos Remotos
LUGAR ID del punto remoto
Entrada Principal 1
Entrada Restaurante 2
Parqueadero 3
Actividad n n

El cdigo completo de programa se encuentra en el anexo A. De modo que la
lnea de comando que inicia el programa sobre el sistema embebido ser de la
forma:
~$ ./Nombre_remoto IP_servidor N puerto
A modo de de ejemplo, para los lugares implementados se ejecuta as:
~$ ./Entrada 10.203.10.110 5000
~$ ./Restaurante 10.203.10.110 5000
El siguiente paso es iniciar los interfaces, para ellos se cargan las libreras
necesarias para el manejo de los DEVICES:
//librerias socket
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
//librerias serial
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>





Para el caso de la entrada serial proveniente del RFID, se establece la velocidad
de transmisin, correspondiente a la del modulo Mifare RFID, y el USART
programado anteriormente, as:

#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyS1"

fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY);


Luego se las propiedades para obtener una entrada asincrnica, no canonca, ya
que solo se requiere la entrada de una cadena de caracteres serial, sin que exista
una periodicidad, ni algn tipo de sincrona con el reloj del sistema embebido, as:

fcntl(fd, F_SETOWN, getpid());
fcntl(fd, F_SETFL, FASYNC);
tcgetattr(fd,&oldtio);
tcflush(fd, TCIFLUSH)
tcsetattr(fd,TCSANOW,&newtio);


De igual manera, para abri el puerto Ethernet, se inicializa el socket:
sockfd= socket(AF_INET, SOCK_DGRAM, 0);
serv_addr.sin_family = AF_INET;
server = gethostbyname(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));



Donde se tiene que:
AF_INET: Se refiere a que se maneja IP versin 6.
SOCK_DGRAM: Es un socket UDP.
Server: Contiene el hostmane del servidor suministrado.


Serv_addr.sin_port: lugar de la estructura donde se carga el valor del puerto
a usar.
Con esto ya se esta listo para leer datos y enviarlos. Para obtener el dato serial se
utiliza:
res = read(fd,buf,8)


Siendo buf l registro de 8 bytes donde se almacena el dato ledo (el ID del TAG), y
fd el controlador del puerto abierto anteriormente. Se ajusta este dato con el del ID
del punto remoto que se ingreso como argumento y se enva por el socket
establecido:
n=sendto(sockfd,buffer,strlen(buffer),0,&serv_addr,length);

El ltimo paso del programa es leer la informacin (1 o 0) que le devuelve el
servidor, y mostrarla en los LEDs para denegar o aceptar el ingreso:

recvfrom(sockfd,buffer,256,0,&from, &length);
write(pio,&on_led1,4);
Finalmente el ejecutable que se exporta a la a memoria del la tarjeta NGW100,
para ser ejecutada se obtiene usando el comando de compilacin cruzada en el
equipo donde estn el ToolChain :

~$ avr32-linux-gcc -pipe -O3 -g -Wall -mcpu=ap7000 -D_GNU_SOURCE -c -o Entrada.o
Entrada.c
~$ /avr32-linux-gcc -pipe -O3 -g -Wall -mcpu=ap7000 -o Entrada Entrada.o



6.3. Base de datos
Para el manejo de la informacin que se obtiene tanto en la inscripcin como la
enviada por los puntos remotos, se diseo una base de datos relacional, en modo
cliente servidor, como se ha dicho se baso en software libre, con MYSQL server
como la plataforma utilizada. Previstas las necesidades del proyecto se diseo la
adecuada organizacin de los datos, en 5 tablas como se muestra en la figura 18.
Inicialmente se observa tres tablas principales de las que se desprende la
informacin que se registra en las otras dos: la tabla llamada usuario, donde se
almacena los datos personales del usuario en el momento de la inscripcin. De
igual manera, otra tabla para llevar la relacin de tarjetas RFID con las que se
cuentan denominada tarjeta, y tercera llamada lugar donde se los posibles puntos
de control o actividades del evento a monitorear o controlar, para nuestro caso en
especfico seria: la entrada, el parqueadero y el restaurante.
La tabla registro, es el espacio en el que se relaciona la informacin de el usuario
que se inscribi, la tarjeta RFID que le correspondi y los lugares por los cuales
pago. Informacin que se utiliza en el el programa que tiene el administrador, para
hacer bsquedas y verificaciones de identidad del cliente y asistente al evento.

Una ltima tabla que se observa en la figura 19, del modelo de datos, corresponde
a la encargada de recoger la informacin mientras el evento est teniendo lugar y
los mdulos remotos ubicados en el establecimiento, comienzan a enviar la
informacin. Esta tabla denominada Historial es el resumen cronolgico de los
accesos a cada actividad, ya que su contenido corresponde a la secuencia de
consultas hechas a la base de datos por parte del los puntos remotos, esto para
verificar el derecho de acceso que tiene el asistente que presenta su tarjeta RFID.



Figura 18. Modelo de datos diseado para la elaboracin de la base de datos.


Con dicha informacin es con la cual el software diseado puede crear grficos de
afluencia a las actividades. Adicionalmente como tambin se guarda el tiempo y
fecha en el cual el usuario o asistente accede a los puntos remotos o lo que es lo
mismo a las actividades, se puede generar diagramas movimiento de la gente con
respecto al transcurso del tiempo, convirtindose esa informacin en til y de gran
ayuda para los organizadores del evento.


6.4. Interfaz Grafica
Basados en el lenguaje de programacin JAVA, y sobre la plataforma
NetBean/Linux se desarroll una aplicacin, el cual tiene un patrn de diseo
MVC:


Figura 19. Diagrama general aclaratorio de la arquitectura de diseo de software
MVC (Model-View-Controller) empleado.

Adems, se utiliz JPA (Java Persistence API ), como forma de comunicarse con
la base de datos. Esta herramienta permio te cambiar la configuracin de la base
de datos sin modificar el cdigo del proyecto.
Los paquetes (packages), que se implementaron en el desarrollo del proyecto, se
observan en la figura 20:



Figura 20. Vista del los paquetes implementados en el cdigo en Netbean
Tabla 1. Descripcin los paquetes creados en el cdigo del interfaz grafico.
NOMBRE DESCRIPCION
Meta-inf
Es el archivo XML, donde guarda la configuracin para conectarse con la
base de datos. Como es: nombre de la base de datos, puerto, usuario y
contrasea,
Recursos
En esta carpeta se encuentran los archivos tales como imgenes,
archivos de sonido, etc.
Accdatos
Son los mtodos para trabajar en la base de datos (escribir, leer, guardar,
eliminar, consultar y actualizar).
Controladora
Contiene la lgica del programa, comunicacin entre los mtodos que
acceden a la base de datos y la interfaz grfica.
Entidades
Son las tablas que se crean para recibir los datos. Corresponden a las
tablas que se generan y manejan en la base de datos.
Ungestion
Paquete que contiene las clases .class, en el que se disean los GUI,
usados para la comunicacin con el usuario, a continuacin aparecen dos
imgenes, de los interfaces creados para el proyecto:




Figura 21. Pantalla de representacin del interfaz grafico, donde se observa las
opciones que le brinda al usuario y la informacin de los asistentes inscritos al
evento que guarda y lee de la base de datos.



Figura 22. Vistas en tiempo real del movimiento de personas por las diferentes
actividades del evento, mostradas en grficos, y listas informativas.



7.6. RESULTADOS
En las tablas 3,4 y5 se presentan los resultados obtenidos, detallando cada bloque
mostrado en la figura 1.
Tabla 3. Descripcin de Logros Alcanzados en Inscripcin al Evento
BLOQUE
LOGROS
1. Inscripcin al evento
Recepcin de la informacin de los asistentes al evento,
incluyendo la comunicacin serial con el lector RFID para
asignacin de TAG.(ver figura 4)
Bsqueda de informacin mediante el uso de las llaves
nombre, documento de identidad e ID del TAG. (figura 6)
Comunicacin mediante la red Ethernet con el mdulo
ubicado en la entrada, parqueadero y restaurante (figura 7a).

Tabla 4. Descripcin de Logros Alcanzados en Punto Remoto
BLOQUE LOGROS
2.Punto Remoto
Instalacin de Linux en el sistema embebido y configuracin
de interfaces de comunicacin.
Comunicacin serial entre el lector RFID y el sistema
embebido. Esto incluye la adecuacin del hardware.
Comunicacin con la base de datos mediante el puerto
WAN.
Compilacin del kernel de Linux con las interfaces
necesarias para el proyecto.
Formatted Table
Formatted Table


Conexin con el sistema embebido va serial y SSH
4
.
Visualizar con leds la respuesta obtenida de la base de
datos (figura 7c y 7d)

Tabla 5. Descripcin de Logros Alcanzados en Servidor de Base de Datos
BLOQUE
LOGROS
3.Servidor de Base de
Datos
Relacin de tablas de informacin mediante llaves primarias
en la base de datos (figura 9).
Consulta de informacin en la base de datos teniendo en
cuenta la solicitud del sistema embebido ubicado en
parqueadero, restaurante y entrada. Este tem incluye la
respuesta que debe dar la base de datos para permitir o no el
ingreso de la persona a determinada actividad.


A continuacin presentamos el costo aproximado que tendratuvo el proyecto en
cuanto a materiales. En la tabla 6 se especifica el valor de cada componente, en
este caso solo se calculo el precio de un punto remoto. Se puede observar que
debido a que todo el proyecto se trabajo con Software Libre, las licencias no
generan ningn costo al proyecto.

4
Secure Shell. Protocolo que sirve para acceder a maquinas de forma remota a travs de una red.
Formatted Table


Tabla 6. Precio Componentes del Proyecto con un Punto Remoto.
Cantidad Componente Precio Unitario Precio Total
1 Computador/Servidor $2000.000 $2000.000
1 Embebido NGW100 $180.000 $180.000
2 Lector RFID $170.000 $340.000
2 Cajas acrlicas $15.000 $30.000
1 Cable USB-Serial $30.000 $30.000
1 Tarjeta max3232 $20.000 $20.000
$2600.000



8.7. CONCLUSIONES
RFID tiene la ventaja de ser un soporte de fcil manipulacin en la implementacin
de proyectos de monitoreo y control de eventos. Esta herramienta debe estar
soportada por un sistema que permita el manejo de la informacin, como una
Base de datos.

Los sistemas embebidos llevan a la tecnologa RFID a un nivel de interconexin
alto, permitindole procesamiento de datos, acceso a iInternet u otras redes,
manejo de interfaz grfica, sonidos etc.

Este proyecto constituye una herramienta base del uso de la tecnologa RFID. El
soporte que le da la base de datos y la conexin a la red Ethernet, nos permite
llegar a utilizar esta herramienta en numerosas reas, surgiendo ideas de
desarrollo para diversas aplicaciones.

El uso de RFID nos garantiza una mayor seguridad y confiabilidad de la
informacin. Mtodos como el cdigo de barras tienen problemas de seguridad,
los lectores no son fciles de utilizar y necesitan contacto visual directo con el
objeto que se quiere identificar.



9.8. RECOMENDACIONES
En el desarrollo del proyecto, surgieron varias ideas para mejorar el proyecto y
continuarlo desarrollando. A continuacin presentamos algunas recomendaciones
a tener en cuenta:
En este proyecto de tesis de grado, se desarrollo una herramienta base, la cual
puede mejorarse bastante a diferentes niveles. En cuanto a software, la interfaz
grafica podra tener ms opciones para el organizador del evento y entregar los
datos estadsticos de diferentes formas y ms detallados. En cuanto a hardware,
se observo que el sistema embebido utilizado tiene gran cantidad de perifricos y
funciones que no son utilizadas en el proyecto, por esta razn, consideramos que
se debe implementar un sistema embebido propio para esta aplicacin o conseguir
uno en el mercado que se ajuste al proyecto.
La base de datos puede entregar una mayor cantidad de informacin til para el
organizador del evento, para esto, se debera llevar a cabo un estudio a cerca de
cmo seleccionar esta informacin.


10.9. GLOSARIO
Base de Datos. Es una coleccin estructurada de tablas que contienen datos.
Base de Datos Relacional. Permite establecer interconexiones (relaciones) entre
los datos que estn guardados en tablas de la base de datos.
Embebido. Un embebido es un computador destinado a desarrollar tareas
especficas.
MYSQL. Es un sistema de administracin relacional de bases de datos. Es un
software de fuente abierta, licencia GPL.
Licencia GPL. Licencia Publica General de GNU, es una licencia creada por la
Free Software Foundation en 1989 (la primera versin), y est orientada
principalmente a proteger la libre distribucin, modificacin y uso de software
(Wikipedia La Enciclopedia Libre)
RFID (Identificacin por Radiofrecuencia) es una tecnologa para identificar un
objeto mediante ondas de radio.
SQL. Lenguage Query System: Sistema de Lenguaje de Preguntas utilizado
generalmente en sistemas administradores de bases de datos.
SSH. Secure Shell. Protocolo que sirve para acceder a maquinas de forma remota
a travs de una red.








60

11.10. BIBLIOGRAFA
AENIAP. 2006. AENIAP. [En lnea] 2006.
http://www.utp.edu.co/~aneiap/logistica.htm..
Atmel. 2009. Atmel. [En lnea] 2009.
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4102.
Bareo, Carlos Ivn Camargo. GMUN. [En lnea]
ww.gmun.unal.edu.co/~cicamargoba/embebidos/book.pdf.
Digital, Abada. 2006. Abada Digital. [En lnea] 30 de octubre de 2006.
http://www.abadiadigital.com/articulo/diez-ventajas-del-software-libre-y-propietario/.
Eckel, Bruce. !Thinking in Java, Upper Saddle River. s.l. : NJ Prentice Hall 2006.
Ph.D., Craig Hollabaugh. 2002. Embedded Linux: Hardware, Software, and
Interfacing. s.l. : Addison Wesley, 2002.
rfid-webshop. 2009. rfid-webshop. [En lnea] 2009. http://www.rfid-
webshop.com/shop/download/Reader/HF%2013.56%20MHz/ACG/ISO%2014443/
TAGnology_ MifareEasy_Manual.pdf.
Sistem, GNU Operating. GNU Operating Sistem. [En lnea]
http://www.gnu.org/philosophy/free-sw.es.html.
wikipedia. 2008. Wikipedia La Enciclopedia Libre. [En lnea] 2008.
http://es.wikipedia.org/wiki/RFID. 1.



61

ANEXOS

ANEXO A. Programa hecho en C para el Sistema Embebido.
#include <stdio.h>
#include <sys/types.h>
//librerias socket
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
//librerias serial
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>

//librerias gpio
#include <errno.h>
#include <fcntl.h>
#include <poll.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>

/////////

#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1

//variables globales serial
int contador=0;
void signal_handler_IO (int status); /* definition of signal handler */
int wait_flag=TRUE; /* TRUE while no signal received */
volatile int STOP=FALSE;
//char TAG_ID[11]; //variable para manejar # leido hacia el
transmitido


// Main (con el de socket)

int main(int argc, char *argv[])
{
//variables internas socket
int sockfd, n,length;
struct sockaddr_in serv_addr, from;
struct hostent *server;
char buffer[10];
//variables internas serial
int fd,res;
struct termios oldtio,newtio;
62

struct sigaction saio; /* definition of signal action */
char buf[9];
//variables gpio-leds
const char *dev_name = "/dev/gpio0";
unsigned int on_led1 = 1;
unsigned int on_led2 = 4;
unsigned int err_led = 5;
unsigned int off_led = 0;
int pio = 0;

//CICLO WHILE

while(1)
{



//Inicializar serial

/* open the device to be non-blocking (read will return immediatly) */
fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }

/* install the signal handler before making the device asynchronous */
saio.sa_handler = signal_handler_IO;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
/* allow the process to receive SIGIO */
fcntl(fd, F_SETOWN, getpid());
/* Make the file descriptor asynchronous (the manual page says only
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
fcntl(fd, F_SETFL, FASYNC);
tcgetattr(fd,&oldtio); /* save current port settings */
/* set new port settings for canonical input processing */
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);


//Inicializar Socket
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}

sockfd= socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) error("socket");

serv_addr.sin_family = AF_INET;
server = gethostbyname(argv[1]);
if (server==0) error("Unknown host");

bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr,
63

server->h_length);
serv_addr.sin_port = htons(atoi(argv[2]));
length=sizeof(struct sockaddr_in);

printf("\n>>>>>>>>>>leyendo RFID>>>>>>>>>>\n\n");

while (STOP==FALSE) {
if (wait_flag==FALSE) {
printf("\n>>>>>>>>>>entro if RFID>>>>>>>>>>\n");
res = read(fd,buf,8);
buf[res]=0;
wait_flag = TRUE; /* wait for new input */
STOP=TRUE;
}

}
/* restore old port settings */
tcsetattr(fd,TCSANOW,&oldtio);
wait_flag = TRUE; /* wait for new input */
STOP=FALSE;
close(fd);
printf("Dato leido: \t%s\n",buf);
int i;
for(i=0;i<8;i++)
{
buffer[i]=buf[i];

}
//concatenar el ID del punto remoto
//strcat(buffer,argv[3]);
//buffer[8]=c_str(argv[3]);
buffer[8]='1';
//buffer[8]=(argv[3]);



printf("\n>>>>>>>enviando informacion>>>>>\n\n");
printf("\nDato enviado:\t");
// printf("\nargumento 3 %s:", argv[3]);
write(1,buffer,9);
n=sendto(sockfd,buffer,
strlen(buffer),0,&serv_addr,length);
if (n < 0) error("Sendto");
sleep(3);
n = recvfrom(sockfd,buffer,256,0,&from, &length);
if (n < 0) error("recvfrom");
printf("\nDato recivido:\t");
write(1,buffer,n);
printf("\n>>>>>>>>permisos de entrada>>>>>\n\n");
// RESPUESTA A LOS LEDS//////

pio = open(dev_name, O_RDWR|O_NONBLOCK);

if (pio < 0) {
printf("Error: I could not open the GPIO device.</p>\n");
return 1;
} else {
if(buffer[0]=='0')
{
printf("ACCESO DENEGADO\n");
64

write(pio,&on_led1,4);
sleep(2);
}
else if(buffer[0]=='1')
{
printf("ACCESO ACEPTADO\n");
write(pio,&on_led2,4);
sleep(2);
}
else
{
printf("ERROR EN LEDS\n");
write(pio,&err_led,4);
sleep(2);
}
write(pio,&off_led,4);
}

close(pio);
///fin ciclo while general
}
return 0;
}

//FUNCIONES ADICIONALES
////
void error(char *msg)
{
perror(msg);
exit(0);
}

//
void signal_handler_IO (int status)
{
//printf("received SIGIO signal.\n");
wait_flag = FALSE;
}




















65

ANEXO B. Programa Interfaz Grfica en Netbeans (JAVA).
package ungestion;

import controladora.BarChartDemo;
import controladora.CtrHistorial;
import controladora.CtrLugar;
import controladora.CtrRegistro;
import controladora.CtrTarjeta;
import controladora.CtrUsuario;
import controladora.Lecturaserial;
import entidades.Historial;
import entidades.Lugar;
import entidades.Registro;
import entidades.Tarjeta;
import entidades.Usuario;
import java.awt.Dialog.ModalExclusionType;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import org.jfree.ui.RefineryUtilities;


/**
*
*
*/
public class Principal extends javax.swing.JFrame {

/** Creates new form Principal */
public Principal() {
initComponents();
this.setLocationRelativeTo(null);
jLabel5.setVisible(false);
jLabel6.setVisible(false);
jLabel11.setVisible(false);
}

boolean successConnection;

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel3 = new javax.swing.JPanel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jButton5 = new javax.swing.JButton();
66

jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton6 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jTextField4 = new javax.swing.JTextField();
jButton7 = new javax.swing.JButton();
jButton8 = new javax.swing.JButton();
jButton9 = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jButton10 = new javax.swing.JButton();
jPanel4 = new javax.swing.JPanel();
jLabel12 = new javax.swing.JLabel();
jButton12 = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTable2 = new javax.swing.JTable();
jButton13 = new javax.swing.JButton();
jButton14 = new javax.swing.JButton();
jTextField5 = new javax.swing.JTextField();
jLabel13 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jButton11 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("UNgestion");
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});

jPanel3.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
jPanel3MouseEntered(evt);
}
});

jLabel9.setText("Ultima actualizacin: ");

jButton5.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/recursos/Buscar.png"))); // NOI18N
jButton5.setText("Buscar");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
67

}
});

jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
"Cedula", "Nombres", "Apellidos", "Tag Tarjeta"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false
};

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane1.setViewportView(jTable1);

jButton6.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/recursos/Actualizar.png"))); //
NOI18N
jButton6.setText("Actualizar");
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton6ActionPerformed(evt);
}
});

jButton2.setText("Salir");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel3Layout = new
javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(

jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.TRAILING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE,
1020, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
jPanel3Layout.createSequentialGroup()
.addComponent(jLabel9)
.addGap(12, 12, 12)
.addComponent(jLabel10,
javax.swing.GroupLayout.DEFAULT_SIZE, 871, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
jPanel3Layout.createSequentialGroup()
68

.addComponent(jButton6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlaceme
nt.RELATED)
.addComponent(jButton5))
.addComponent(jButton2,
javax.swing.GroupLayout.PREFERRED_SIZE, 80,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
jPanel3Layout.setVerticalGroup(

jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(jLabel10,
javax.swing.GroupLayout.PREFERRED_SIZE, 15,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jButton6)
.addComponent(jButton5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
370, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNREL
ATED)
.addComponent(jButton2)
.addContainerGap())
);

jTabbedPane1.addTab("Usuarios Registrados", jPanel3);

jLabel1.setText("Nombre: ");

jLabel2.setText("Apellido: ");

jLabel3.setText("Cedula: ");

jLabel4.setText("Asignar Tarjeta:");

jTextField1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
jTextField1MouseReleased(evt);
}
});
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});

jTextField3.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextField3KeyReleased(evt);
69

}
});

jButton1.setText("Registrar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

jTextField4.setEditable(false);
jTextField4.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
jTextField4MouseReleased(evt);
}
});

jButton7.setText("Tag Tarjeta");
jButton7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton7ActionPerformed(evt);
}
});

jButton8.setText("Limpiar");
jButton8.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton8ActionPerformed(evt);
}
});

jButton9.setText("Lugares de Acceso");
jButton9.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton9ActionPerformed(evt);
}
});

jLabel5.setText("Lugar 1");

jLabel6.setText("Lugar 2");

jLabel11.setText("Lugar 3");

jButton10.setText("Salir");
jButton10.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton10ActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel1Layout = new
javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
70

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.G
roupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swi
ng.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel3))
.addComponent(jLabel4)
.addComponent(jButton7))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlaceme
nt.RELATED, 36, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.G
roupLayout.Alignment.TRAILING, false)
.addComponent(jTextField4,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField3,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField2,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, 884,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(jLabel5)
.addComponent(jButton9)
.addComponent(jLabel6)
.addComponent(jLabel11)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
.addComponent(jButton8,
javax.swing.GroupLayout.PREFERRED_SIZE, 126,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlaceme
nt.UNRELATED)
.addComponent(jButton1,
javax.swing.GroupLayout.PREFERRED_SIZE, 128,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlaceme
nt.UNRELATED)
.addComponent(jButton10,
javax.swing.GroupLayout.PREFERRED_SIZE, 83,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jLabel1)
71

.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jTextField4,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton7))
.addGap(18, 18, 18)
.addComponent(jButton9)
.addGap(18, 18, 18)
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addComponent(jLabel11)
.addGap(178, 178, 178)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jButton10)
.addComponent(jButton8)
.addComponent(jButton1))
.addContainerGap())
);

jTabbedPane1.addTab("Asignar Tarjeta", jPanel1);

jLabel12.setText("Historial de usos");

jButton12.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/recursos/Actualizar.png"))); //
NOI18N
jButton12.setText("Actualizar");
jButton12.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton12ActionPerformed(evt);
}
});

jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

72

},
new String [] {
"Nombres", "Apellidos", "Cedula", "Sitio de Acceso", "Fecha"
}
));
jScrollPane2.setViewportView(jTable2);

jButton13.setText("Salir");
jButton13.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton13ActionPerformed(evt);
}
});

jButton14.setText("Graficar");
jButton14.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton14ActionPerformed(evt);
}
});

jTextField5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField5ActionPerformed(evt);
}
});
jTextField5.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextField5KeyReleased(evt);
}
});

jLabel13.setText("Buscar por cedula: ");

javax.swing.GroupLayout jPanel4Layout = new
javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(

jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.TRAILING)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE,
1020, Short.MAX_VALUE)
.addComponent(jLabel12,
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(jButton14,
javax.swing.GroupLayout.PREFERRED_SIZE, 91,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlaceme
nt.RELATED)
.addComponent(jButton13,
javax.swing.GroupLayout.PREFERRED_SIZE, 96,
javax.swing.GroupLayout.PREFERRED_SIZE))
73

.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
jPanel4Layout.createSequentialGroup()
.addComponent(jButton12)
.addGap(18, 18, 18)
.addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlaceme
nt.RELATED)
.addComponent(jTextField5,
javax.swing.GroupLayout.DEFAULT_SIZE, 759, Short.MAX_VALUE)))
.addContainerGap())
);
jPanel4Layout.setVerticalGroup(

jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel12)
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jButton12)
.addComponent(jTextField5,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel13))
.addGap(18, 18, 18)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 344,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.BASELINE)
.addComponent(jButton13)
.addComponent(jButton14))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);

jTabbedPane1.addTab("Historial", jPanel4);

jButton3.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/recursos/Tarjeta Unal.jpg"))); //
NOI18N
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});

jButton4.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/recursos/usuario.png"))); //
NOI18N
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});

jLabel7.setText("Tarjetas");

74

jLabel8.setText("Usuarios");

jButton11.setText("Salir");
jButton11.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton11ActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel2Layout = new
javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayo
ut.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(78, 78, 78)
.addComponent(jButton4,
javax.swing.GroupLayout.PREFERRED_SIZE, 150,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel8))
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.G
roupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(12, 12, 12)
.addComponent(jButton3,
javax.swing.GroupLayout.PREFERRED_SIZE, 225,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel7)))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel2Layout.createSequentialGroup()
.addContainerGap(935, Short.MAX_VALUE)
.addComponent(jButton11,
javax.swing.GroupLayout.PREFERRED_SIZE, 97,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(38, 38, 38)
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNREL
ATED)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE,
163, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addComponent(jLabel8)
.addGap(12, 12, 12)
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE,
231, javax.swing.GroupLayout.PREFERRED_SIZE)
75

.addGap(25, 25, 25)
.addComponent(jButton11)
.addContainerGap())
);

jTabbedPane1.addTab("Opciones", jPanel2);

javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
1060, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
546, Short.MAX_VALUE)
.addContainerGap())
);

pack();
}// </editor-fold>

private void updateTableContentbySearch(int cedula)
{
//TODO
CtrHistorial ctrhistorial = new CtrHistorial();
//TODO
List<Historial> currentTableContent = null;
Historial currentRegistro;

try
{
currentTableContent = ctrhistorial.getListbyCedula(cedula);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "No se pudo leer la base de
datos...");
successConnection = false; //Connection failure
this.setVisible(false);
this.dispose();
return;
}

successConnection = true; //Success connection
int tableLengh = currentTableContent.size(),i;
DefaultTableModel currentTableModel =
(DefaultTableModel)this.jTable2.getModel();
Object [] currentRow;

76



currentTableModel.setRowCount(0);

for (i=0;i<tableLengh;i++)
{
currentRegistro = currentTableContent.get(i);
currentRow = new Object[5];

currentRow[0] = currentRegistro.getNombres();
currentRow[1] = currentRegistro.getApellidos();
currentRow[2] = currentRegistro.getCedula();
currentRow[3] = currentRegistro.getUso();
currentRow[4] = currentRegistro.getFecha();

currentTableModel.addRow(currentRow);
}
}

private void updateTableContentbySearch(String lugar)
{
//TODO
CtrHistorial ctrhistorial = new CtrHistorial();
//TODO
List<Historial> currentTableContent = null;
Historial currentRegistro;

try
{
currentTableContent = ctrhistorial.getListbyUso(lugar);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "No se pudo leer la base de
datos...");
successConnection = false; //Connection failure
this.setVisible(false);
this.dispose();
return;
}

successConnection = true; //Success connection
int tableLengh = currentTableContent.size(),i;
DefaultTableModel currentTableModel =
(DefaultTableModel)this.jTable2.getModel();
Object [] currentRow;



currentTableModel.setRowCount(0);

for (i=0;i<tableLengh;i++)
{
currentRegistro = currentTableContent.get(i);
currentRow = new Object[5];

currentRow[0] = currentRegistro.getNombres();
currentRow[1] = currentRegistro.getApellidos();
currentRow[2] = currentRegistro.getCedula();
currentRow[3] = currentRegistro.getUso();
77

currentRow[4] = currentRegistro.getFecha();

currentTableModel.addRow(currentRow);
}
}



private void updateTableContent2()
{
CtrHistorial ctrhistorial = new CtrHistorial();
//TODO
List<Historial> currentTableContent = null;
Historial currentRegistro;

try
{
currentTableContent = ctrhistorial.getList();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "No se pudo leer la base de
datos...");
successConnection = false; //Connection failure
this.setVisible(false);
this.dispose();
return;
}

successConnection = true; //Success connection
int tableLengh = currentTableContent.size(),i;
DefaultTableModel currentTableModel =
(DefaultTableModel)this.jTable2.getModel();
Object [] currentRow;



currentTableModel.setRowCount(0);

for (i=0;i<tableLengh;i++)
{
currentRegistro = currentTableContent.get(i);
currentRow = new Object[5];

currentRow[0] = currentRegistro.getNombres();
currentRow[1] = currentRegistro.getApellidos();
currentRow[2] = currentRegistro.getCedula();
currentRow[3] = currentRegistro.getUso();
currentRow[4] = currentRegistro.getFecha();

currentTableModel.addRow(currentRow);
}
}



private void updateTableContent()
{
CtrUsuario ctrusuario = new CtrUsuario();
CtrRegistro ctrregistro = new CtrRegistro();
78

//TODO
List<Registro> currentTableContent = null;
Registro currentRegistro;
Usuario usuario;

try
{
currentTableContent = ctrregistro.getList();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "No se pudo leer la base de
datos...");
successConnection = false; //Connection failure
this.setVisible(false);
this.dispose();
return;
}

successConnection = true; //Success connection
int tableLengh = currentTableContent.size(),i;
DefaultTableModel currentTableModel =
(DefaultTableModel)this.jTable1.getModel();
Object [] currentRow;



currentTableModel.setRowCount(0);

for (i=0;i<tableLengh;i++)
{
currentRegistro = currentTableContent.get(i);
currentRow = new Object[4];
usuario = ctrusuario.getByCedula(currentRegistro.getCedula());
currentRow[0] = currentRegistro.getCedula();
currentRow[1] = usuario.getNombre();
currentRow[2] = usuario.getApellido();
currentRow[3] = currentRegistro.getTag();

currentTableModel.addRow(currentRow);
}
}



private void jTextField3KeyReleased(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
String textico=jTextField3.getText();
if(isNumeric(textico)==false)
{
JOptionPane.showMessageDialog(rootPane, "El dato en este campo debe
ser numerico");
jTextField3.setText("");
}
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
Tarjetavista tarjeta = new Tarjetavista();
79

tarjeta.setVisible(true);
tarjeta.setAlwaysOnTop(true);
}

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
Usuariovista usuariov = new Usuariovista();
usuariov.setVisible(true);
usuariov.setAlwaysOnTop(true);
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

if(jTextField1.getText().equals("") || jTextField2.getText().equals("")
|| jTextField3.getText().equals("")){
JOptionPane.showMessageDialog(rootPane, "No pueden haber campos
vacios");
}
else
{
CtrUsuario ctrusuario = new CtrUsuario();
CtrUsuario ctrusuario2 = new CtrUsuario();
CtrTarjeta ctrtarjeta = new CtrTarjeta();
CtrTarjeta ctrtarjeta2 = new CtrTarjeta();
CtrRegistro ctrregistro = new CtrRegistro();
CtrLugar ctracceso = new CtrLugar();

Usuario usuario = new Usuario();
Usuario usuario2 = new Usuario();
Tarjeta tarjeta = new Tarjeta();
Tarjeta tarjeta2 = new Tarjeta();
Registro registro = new Registro();
Lugar acceso = new Lugar();

//La tabla sitios esta predefinida con 3 sitios

//Llenando datos de la tabla acceso

acceso.setCedula(Integer.parseInt(jTextField3.getText()));
acceso.setRestaurante(0);
acceso.setEntrada(0);
acceso.setParqueadero(0);

if(jLabel5.isVisible())
{
acceso.setRestaurante(1);
}
if(jLabel6.isVisible())
{
acceso.setEntrada(1);
}
if(jLabel11.isVisible())
{
acceso.setParqueadero(1);
}


//Llenando datos de la tabla usuario
80

usuario.setNombre(jTextField1.getText());
usuario.setApellido(jTextField2.getText());
usuario.setCedula(Integer.parseInt(jTextField3.getText()));

//Llenando datos de la tabla Tarjeta
acceso.setTag(jTextField4.getText());
tarjeta.setTag(jTextField4.getText());
//Llenando datos de la tabla registro
registro.setCedula(Integer.parseInt(jTextField3.getText()));
registro.setTag(jTextField4.getText());
registro.setUltimouso("Ninguno");

//Intentando guardar los datos en las tablas
try
{
ctrusuario.save(usuario);
ctrtarjeta.save(tarjeta);
ctrregistro.save(registro);
ctracceso.save(acceso);

JOptionPane.showMessageDialog(rootPane, "Registro Exitoso");
}
catch(Exception e)
{
JOptionPane.showMessageDialog(rootPane, "No se pudo guardar el
registro. Contacte con soporte tecnico ");
}
}
}

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
updateTableContent();
Date date = new Date();
int dia = date.getDay();
int mes = date.getMonth();
int ao = 2010;
int hora = date.getHours();
int minutos=date.getMinutes();
int segundos=date.getSeconds();
jLabel10.setText("Hora: " + hora + ":" + minutos + ":" + segundos + "
Fecha: " + dia + "/" + mes + "/" + ao);
}

private void jTextField4MouseReleased(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:

}

private void formWindowOpened(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:

}

private void jTextField1MouseReleased(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:

}

private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {
81

// TODO add your handling code here:
Lecturaserial lectura = new Lecturaserial();
try {
String tagtarjeta = lectura.lectura();
jTextField4.setText(tagtarjeta);
} catch (Exception ex) {
JOptionPane.showMessageDialog(rootPane, "No se pudo leer la tarjeta,
verifique e intente de nuevo");
}
}

private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
}

private void jPanel3MouseEntered(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
}

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
Bucarreg buscar = new Bucarreg();
buscar.setVisible(true);
buscar.setAlwaysOnTop(true);
}

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.dispose();
System.exit(0);
}

private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Lugaresvista lugares = new Lugaresvista(this);
lugares.setVisible(true);
jLabel5.setVisible(false);
jLabel6.setVisible(false);
jLabel11.setVisible(false);
}

private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
System.exit(0);
}

private void jButton11ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
82

System.exit(0);
}

private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.dispose();
System.exit(0);
}

private void jButton12ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
updateTableContent2();

}

private void jButton14ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
CtrHistorial ctrHistorial = new CtrHistorial();
CtrLugar ctrLugar = new CtrLugar();

System.out.println("Accesos : " + ctrLugar.getAccesosResta());
System.out.println("Accesos : " + ctrLugar.getAccesosEntra());
System.out.println("Accesos : " + ctrLugar.getAccesosParque());

System.out.println("Accesos : " + ctrHistorial.getHistoriaResta());
System.out.println("Accesos : " + ctrHistorial.getHistoriaEntra());
System.out.println("Accesos : " + ctrHistorial.getAccesosParque());

BarChartDemo demo = new BarChartDemo("Grafica de
Historial",ctrHistorial.getHistoriaResta(),ctrHistorial.getHistoriaEntra(),ctrHis
torial.getAccesosParque(),ctrLugar.getAccesosResta(),ctrLugar.getAccesosEntra(),c
trLugar.getAccesosParque());
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);

}
CtrHistorial ctrhisto = new CtrHistorial();

private void jTextField5KeyReleased(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:

if(!isNumeric(jTextField5.getText()))
{
JOptionPane.showMessageDialog(rootPane, "El dato en este campo debe
ser numerico");
jTextField5.setText("");
}
else
{
int ced = Integer.parseInt(jTextField5.getText());
updateTableContentbySearch(ced);
}
}

private void jTextField5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private static boolean isNumeric(String dato)
83

{
try
{
Integer.parseInt(dato);
return true;
}
catch(NumberFormatException nfe)
{
return false;
}
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton10;
private javax.swing.JButton jButton11;
private javax.swing.JButton jButton12;
private javax.swing.JButton jButton13;
private javax.swing.JButton jButton14;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JButton jButton6;
private javax.swing.JButton jButton7;
private javax.swing.JButton jButton8;
private javax.swing.JButton jButton9;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
public javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
public javax.swing.JLabel jLabel5;
public javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
public javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
public javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
public javax.swing.JTabbedPane jTabbedPane1;
public javax.swing.JTable jTable1;
private javax.swing.JTable jTable2;
84

private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
// End of variables declaration

}
85

You might also like