control de acceso - eva.fing.edu.uy file4.3-bloques de hardware ..... 11 4.3.1-entradas

47
1 UNIVERSIDAD DE LA REPUBLICA Facultad de Ingeniería Instituto de Ingeniería Eléctrica Control de Acceso Documentación final Sistemas embebidos para tiempo real 2013 Florencia Blasina, Gonzalo Finozzi, Nicolás Marquez Tutor: Conrado Rossi Montevideo,Uruguay 8 de julio 2013

Upload: vuanh

Post on 29-Oct-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

1

UNIVERSIDAD DE LA REPUBLICA

Facultad de Ingeniería Instituto de Ingeniería Eléctrica

Control de Acceso

Documentación final

Sistemas embebidos para tiempo real 2013

Florencia Blasina, Gonzalo Finozzi, Nicolás Marquez

Tutor: Conrado Rossi

Montevideo,Uruguay 8 de julio 2013

2

3

Tabla de contenido 1-Introducción .............................................................................................................................. 6

1.1-Descripción del problema .................................................................................................... 6

1.2-Antecedentes ...................................................................................................................... 6

2-Objetivos del proyecto ............................................................................................................ 7

3-Alcance ...................................................................................................................................... 7

4-Diseño de hardware ................................................................................................................. 8

4.1-Plataforma de hardware ...................................................................................................... 8

4.2-Consideraciones previas ..................................................................................................... 9

4.2.1-Protocolo Wiegand ....................................................................................................... 9

4.2.2-Modo físico de transmisión de la información .............................................................. 9

4.2.3-Interpretación numérica de la información ................................................................. 10

4.2.4-Ejemplo de interpretación de la información .............................................................. 11

4.3-Bloques de hardware ........................................................................................................ 11

4.3.1-Entradas ..................................................................................................................... 12

4.3.2-Salidas ........................................................................................................................ 14

5-Diseño de software ................................................................................................................ 14

5.1-Introducción ....................................................................................................................... 14

5.2-Diagrama funcional ........................................................................................................... 15

5.3-Máquinas de estado concurrentes .................................................................................... 16

5.4-Máquina lectura y validación ............................................................................................. 17

5.5-Máquina cerrojo ................................................................................................................ 18

5.6-Máquina estado de puerta ................................................................................................ 18

5.8-Módulos e interfaces ......................................................................................................... 20

5.9-Módulo hardware .............................................................................................................. 21

5.10-Módulo lectura ................................................................................................................. 22

5.11-Módulo procesamiento .................................................................................................... 24

5.12-Módulo base de datos ..................................................................................................... 25

5.13-Módulo logs ..................................................................................................................... 26

5.14-Módulo menú .................................................................................................................. 29

4

5.14.1-Pantalla principal ...................................................................................................... 30

5.14.2-Pantalla “Agregar nuevo usuario” ............................................................................ 31

5.14.3-Pantalla “Editar un usuario”...................................................................................... 32

5.14.5-Pantalla “Ver franjas horarias” ................................................................................. 33

5.14.6-Pantalla “Obtener registros” ..................................................................................... 34

5.14.7-Pantalla “Establecer fecha y hora” ........................................................................... 35

5.14.8-Pantalla “Ver usuarios registrados” .......................................................................... 36

6-Conclusiones .......................................................................................................................... 37

7-Anexos .................................................................................................................................... 38

7.1-Conceptos del curso aplicados al proyecto ...................................................................... 38

7.2-Planificación del proyecto ................................................................................................. 38

7.3-Especificación del proyecto............................................................................................... 39

7.4-Datasheet del lector de proximidad .................................................................................. 46

7.5-Archivos fuente ................................................................................................................. 46

Tabla de figuras Figura 1 : Módulo TinyNode .......................................................................................................... 8

Figura 2 : Extension board ............................................................................................................ 8

Figura 3 : Transmisión de bits ..................................................................................................... 10

Figura 4 : Formato de Wiegand 26.............................................................................................. 11

Figura 5 : Bloques de hardware .................................................................................................. 12

Figura 6 : Diseño de entradas digitales ....................................................................................... 12

Figura 7 : Entrada DATA 1 .......................................................................................................... 13

Figura 8 : Entrada DATA 0 .......................................................................................................... 13

Figura 9 : Diagrama funcional ..................................................................................................... 15

Figura 10 : Máquinas de estado concurrentes ............................................................................ 16

Figura 11 : Máquina estados lectura y validación ....................................................................... 17

Figura 12 : Máquina estados cerrojo ........................................................................................... 18

Figura 13 : Máquina estados puerta ........................................................................................... 19

Figura 14 : Modularización .......................................................................................................... 20

Figura 15 : Módulo lectura ........................................................................................................... 23

Figura 16 : Secuencia almacenar logs ........................................................................................ 27

Figura 17 : Máquina estados del menú ....................................................................................... 29

5

Resumen

El Proyecto consiste en una maqueta de un sistema de control del ingreso de personas a áreas

restringidas que identifica los usuarios autorizados mediante un lector de tarjetas de

proximidad.

El egreso se habilita al pulsar un botón ubicado en la zona restringida. Un detector del estado

de la puerta permite disparar una alarma si la puerta permanece abierta demasiado tiempo.

El sistema guarda registros de eventos con su fecha, hora y usuario asociado en los casos en

que es identificable.

La configuración de usuarios autorizados, horarios habilitados y otros parámetros se realiza a

través de una terminal serie mediante menús sencillos desplegados por el sistema. Así mismo

pueden ser descargados los registros de actividad.

La maqueta tiene una capacidad limitada en la cantidad de personas autorizadas y otras

funcionalidades auxiliares a fin de adecuar el proyecto a la asignatura

6

1-Introducción

1.1-Descripción del problema

En muchas actividades cotidianas es necesario tener un control sobre el ingreso/egreso de

personas en determinadas áreas, las cuales pueden ser oficinas, recintos laborales,

instituciones de estudio, bancos o salas de procesamiento de datos. También existen

problemas concretos con el uso compartido de electrodomésticos, medicación o instrumentos

de laboratorio de alto valor. Para resolver este problema se emplean sistemas que

implementan dicho control permitiendo o no el acceso a las áreas descriptas.

Entre las aplicaciones que un control de acceso puede tener, ejemplificamos algunas

situaciones:

• Las instituciones necesitan tener un control de horarios de entrada/salida del personal

para liquidación de sueldos y/o control de inasistencias.

• Por seguridad se puede querer restringir a un selecto grupo de usuarios el acceso a

determinados bienes o áreas específicas de una empresa, hogar o local de trabajo.

Control de Acceso resuelve esta problemática debido a que realiza el control descripto

anteriormente logrando el nivel de seguridad necesario para este tipo de aplicaciones.

Este proyecto es una maqueta con funcionalidad limitada, pero que con algunos cambios

podría adaptarse a un control de acceso más real.

1.2-Antecedentes

En el curso de Sistemas Embebidos para Tiempo Real no existe una versión previa a esta

solución, sí existen en el mercado muchas marcas que comercializan este producto con

diversas implementaciones.

Existe un protocolo de comunicación estándar entre lectores (proximidad, pin, biométrico, etc.)

y el micro controlador (UC) llamado Wiegand, el cual se tomará como base para la

implementación.1

1 Los textos de referencia que se utilizaron para comprender el funcionamiento del lector de

proximidad fueron:

http://www.scattech.com/en/san-pham/372_pr-200-proximity-card-reader-.html

http://www.jantek.com.tw/jan-pr-200-e.htm

7

2-Objetivos del proyecto

Desarrollar un sistema que implemente un control de acceso de una puerta utilizando un micro

controlador y un lector de tarjetas de proximidad.

Implementar la comunicación con el usuario para configuración como para mostrar el registro

de logs.

Simular su funcionamiento en una maqueta, la misma tendrá cuatro entradas: dos para el lector

de proximidad y dos digitales para simular el estado de la puerta y el pulsador de egreso.

Además tendrá dos salidas las cuales simularan el estado del cerrojo y la alarma de puerta

abierta respectivamente.

3-Alcance

Para la realización del proyecto será necesario diseñar e implementar el hardware extra

necesario para la implementación de las entradas digitales y la comunicación con el lector de

proximidad.

La comunicación con el usuario se realizara a través de la hyperterminal del PC emulando

comandos VT100, desplegando un menú que también se implementará en software.

El menú tendrá capacidades para ingresar, editar y eliminar usuarios, desplegar usuarios y

franjas registradas y bajar el listado de registros guardados en memoria registrados a partir de

eventos del sistema, también tendrá capacidad de establecer fecha y hora desde la terminal.

El sistema permitirá el ingreso de hasta diez usuarios, con cuatro franjas horarias pres

configuradas.

Control de Acceso deberá permitir controlar el acceso a un recinto mediante la lectura del

código de una tarjeta con el lector de proximidad y permitir egresar al pulsar un botón. Deberá

incluir una alarma de puerta abierta en condiciones anormales de operación.

Una vez configurado el sistema deberá funcionar standalone.

8

4-Diseño de hardware

4.1-Plataforma de hardware

El módulo hardware que se utilizará para la implementación del sistema es el TinyNode 184 el

cual tiene como micro controlador el MSP430F2417 de Texas Instruments (TI).

Figura 1 : Módulo TinyNode

Además del módulo, se utilizará la placa de expansión estándar de TI que incluye los puertos

para grabación del firmware y la comunicación serial entre otros. Esta placa se conecta con la

anterior por un conector de 30 pines para este propósito.

Figura 2 : Extension board

9

4.2-Consideraciones previas

4.2.1-Protocolo Wiegand

El inicio del protocolo Wiegand nace a partir del conocido efecto Wiegand, que “es un concepto

físico en el que intervienen las distintas formas de reaccionar magnéticamente distintas áreas

de un hilo conductor ante la influencia de un campo magnético.”2

En base a éste efecto se crean tarjetas de identificación con sus lectores para sistemas de

control de accesos o de presencia. Como es de suponer los lectores se deben conectar de

alguna forma a los sistemas de control de accesos para poder comunicarlos; por ello es que se

crea el protocolo de comunicación Wiegand.

El término del interface Wiegand es una marca de la sociedad “Sensor Engineering Company”

y fue diseñado para conseguir una tecnología que permitiera transmitir datos de un identificador

(tarjeta) entre dos dispositivos alejados entre sí, como, por ejemplo, un lector y la central de

control de accesos. El protocolo Wiegand es ampliamente utilizado por la mayor parte de los

fabricantes porque permite la transmisión de información a través de un par de cobre que se

acompaña de la alimentación para el dispositivo de lectura sin afectar por ello a los datos.

4.2.2-Modo físico de transmisión de la información

Es una transmisión de modo asincrónico, la cual se realiza por intermedio de tres hilos. Los

niveles con los que trabajan son nivel bajo que está a nivel de tierra (GND), y nivel alto a +5(V).

El envío de datos por los tres hilos es el siguiente:

- DATA 0: Línea que envía los ceros lógicos.

- DATA 1: Línea que envía los unos lógicos.

- GND: Línea a masa de referencia de DATA 0 y DATA 1.

Existen tres estados:

- Estado de reposo: no se trasmite, la línea GND está en bajo y las líneas DATA 0 y DATA 1

están en alto.

- Para trasmitir un bit 1 se debe enviar un pulso a nivel bajo con una duración de 250 us por la

línea de DATA 1, mientras la línea DATA 0 se mantiene en alto.

2 http://en.wikipedia.org/wiki/Wiegand_effect

10

- Para transmitir un bit 0 se produce el proceso contrario ya que ahora se envía un pulso a bajo

por la línea de DATA 0 con duración de 250 us, mientras la línea de DATA 1 se mantiene en

alto.

El tiempo de duración entre el comienzo de un pulso y el siguiente es de 2ms.

En la figura 3 se puede ver la representación de la transmisión de la secuencia de bits 1010.

Figura 3 : Transmisión de bits

4.2.3-Interpretación numérica de la información

Mediante el modo de transmisión físico que se indicó con anterioridad se pueden trasmitir

tantos bits como se requieran. Los estándares son de: 26, 32, 44 ó 128 bits, siendo el Wiegand

de 26 bits el más utilizado y el que se lo interpreta de una sola forma, ya que los otros modos

son interpretados de muchas formas por lo distintos fabricantes que manejan éste protocolo. La

mayoría de los fabricantes (OEM3) tiene una estructura de bits propia en protocolo Wiegand.

Con la versión genérica de 26 bits existe un pequeño riesgo de duplicación a diferencia de un

protocolo de 36 bits; por lo tanto, el nivel de seguridad es un poco más bajo que los formatos

únicos.

En la figura 4 se muestra el formato del Wiegand de 26 bits. El primer bit es la paridad par de

los próximos 12 bits. A los siguientes 8 bits se los llama “Facility Code” y representan un

número que va desde 0 hasta 255; a los siguientes 16 bits se los llama Identificación, que

pueden valer entre 0 y 65535. El último bit es la paridad impar de los últimos 12 bits excluyendo

al de paridad.

3 Original Equipment Manufacturer

11

Figura 4 : Formato de Wiegand 26

4.2.4-Ejemplo de interpretación de la información

Supongamos una tarjeta que genera un código como el siguiente:

11010111001011001101001101.

Si lo separamos en los campos lógicos quedará así: 1 10101110 0101100110100110 1

Donde:

FC = 10101110 = 0xAE (Hexadecimal) = 174 (decimal)

ID = 0101100110100110 = 0x59A6 = 22950

Para entender el cálculo de las paridades reescribimos la cadena coloreando el lugar de

cálculo 11010111001011001101001101. La paridad par se calculó sobre los 101011100101 y

dado que contiene 7 “1“ (porque hay una cantidad impar de “1”, entonces se agrega otro para

que quede par), la paridad debe valer “1”. La paridad impar del final se calcula sobre

100110100110 y como se trata de 6 “1”, la paridad también vale 1 (porque hay una cantidad

par de “1”, entonces se agrega otro para que quede impar).

4.3-Bloques de hardware

Para llevar a cabo el proyecto fue necesario diseñar e implementar una etapa de hardware que

permita la interacción entre el usuario y el módulo uC.

El diagrama de la figura 5 indica los bloques intervinientes así como los pines dedicados a la

interconexión entre los periféricos y el módulo principal, los mismos lo dividiremos en entradas

y salidas.

12

Figura 5 : Bloques de hardware

4.3.1-Entradas

1- Estado de puerta y pulsador de egreso

Para las entradas digitales se incluyó una resistencia de pull-up de 100k

Figura 6 : Diseño de entradas digitales

2- Lector de proximidad

Como se explicó anteriormente, la comunicación al exterior del lector se hace a través de

dos líneas de datos D1 y D0 las mismas funcionan con 0 y 6VDC (nivel bajo y alto

respectivamente), pero el módulo uC funciona con niveles de tensión nominales de

GND TINY Y FUENTE EXT

R100k

ESTADO PUERTA

VCC

Pin 6.0

PULSADOR

GND TINY Y FUENTE EXT

R1100k

VCC

Pin 6.1

13

3.3VDC. Por ésto último fue necesario diseñar una etapa de adaptación de niveles de

tensión y una etapa de filtrado para poder conectar ambos bloques.

Figura 7 : Entrada DATA 1

Figura 8 : Entrada DATA 0

Criterio de diseño:

Para el divisor resistivo se consideró que la corriente que se tome del lector sea como

máximo 100uA y que el voltaje de salida sea la mitad de el de entrada (aprox. 6VDC).

Para la etapa de filtrado se considero que cinco constantes de tiempo del circuito RC sea

mucho menor que el tiempo de bit (250 us), por lo tanto se tiene:

1 = −

100 =6 − 3

100 → 1 = 30Ω

1 = 33Ω

=1

1 + 2=

2↔ 1 = 2

5# = 5(1||2) ≪ 250( = )*+, → ≪ 3.03./011231 = 224/

GND TINY Y FUENTE EXT

R2

Pin 1.2 TinynodeR1

C

DATA 1

GND TINY Y FUENTE EXT

R2

Pin 2.6 Extension boardR1

C

DATA 0

14

4.3.2-Salidas

Cerrojo y alarma

Ambas salidas se implementarán con LEDs que están en la placa de expansión, el verde

representa el cerrojo (encendido representa energizado, apagado desenergizado) y el rojo

la alarma (apagado o encendido según si la misma lo está), los pines de salida del uC son

2.3 y 1.6 respectivamente.

5-Diseño de software

5.1-Introducción

Para el diseño del software se partió de un diagrama funcional del sistema, luego se plantearon

los posibles módulos necesarios y sus respectivas funciones.

A medida que se avanzó en el diseño se fue modificando los módulos y funciones para lograr la

solución al problema.

Se decidió realizar abstracción de hardware de los módulos por lo que se diseñó un módulo de

hardware el cual incluye funciones que operan sobre él directamente, permitiendo un eventual

cambio de la plataforma con poca recodificación.

La arquitectura seleccionada fue Round Robin con interrupciones.

15

5.2-Diagrama funcional

Para el diseño del software, se parte de un diagrama funcional del flujo del sistema en donde

se indican los bloques intervinientes y cómo interactúan entre sí.

Figura 9 : Diagrama funcional

Para simplificar el problema se diseñó el sistema de forma tal que cuando se esté operando el

menú no se acepte una lectura, solamente se permitirá la apertura del cerrojo desde el interior

del recinto o la activación de la alarma por puerta abierta. Esto se hace para evitar problemas

de datos compartidos.

Para resolver éste problema se implementaron máquinas de estado concurrentes que

funcionan en paralelo y atienden todos los requerimientos del sistema.

16

5.3-Máquinas de estado concurrentes

Como se explicó anteriormente la división en máquinas de estado facilitó la implementación del

conjunto del problema, como se aprecia en la figura se implementaron tres máquinas de

estado:

-Máquina de menú, lectura y validación

-Máquina de cerrojo

-Máquina de puerta y alarma

Luego de un init() las tres máquinas operan de forma independiente, para facilitar aún más la

codificación se dividió la máquina de menú, lectura y validación en dos sub máquinas, de forma

que una se encarga únicamente de las funcionalidad del menú y la otra de la lectura y

validación, ambas comparten el estado de espera.

Figura 10 : Máquinas de estado concurrentes

17

5.4-Máquina lectura y validación

La figura 11 describe el funcionamiento de la máquina que se encarga de obtener una lectura

válida.

Luego de iniciar el sistema se queda en el estado ESPERA hasta que la bandera hay_bit sea

igual a uno, para que esto último suceda el uC recibe una interrupción por las líneas de

Wiegand y llama a la función lectura_wiegand () que se encargara de ir “guardando” uno a uno

los siguientes bits, tarea que se realiza en el estado LECTURA.

Para salir de LECTURA hay dos opciones, o se completa la trama de 26 bits y se pasa al

estado PARIDAD o si por alguna razón se pierden bits y se demora mas de 250ms se da un

time_out por el cual se regresa al estado ESPERA.

En el estado PARIDAD se chequea la paridad de la trama de bits, si es correcta se pasa al

estado VALIDACION y como salida se llama a la función decodificar_tarjeta() que devuelve un

unsigned int con el número de tarjeta leído o si la paridad es incorrecta se vuelve el estado

ESPERA.

Por último desde el estado VALIDACION siempre se vuelve a ESPERA con una salida que es

invocar a la función validación_final_usuario() que devuelve 1 si el usuario es admitido o cero

en caso contrario, esta bandera es utilizada por otros módulos para el log.

Figura 11 : Máquina estados lectura y validación

18

5.5-Máquina cerrojo

La figura 12 describe el funcionamiento de la máquina que controla el estado del cerrojo.

Esta máquina implementa los estados posibles del cerrojo, como se aprecia en la figura luego

de la inicialización pasa al estado ENERGIZADO, estado que permanece hasta que se setea la

bandera to_cerrojo_activo, la misma se activa por un ingreso valido o por pulsar el botón de

egreso, pasando al estado DESENERGIZADO el cual permanece un tiempo preseteado.

En la transición se resetea la salida del cerrojo o sea se des energiza el cerrojo y se logea el

evento, luego que expira el tiempo vuelve a el estado ENERGIZADO dando como salida

energizar el cerrojo y logear el evento

Figura 12 : Máquina estados cerrojo

5.6-Máquina estado de puerta

La figura 13 describe el funcionamiento de la máquina que controla la alarma según el estado

de la puerta.

La máquina del estado de puerta y alarma es la encargada de controlar y activar una alarma si

se detecta que la puerta permanece abierta un determinado tiempo, sin importar el origen de la

apertura (pulsador egreso, usuario valido, puerta forzada).

19

Como se aprecia en la figura, luego de la inicialización queda en el estado REPOSO, si se

setea la bandera to_puerta_activo, avanza al estado CUENTA_T, estado en el cual se

decrementa un contador, si la puerta se cierra antes de expirar el tiempo vuelve al estado

REPOSO de lo contrario avanza al estado ALARMA encendiendo el LED de alarma y

logueando el evento.

Permanece en este estado ALARMA hasta que se cierre la puerta y vuelve al estado REPOSO

apagando el LED y logueando nuevamente el evento.

Figura 13 : Máquina estados puerta y alarma

20

5.8-Módulos e interfaces

En la figura 14 se aprecian todos los módulos implementados y sus interconexiones.

Figura 14 : Modularización

21

5.9-Módulo hardware

El módulo Hardware es el encargado de suministrar las funcionalidades del hardware a todo

módulo que las necesite.

Tanto para desplegar el menú como para permitir la interacción entre el administrador y las

posibilidades que brinda el menú, Control de Acceso necesitaba el uso de la UART para

comunicar a éste con un PC y que se observe el menú vía hyperterminal.

Para ésto, el módulo hardware posee las siguientes funciones:

• void init_UART (): inicializa la UART para que interrumpa tanto para transmitir como para

recibir datos

• void transmitir_UART (): quita un carácter de la cola de transmisión y lo coloca en el

registro indicado para transmitir.

• char recibir_UART (): lee el registro de recepción como carácter y lo devuelve.

• __interrupt void ISR_RX (): Subrutina de atención a interrupción para la recepción vía

UART. Llama a recibir_UART para poder leer el carácter recibido y controla si se recibió

un string completo mediante un enter. También se encarga de reiniciar el tiempo de time

out del menú.

• __interrupt void ISR_TX (): Subrutina de atención a interrupción para la transmisión vía

UART. Saca de la cola de transmisión un carácter y lo coloca en el registro indicado para

transmitir. También se encarga de reiniciar el tiempo de timeout del menú.

Se diseñó un reloj interno de tiempo real para poder llevar a cabo el control de franjas horarias

y para registrar logs. Con éste fin, existía la necesidad de usar el timer A del módulo TinyNode.

Para configurarlo y hacer uso de éste, el módulo hardware posee la función “init_timer_A” la

cual inicializa interrupciones del timer A cada 250 milisegundos aproximadamente.

La función de atención a interrupción del timer A, no solo se encarga de incrementar el reloj del

sistema en 250ms, sino que también maneja los tiempos de timeout del menú, del cerrojo y de

puerta abierta.

Para poder controlar los tiempos de lectura del lector de proximidad Wiegand, en el módulo

hardware se configuró el timer B del módulo TinyNode mediante la función “init_timer_B”. En

ésta función se configuró el timer B para que éste interrumpa cada 250ms. A diferencia del

timer A, timer B sólo es utilizado cuando hay lecturas por parte del lector de proximidad, y

22

cuando no debe ser más utilizado se deshabilita mediante la función del módulo hardware

“stop_timer_B”.

En caso de que un determinado usuario halla ingresado/egresado al/del recinto y haya dejado

la puerta abierta luego de cierto tiempo, se debe encender la alarma del sistema. Cómo Control

de Acceso sólo es una maqueta, la alarma se mostrará mediante encender un LED. Para ésto,

en el módulo hardware se encuentra la función “encender_alarma” cuya única acción es

encender el LED rojo del módulo TinyNode.

Para apagar dicha alarma, la función “apagar_alarma” apagará dicho LED. Para conocer el

estado de la puerta simplemente se consulta el estado del puerto por el que va un pulsador

conectado, mediante la función “leer_estado_puerta”.

Cuando se habilite un usuario a ingresar o egresar del recinto, es necesario desenergizar el

cerrojo de la puerta. Reiterando, como lo que se ha creado es una maqueta, para demostrar

que se desenergiza un cerrojo o se energiza el mismo, las funciones “desenergizar_cerrojo” y

“energizar_cerrojo” apagan y prenden respectivamente el LED verde del módulo.

Para indicar que hay una lectura de una tarjeta mediante el lector de proximidad, se

implementó en el módulo hardware la función “comienzo_lectura_wiegand”.

Para que éste interrumpa cuando se haya producido una lectura, se lo configura mediante la

función “init_puertos”. El lector interrumpe enviando bits de información. Cuando interrumpe

para enviar un 0, se atiende mediante la función “__interrupt void ISR_D0”, mientras que si es

por un 1, mediante la función “__interrupt void ISR_D1”.

5.10-Módulo lectura

Cuando se describió la máquina de estados de lectura y validación se explicó que en el estado

lectura se invoca sucesivamente la función lectura_wiegand, aquí se describe el diagrama de

flujo que implementa la función.

23

Figura 15 : Módulo lectura

Como se explicó anteriormente los datos desde el lector ingresan a través de los pines del

módulo con capacidad de interrumpir o sea por interrupciones.

Cada vez que llega un “0” o “1” se enciende una bandera en la ISR correspondiente a la

recepción de “0” o “1”, esta bandera indica al programa principal que hay un dato listo y hay

que procesarlo.

La forma de ir guardando los bits recibidos en un registro es mediante un shift register con una

máscara dinámica (1<<i) que varía en cada pasada ya que varia el entero i.

Para guardar un uno lógico: lectura=lectura OR mascara

Para guardar un cero lógico: lectura=lectura AND NOT (mascara)

Existe una limitante a la hora de usar el operador “<<” y es que el mismo es de 16 bits por lo

que se debió implementar la lectura en dos partes definidas como lectura_hi y lectura_low,

24

cuando inicia la recepción de datos se comienza a guardar en lectura_hi luego que se completa

se carga en lectura_low, este control se realiza con la variable i, si la misma llega a 16 se

resetea la variable hi.

En cada paso que se guarda un dato se resetea la bandera correspondiente de la ISR, leo_1 o

leo_0 según corresponda.

Si el contador de datos (variable j) llega a 26 se enciende la bandera hay_lectura y se

inicializan las variables para la próxima lectura, si transcurren mas de 250ms (se cuenta un tick

con timer B) y no hay una lectura completa se setea la bandera time_out y se sale de la función

dejándola lista para la próxima lectura.

5.11-Módulo procesamiento

El módulo “procesamiento” es un nexo entre la base de datos y el resto del sistema, aunque

también posee funciones para convertir ciertos tipos de datos.

Para poder validar un usuario, éste módulo posee la función “validación_final_usuario”, a la

cual se le pasa un código de tarjeta. En primera instancia ésta función utiliza la función

“búsqueda usuario” de la base de datos para consultar si el código de tarjeta ingresado se

corresponde con el de algún usuario registrado.

En caso desfavorable, la función retorna un 0 y genera el log correspondiente. En caso de que

el código de tarjeta ingresado se corresponda con el de algún usuario registrado, se llama a la

función “devuelve_franja_actual” para consultar la/s franja/s horaria/s para la hora en la que se

llama a la función.

Si el usuario está habilitado para alguna de ellas, ésta función retorna un 1, y en caso

desfavorable retorna un 0 y genera el log correspondiente. (Véase descripción del módulo

“logs”).

También este módulo posee funciones que dado un número en forma de string lo convierte a

unsigned int o viceversa, las cuales son utilizadas para la recepción o transmisión de datos a

través de la UART.

25

5.12-Módulo base de datos

El módulo “base de datos”, como su nombre lo dice, es módulo de almacenamiento de datos.

No solo almacena los usuarios registrados y las franjas horarias establecidas, sino que también

posee funciones para agregar usuarios, editar usuarios o eliminar usuarios. Como éste

proyecto es una maqueta limitada, las franjas horarias son preestablecidas y no pueden ser

editadas. Dichas franjas son las siguientes:

• Franja 0: las 24horas del día

• Franja 1: desde las 8hs hasta las 15:59 hs

• Franja 2: desde las 16hs hasta las 23:59hs

• Franja 3: desde las 12hs hasta las 19:59hs

Para ingresar un usuario, éste módulo posee la función “ingresar_usuario”, la cual recibe el

código de la tarjeta y una franja horaria para la cual el usuario va a ser permitido ingresar al

recinto. Ésta función crea una variable de tipo usuario con las características indicadas y lo

guarda en un arreglo con tope nombrado “registrados”.

Para poder buscar un usuario y poder determinar si el mismo está registrado, “base de datos”

posee la función “búsqueda_usuario” a la cual se le pasa un código de tarjeta y busca si a

algún usuario en el arreglo “registrados” le corresponde. Retorna 1 si efectivamente esta

registrado dicho usuario y 0 en caso contrario.

Para poder editar un usuario ya registrado, éste módulo posee la función “editar_usuario” a la

cual se le pasa un código de tarjeta y una franja horaria.

La idea de editar un usuario es simplemente cambiarle la franja horaria, así que ésta función

busca el usuario al cual le corresponda el código de tarjeta ingresado, y le cambia la franja

horaria por la ingresada. En caso de que el código de tarjeta ingresado no es de ningún usuario

registrado, no produce cambio alguno.

Para proveer a los módulos que sea necesario de los datos como los usuarios registrados,

franjas horarias establecidas, o la cantidad de usuarios registrados (tope del arreglo), “base de

datos” posee funciones que devuelven esta información: “franjas_defs()”,

“get_cantidad_ingresados()”, “get_registrados()”.

26

5.13-Módulo logs

El módulo “logs” es el que tiene toda la información que permite crear registros de la actividad.

Se define el tipo log, el cual es una estructura que contiene un número de usuario de tipo

unsigned short int, la hora de tipo t_actual y un char llamado tipo_log.

El tipo t_actual fue definido en el módulo “reloj”, siendo una estructura de siete unsigned short

int, para llevar la cuenta de milisegundos, segundos, minutos, horas, días, meses y años.

Se puso especial énfasis en utilizar tipos que necesiten la menor cantidad posible de espacio

en memoria, ya que el mismo es restrictivo y para un proyecto de éstas características es

deseable poder guardar en RAM la mayor cantidad posible de registros sin que los mismos se

sobrescriban antes de ser descargados.

Todos los logs son guardados en un arreglo con tope en memoria RAM. Para probar la

funcionalidad de la maqueta, se le dio a la constante MAX_LOGS, que es la que define el

tamaño de dicho arreglo, el tamaño 50. Si éste proyecto se llevara a la realidad, se le debería

dar el tamaño máximo que permita la memoria disponible, ya que sería deseable que el

sistema de control de acceso funcionara standalone durante por lo menos una semana sin

riesgo de que los registros se sobrescriban. Empero, para probar el correcto funcionamiento de

la maqueta, era más adecuado trabajar con el tamaño que se le dio al arreglo, de forma de, por

ejemplo, poder corroborar que se estuvieran sobrescribiendo de forma correcta.

El tope del arreglo permite saber dónde se encuentra el último lugar ocupado del mismo hasta

el momento. Un nuevo log se guardará en el lugar siguiente a dónde se encontraba el tope al

momento en que el log se generó. También se lo utiliza para saber dónde está el último log al

momento de transmitirlos por hyperterminal para que el administrador los descargue.

Como el arreglo se maneja de forma circular, no siempre existe una relación directa entre el

tope del arreglo y la cantidad de logs almacenados en él. Al momento de transmitir los logs, se

desea recorrer únicamente los índices del arreglo en lo que hay un log almacenado, ya que los

otros índices contienen basura. Es por esto que se creó otra variable que indica la cantidad de

logs almacenados en el arreglo. El valor de ésta variable es mayor o igual que 0 y menor o

igual que MAX_LOGS.

27

Pseudocódigo de la función que agrega un nuevo log al arreglo:

void agregar_log()

aumento tope, si supera MAX_LOGS pasa a valer 0;

guardo ultimo_log en la posición tope del arreglo;

si cantidad_logs distinto de MAX_LOGS

aumento cantidad_logs;

// si fuera igual a MAX_LOGS significa que el nuevo log que //agregué está

sobrescribiendo a uno viejo, por lo tanto la //cantidad no aumenta

Observar que ésta función no recibe parámetros. Esto se debe a que todo nuevo log se genera

en la misma variable, llamada ultimo_log y una vez creado el mismo se ejecuta la función

agregar_log.

El proceso para guardar un log nuevo en el arreglo es el de la figura 16.

Figura 16 : Secuencia almacenar logs

Se hubiera podido implementar también una función guardar_log que recibiera el tipo de

acontecimiento que se registra como parámetro y el número de usuario o cero en caso de ser

el mismo desconocido. Esta implementación permitiría tener menos funciones para hacer lo

mismo. Si bien se reconoce que es una implementación más eficiente, el tiempo antes de

devolver el micro controlador debió emplearse para pulir otros detalles que afectaban la

Ocurre un

acontecimiento que

debe ser registrado

Se ejecuta la función

guardar_log_x,

siendo x el tipo de

acontecimiento

guardar_log_x ejecuta la

función generar_log, que da

a ultimo_log valores según

el tipo de log, fecha y hora y

pone el usuario en 0

En caso de que se conozca el

usuario que generó el

acontecimiento,

guardar_log_x asigna su

número al atributo usuario

guardar_log_x llama

a la función

agregar_log

28

funcionalidad del proyecto y luego de haber entregado el micro controlador preferimos no

modificar el código ya que podría generarse algún error de funcionamiento que no sea

detectado por el grupo.

Es importante observar que los logs deben generarse en la transición de un estado a otro, ya

que de generarse en el mismo estado, se almacenarían logs repetidos, lo que no tiene utilidad

y entorpece la lectura de los mismos.

Hay 8 tipos de acontecimientos que se registran:

1. Un usuario inválido quiso entrar al recinto y se le denegó el permiso

2. Un usuario válido quiso entrar al recinto y se le denegó el permiso por estar fuera de su

franja horaria

3. Se desenergizó el cerrojo porque se pulso el botón de salida

4. Se desenergizó el cerrojo porque un usuario válido quiso entrar al recinto dentro de su

franja horaria

5. Se energizó el cerrojo

6. Se activó la alarma

7. Se apagó la alarma

8. Se accedió al menú

Tanto el arreglo de logs guardados como su tope y la cantidad de elementos que contiene son

variables que pueden modificarse únicamente desde el mismo módulo.

Se crearon las funciones “ver_log”, “get_tope_log”, y “get_cant_logs” para poder ver un log en

determinada posición del arreglo y conocer el tope y la cantidad de logs guardados. Esto

protege las variables, evitando que otros módulos corrompan sus valores.

Se tiene una función “borrar_logs”. Visto desde el punto de vista del administrador, se puede

llamar a ésta función, que borra todos los logs guardados, desde una opción en la pantalla ver

registros del menú. Desde el punto de vista de la implementación, ésta función no borra

realmente los logs, sino que setea el tope del arreglo y la cantidad de logs guardados a cero,

de forma tal que todos los logs que haya guardados pasan a ser basura.

29

5.14-Módulo menú

El menú se manejó como un conjunto de estados dentro de la máquina de estados principal,

que se representan en la figura 17. Al ser ésta la misma máquina de estados que contiene la

validación de las tarjetas, no se podrá permitir el ingreso a un usuario desde el exterior del

recinto mientras que se está manejando el menú. No ocurre lo mismo con el pulsador de

egreso y la alarma, ya que su estado se controla en otra máquina de estados, que funciona de

forma concurrente con la del menú.

Figura 17 : Máquina estados del menú

Hay 8 pantallas dentro del menú, que permiten tomar acciones que se detallan más adelante.

Las mismas de despliegan en la hyperterminal de Windows a través de la UART del micro

controlador. El usuario indicará sus opciones escribiéndolas también en hyperterminal. Para

ello se debe configurar una conexión que interprete VT100 y se comunique a 1200bits/seg.

Luego de cada opción indicará que la misma se envíe pulsando la tecla ENTER.

La interpretación de VT100 es importante ya que se utilizan las secuencias de comandos

correspondientes a limpiar pantalla, subrayar y quitar atributos, ésta última para dejar de

30

subrayar. Se limpia la pantalla siempre antes de presentar una nueva pantalla y también al salir

del menú. Se subrayan algunas letras para indicar que son las que se deben enviar para elegir

una determinada opción. Por ejemplo, para indicar que la letra ‘S’ es la que se debe enviar si

se desea elegir la opción <Salir>.

Dado que se trata de una maqueta, se asume que todo usuario que intente acceder al menú

tiene permiso de administrador y por lo tanto no se pide contraseña o comprobante de que se

tenga éste permiso. Es por esto que en adelante se le llamará al usuario que maneja el menú

“el administrador”, para diferenciarlo de los otros usuarios.

5.14.1-Pantalla principal

Para acceder al menú, el usuario administrador conecta la UART a un PC y envía el carácter

‘M’, escribiendo ‘M’ + ENTER. Se despliega entonces la pantalla principal, con el siguiente

mensaje:

Bienvenido al menú del sistema Control de Acceso

Usted puede:

<1> Agregar nuevo usuario

<2> Editar un usuario

<3> Borrar un usuario

<4> Ver las franjas horarias

<5> Obtener registros

<6> Establecer fecha y hora

<7> Ver usuarios registrados

Elija su opción y a continuación ingrese <ENTER>.

<Salir>

En todas las pantallas se encuentra la opción Salir. Al tener la letra “S” subrayada, se está

indicando que al enviar “S” + ENTER se saldrá del menú. Esto limpia la pantalla y hace que se

vuelva al estado de espera, permitiéndose nuevamente la validación de usuarios por medio del

lector de tarjetas magnéticas. Ésta acción se desencadena también al acabarse el tiempo de

timeout del menú. El tiempo de timeout del menú es fijo y de un minuto. En otra versión del

proyecto el mismo podría ser configurado desde el menú por el administrador. Éste tiempo se

refresca cada ver que se interactúa por UART con el micro controlador, ya sea por transmisión

o por recepción.

31

5.14.2-Pantalla “Agregar nuevo usuario”

Si el administrador desea agregar usuarios escribe “1” + ENTER

Se despliega entonces la pantalla siguiente:

Para agregar un nuevo usuario indique:

<N> <Ultimos 4 digitos del numero de tarjeta><ENTER>

<F> <Franja horaria para la que se lo habilita><ENTER>

<Salir>

<Volver a pantalla principal>

Por un lado se debe ingresar un número de usuario de cuatro dígitos precedido por una “N”.

Como éste proyecto se trata de una maqueta, se toma como número de usuario únicamente

los últimos 4 números de la tarjeta de proximidad. Observando de cerca el protocolo Wiegand,

esos 4 números representan el ID en formato BCD (Binary-Coded Decimal). Los dos primeros

números, que se ignoran en ésta maqueta, representan el Facility Code en BCD.

La forma de manejar los números de usuario de ésta maqueta permitiría de ésta forma tener

cualquier usuario cuyo ID esté entre 0001 y 9999 en BDC. Es importante notar que no se

puede tener un usuario con ID 0000, esto se debe a que éste ID se reserva en los registros

para el usuario desconocido.

Por otro lado se debe ingresar una franja horaria para asignarle a éste usuario, en la que será

admitido para abrir la puerta. El número de franja debe estar precedido por una F y tener un

formato de dos dígitos correspondientes a números decimales. Esto se hizo pensando que en

una futura versión del proyecto, las franjas podrían ser editables y sería razonable poder tener

hasta 100 franjas. En éste caso se consideró que para una maqueta era suficiente tener franjas

predeterminadas, las cuales van desde la 00 hasta la 03. No se chequea que la franja que

ingresa el administrador se encuentre definida, por lo tanto si se asignara a un usuario una

franja no definida, esto pasará desapercibido y el mismo no será admitido nunca. Éste error se

puede corregir editando el usuario.

Para que se ejecute la función de agregar un usuario, el administrador debe haber ingresado

un par usuario franja sin salir de la pantalla. En caso de que se salga de la pantalla, todos los

datos deberán ser ingresados de nuevo. El orden en que éste par sea ingresado es indistinto.

En caso de ingresar nuevamente uno de los datos sin haber ingresado el otro correspondiente

al par, el mismo se sobrescribirá. Se puede asignar más de un usuario sin tener que volver a

ingresar a la pantalla.

32

Siempre que se ejecute una función que no implica un cambio de estado en la máquina de

estados del menú, por ejemplo el ingreso de un nuevo usuario, se imprimirá en la pantalla

“OK.”, a modo de confirmación.

En todo el menú se mantiene que, de ingresar accidentalmente un dato que no corresponde a

una opción de la pantalla, el mismo se desecha al pulsar la tecla ENTER.

En todas las pantallas derivadas de la principal existe la opción “Volver a la pantalla principal”.

Esto implica que al transmitir la opción “V” se volverá a desplegar la pantalla principal y las

opciones que podrá escoger el administrador serán las de la misma.

De lo anterior se deduce que si luego de ingresar a la pantalla “ingresar usuario” se ingresan

los siguientes datos:

“N9945” + ENTER

“N9988” + ENTER

“H01” + ENTER

“F01” + ENTER

“F00” + ENTER

“N9900” + ENTER

Los usuarios ingresados finalmente serán el 9988 admitido en la franja 01 y el 9900 admitido

en la franja 00.

5.14.3-Pantalla “Editar un usuario”

En ésta pantalla se despliega el siguiente mensaje:

Para editar un usuario existente indique:

<N> <Ultimos 4 digitos del numero de tarjeta><ENTER>

<F> <Franja horaria para la que se lo habilita><ENTER>

<Salir>

<Volver a pantalla principal>

El procedimiento para editar usuarios es el mismo que para agregar uno, con todas las

restricciones y posibilidades.

En éste caso se buscará en la base de datos el número de usuario indicado y se le sustituirá la

franja horaria por la nueva. En caso de que se indicara editar un usuario inexistente, se

consumirá el par usuario – franja, se recibirá la confirmación, pero no se realizará ninguna

acción en la base de datos. Esto se debe a que la función de editar un usuario se ejecuta, pero

33

al no encontrarse el usuario a editar, no realiza ninguna acción. En otra versión del proyecto

esto podría mejorarse transmitiendo una advertencia de que el usuario indicado no existe, pero

cómo en éste caso se trata de una maqueta, el administrador deberá tener la precaución de

que esto no desencadene situaciones indeseadas.

5.14.4-Pantalla “Borrar un usuario”

En ésta pantalla se despliega el siguiente mensaje:

Para borrar un usuario existente indique:

<N> <Ultimos 4 digitos del numero de tarjeta><ENTER>

<Salir>

<Volver a pantalla principal>

De la misma forma que en las pantallas anteriores, se indicará el número del usuario a borrar.

En éste caso no se debe indicar una franja horaria, por lo tanto la función que borra el usuario

se ejecuta automáticamente. En caso de que el mismo no exista, el comportamiento es

análogo a cuando se pide editar un usuario inexistente.

5.14.5-Pantalla “Ver franjas horarias”

En ésta pantalla es en la que más se nota la restricción de que estamos ante una maqueta. Es

por eso que las franjas horarias se pueden ver pero no modificar. Al tener franjas horarias fijas,

el mensaje que se verá siempre será:

Las franjas horarias actuales son:

Franja 00: hora de inicio 00:00 hora de fin 23:59

Franja 01: hora de inicio 08:00 hora de fin 15:59

Franja 02: hora de inicio 16:00 hora de fin 23:59

Franja 03: hora de inicio 12:00 hora de fin 19:59

<Salir>

<Volver a pantalla principal>

Es importante observar que las franjas se superponen, por lo tanto a un momento del día

determinado no corresponde necesariamente una única franja horaria. La franja 00 comprende

todo el día, ya que todas las franjas horarias comprenden también los bordes del conjunto

horario y la precesión de las mismas es de un minuto.

34

Otras restricciones debidas a la condición de maqueta del sistema son que no se controlan los

días de la semana, por lo tanto las franjas horarias se aplican tanto a días laborables como no

laborables y tampoco hay forma de configurar que se le deniegue el acceso a los usuarios en

días particulares tales como feriados.

5.14.6-Pantalla “Obtener registros”

Uno de los aspectos principales de este sistema de control de acceso es que registra

acontecimientos importantes, de forma que luego se los puede descargar de forma amigable

con el usuario administrador.

Los detalles sobre los registros y como se almacenan se describen en la sección “Registros”.

En ésta sección se describe la pantalla que permite al usuario administrador descargar los

mismos.

Al ingresar a la pantalla se despliega el mensaje:

Estos son los ultimos registros:

// Se despliegan todos los registros comenzando por el más reciente

<Borrar todos los registros>

<Salir>

<Volver a pantalla principal>

Se desplegarán tantos registros como haya almacenados, existiendo una cantidad máxima de

registros que se pueden almacenar. Cada registro se separa del anterior y siguiente por una

línea libre, de forma tal de facilitar la legibilidad.

El formato general de los registros es:

Fecha y hora:

01/01/2014 15:37:00

<Tipo de log indicando usuario si es relevante>

Dónde los mensajes posibles para cada tipo de log son:

• Usuario invalido <nº de usuario> quiso acceder y fue rechazado.

• Usuario <nº de usuario> quiso acceder fuera de su horario permitido.

• Se pulso el boton de salida.

• Se le permitio acceso a usuario <nº de usuario>.

35

• Se energizo el cerrojo.

• Se activo la alarma.

• Se apago la alarma.

• Se accedio al menu.

Una vez desplegados los registros en hyperterminal, el administrador puede guardarlos en un

archivo de texto. Asimismo, puede borrar todos los registros mediante la opción señalada. No

hay forma de eliminar los registros uno por uno. Si los registros no son borrados

explícitamente, se conservan hasta que se supere el tamaño del buffer en que se los almacena

y el mismo se sobrescriba de forma circular. Esto significa que si se excede el tamaño del

buffer, los registros más antiguos serán sustituidos a medida que lleguen nuevos registros.

Se deja al administrador la interpretación de los datos, por ejemplo, si se le permite acceder a

un usuario (cuyo número queda registrado) y segundos después comienza a sonar la alarma,

lo más probable es que haya sido éste usuario quien dejó la puerta abierta. Si en cambio

comienza a sonar la alarma y no existe un registro de que segundos antes se permitiera

acceso o salida a algún usuario, entonces la puerta fue forzada.

5.14.7-Pantalla “Establecer fecha y hora”

La fecha y hora se inicializan por defecto en la inicialización del programa. De todas formas,

ésta fecha y hora por defecto (01/01/2014 00:00:00) serán lógicamente distintas a las reales.

Es por esto que es altamente recomendado para el administrador establecer la fecha y hora

desde el menú inmediatamente luego de inicializado el sistema de control de acceso y luego

borrar los registros, para que no queden registros anteriores con la fecha y hora por defecto,

que podrían llevar a confusiones.

Al ingresar a ésta pantalla se verá el mensaje:

Para establecer la fecha y hora indique:

<F> <Fecha con el formato: DDMMAAAA> <ENTER>

<H> <Hora con el formato: HHMMSS> <ENTER>

Los registros que se encuentren guardados actualmente quedaran segun la fecha y hora

anteriores.

<Salir>

<Volver a pantalla principal>

36

De la misma forma que en la pantalla Agregar nuevo usuario, se ingresan la fecha y la hora por

separado, con el formato indicado, por ejemplo, ingresar

“F11072013” + ENTER

“H145600” + ENTER

Inicializará el reloj en el día 11 del mes 7 del año 2013 a la hora 14:56:00.

Si bien el reloj tiene una precisión de 250ms, la cantidad de milisegundos al inicializar el reloj

será siempre 0 por defecto.

Para que la fecha funcione adecuadamente se controla la cantidad de días máximos

correspondiente a cada mes y años bisiestos.

5.14.8-Pantalla “Ver usuarios registrados”

En ésta pantalla se muestra una lista de los usuarios registrados y la franja horaria a la que

tienen permitido el ingreso. Se recomienda al administrador revisarla luego de realizar cambios

en el registro de usuarios para confirmar que se hayan realizado de forma satisfactoria.

A continuación se muestra un ejemplo de cómo podría verse ésta pantalla si los usuarios

admitidos al momento de consultarla son el 9988 admitido en la franja 01 y el 9900 admitido en

la franja 00:

Estos son los usuarios que se encuentran admitidos actualmente:

9988 admitido en franja 01

9900 admitido en franja 00

<Salir>

<Volver a pantalla principal>

37

6-Conclusiones

Si bien este proyecto es una maqueta, el grupo de trabajo observó que perfectamente es

extrapolable a un control de acceso real.

Observamos que haber dedicado la primera semana entera a planificación con el tutor del

proyecto fue una decisión clave y muy satisfactoria puesto que nos liberó de demoras a la hora

de implementar código.

Se logró implementar la comunicación entre el módulo UC y el lector de tarjetas de proximidad

Wiegand y el módulo UC con las entradas y las salidas digitales.

Se logró implementar de forma satisfactoria la comunicación vía hiperterminal emulando VT100

para el uso del menú.

Para poder realizar el funcionamiento de Control de Acceso, se logró implementar tres

máquinas de estado funcionando en paralelo, y la arquitectura aplicada fue Round Robin con

interrupciones.

Tal cual se pensó al comenzar el proyecto, la memoria disponible del micro controlador no fue

un problema en ninguna etapa de realización del mismo. Esto se debe a que el código del

programa no es muy extenso y que también todas las variables destinadas a almacenar

información fueron pensadas para que ocupen la menor cantidad de bytes posibles en memoria

RAM.

Tras testear la funcionalidad del código, notamos la necesidad de proteger ciertas variables

modificables por interrupciones (problema de datos compartidos), los cuales fueron

solucionados mediante las funciones __disable_interrupt () y __enable_interrupt () en las líneas

de código donde corresponda.

Durante la realización del proyecto, notamos que fue de gran utilidad lo trabajado en los

laboratorios, puesto que el reciclado del código utilizado en los mismos para este proyecto nos

permitió ganar algo más de tiempo.

Analizando las complicaciones que se tuvieron para la realización del proyecto, concluimos que

no se tuvieron demasiadas. El procesamiento de la información brindada por el lector de

proximidad no fue un problema y que las medidas realizadas con el osciloscopio de su

comportamiento fueron muy precisas. De nuevo es preciso resaltar que la ausencia de

complicaciones se debe a la buena planificación del trabajo.

38

La conclusión más contundente es afirmar que se logró finalizar el proyecto de forma

satisfactoria en tiempo y forma, como también que el mismo posee todas las funcionalidades

deseadas y hasta algunas más de las que se planificó inicialmente.

7-Anexos

7.1-Conceptos del curso aplicados al proyecto

Los conceptos aplicados del curso al proyecto son variados, podemos dividirlos en tres grandes

aspectos, a saber:

-herramientas de desarrollo

-plataforma de hardware

-arquitectura de software

En cuanto a las herramientas de desarrollo podemos resaltar la programación en lenguaje C y

el uso del software IAR y principalmente su herramienta Debugger; herramienta fundamental

para testear los módulos en todas las etapas del diseño.

A lo largo del curso se estudio en los laboratorios, el uso de registros específicos para utilizar

Timers, Uart y puertos de E/S de propósito general y con capacidad de interrumpir, a través del

entendimiento de las hojas de datos del modulo hardware.

Este aprendizaje fue útil ya que facilito la implementación de los módulos que utilizan las

caracteristicas descriptas.

Por último y no menos importante, se aplico los conocimientos adquiridos de arquitectura de

software específicamente Round Robin con interrupciones y el estudio del problema de datos

compartidos y las posibles soluciones.

7.2-Planificación del proyecto

La planificación previa difiere levemente de la definitiva ya que a priori es muy difícil saber

exactamente que módulos se deberán implementar y cuanto tiempo insumirá cada uno.

De todas formas al inicio del proyecto se dedico tiempo a la modularización y la

implementación en maquinas de estado lo que a futuro fue clave a la hora de cumplir con la

planificación y los objetivos del proyecto.

39

En cuanto a las horas dedicadas al proyecto, podemos afirmar que fueron largamente

superiores a lo que se especifica, pensamos que esto se atribuye a la poca experiencia en

realizar un proyecto de mediano porte y no saber delimitarlo para que se realice en el tiempo

estipulado. Pensamos que otro factor determinante fue la poca experiencia previa adquirida en

el lenguaje de programación C.

7.3-Especificación del proyecto

Control de Acceso

especificación final

Sistemas embebidos para tiempo real 2013

Florencia Blasina, Gonzalo Finozzi, Nicolás Marquez

Tutor: Conrado Rossi

Índice

Descripción del problema a ser resuelto ..................................................................................... 40

Antecedentes............................................................................................................................... 40

Objetivo general .......................................................................................................................... 40

Objetivos específicos .................................................................................................................. 41

Alcance ........................................................................................................................................ 41

Descripción funcional .................................................................................................................. 42

Diagrama de bloques .................................................................................................................. 43

Requerimientos y restricciones ................................................................................................... 44

Diseño preliminar......................................................................................................................... 44

Planificación ................................................................................................................................ 44

40

Descripción del problema a ser resuelto

En muchas actividades cotidianas es necesario tener un control sobre el ingreso/egreso de personas en determinadas áreas, estas pueden ser oficinas, recintos laborales, instituciones de estudio, bancos o salas de procesamiento de datos. También existen problemas concretos con el uso compartido de electrodomésticos, medicación o instrumentos de laboratorio de alto valor. Para resolver este problema se emplean sistemas que implementan dicho control permitiendo o no el acceso a las áreas descriptas. Entre las aplicaciones que un control de acceso puede tener, ejemplificamos algunas situaciones:

• Las instituciones necesitan tener un control de horarios de entrada/salida del personal para liquidación de sueldos y/o control de inasistencias.

• Por seguridad se puede querer restringir a un selecto grupo de usuarios el acceso a determinados bienes o áreas específicas de una empresa, hogar o local de trabajo.

Control de Acceso resuelve esta problemática debido a que realiza el control descripto anteriormente logrando el nivel de seguridad necesario para este tipo de aplicaciones.

Antecedentes

En el curso de Sistemas Embebidos para Tiempo Real no existe una versión previa a esta solución, sí existen en el mercado muchas marcas que comercializan este producto con diversas implementaciones. Existe un protocolo de comunicación estándar entre lectores (proximidad, pin, biométrico, etc.) y el micro controlador (UC) llamado Wiegand, el cual se tomara como base para la implementación.

Objetivo general

Desarrollar un sistema que implemente un control de acceso de una puerta utilizando un UC y un lector de tarjetas proximidad. Simular su funcionamiento en una maqueta que además del módulo UC tendrá tres entradas: el lector, una que indique al UC el estado (abierto o cerrado) de la puerta y un pulsador que permitirá abrir la puerta desde el interior del recinto. Tendrá dos salidas digitales (LEDs), uno que simule una alarma sonora, que se encenderá cuando el cerrojo esté magnetizado y la puerta abierta y el otro que indique el estado del cerrojo: LED encendido - cerrojo desmagnetizado, LED apagado - cerrojo magnetizado.

41

Objetivos específicos

Para cumplir el objetivo general, se deberán cumplir los siguientes objetivos específicos:

• Implementar la comunicación entre el módulo UC y el lector de tarjetas de proximidad Wiegand y el módulo UC con las entradas y las salidas digitales.

• Implementar la comunicación con el usuario ya sea para configuración o para obtener reportes. Esta comunicación se realizara vía hyperterminal a través de un menú que se implementara emulando una terminal grafica del tipo VT100.

• El UC se comunicará con la hyperterminal de un PC a través de su UART.

Alcance

Estudiar el funcionamiento del protocolo Wiegand corroborando el mismo con mediciones en las líneas de datos del lector. A nivel de hardware y para implementar la comunicación con el lector, se desarrollara una etapa de adaptación de niveles de tensión, también se implementara el conexionado de las entradas y salidas digitales. Se implementara un reloj de tiempo real que lleve la cuenta de años, meses, días, horas, minutos y segundos. Para el menú se utilizará esquema básico brindado por los docentes, el cual se modificará para obtener la funcionalidad necesaria. El menú permitirá el alta y baja de usuarios, seteos de parámetros básicos de funcionamiento como ser fecha y hora, tiempo de desmagnetización del cerrojo y franjas horarias. Una vez configurado el sistema deberá funcionar standalone. Para implementar el software del sistema y el menú para la configuración y gestión, se tendrán en cuenta las siguientes características:

• Seteo desde la terminal de fecha y hora. • Único nivel de acceso sin password. • Seteo del tiempo de apertura de puerta, es el tiempo en segundos durante el cual el

cerrojo permanece desenergizado luego de una lectura válida (entrada al recinto) o luego de pulsar el switch de salida (salida del recinto).

• Deberá tener al menos dos franjas horarias preconfiguradas de acceso, una que permita acceso sin restricciones de horario y otra que permita acceso en horario de oficina únicamente.

• El sistema admitirá al menos dos usuarios distintos, cada uno de ellos con su respectivo número de identificación asociado a una tarjeta de acceso.

• Los datos personales de cada usuario serán al menos: nombre, apellido, fecha de ingreso a la empresa, fecha de validez del permiso para ingreso. Luego de expirada la fecha de validez, el usuario no podrá ingresar hasta que se renueve la misma.

• A cada usuario se le deberá asignar una franja horaria preconfigurada. • Para la gestión del sistema se deberá almacenar en memoria RAM un listado con los

accesos válidos e inválidos indicando la fecha y hora de lectura de la tarjeta y titular de la misma. También se registrará fecha y hora de las salidas, si bien no se podrá reconocer el usuario en éste caso. La escritura en este espacio de memoria será cíclico es decir que cuando se complete se sobrescribirá desde el inicio.

• La memoria definida para almacenar los logs, podrá ser borrada desde a través de un omando ingresado en el menú.

42

Descripción funcional

Luego de configurar los parámetros de uso, la operativa para el ingreso se ejemplifica en el siguiente diagrama.

En base a la operativa descripta anteriormente se definen los bloques o módulos de software para implementar la solución.

43

Diagrama de bloques

Diagrama conceptual de los bloques a implementar indicando la interacción entre ellos, en la etapa de diseño se describirán las funciones que pertenecen a cada bloque y se especificara detalladamente cómo interactúan entre ellos.

El módulo de manejo de hardware se implementara para agrupar los módulos que interactúan directamente con los periféricos del UC logrando independizar el hardware del software, facilitando la programación para futuros cambios de plataformas de hardware. Los módulos marcados con asterisco utilizaran funciones implementadas en el módulo de

manejo de hardware.

44

Requerimientos y restricciones

Memoria: se desea que la memoria flash alcance para guardar el programa a ejecutar y la información de los usuarios y que la memoria RAM alcance para guardar por lo menos 100 logs de eventos y/o alarmas. Tiempos de respuesta: sabemos que el tiempo entre interrupciones una vez comenzada a leer una tarjeta es de 2ms nominales, se debe cuidar de no perder bits de ésta lectura. Se nos ofreció el uso de un módulo Tinynode 184 con una Standard Extension Board (SEB), éste módulo utiliza un UC MSP430F2417 y cuenta con 8kB de memoria RAM, 92kB de memoria flash y un oscilador de cuarzo de frecuencia 32,768kHz. En el conector de expansión de SEB contamos con 30 pines de entrada/salida, de los cuales 5 pueden ser utilizados para recibir interrupciones externas (necesarias para las lecturas del lector de proximidad).

Diseño preliminar

Plataforma de hardware: utilizamos el módulo Tinynode 184 con una Standard Extension Board.

Para adaptar niveles de tensión, se realizará un divisor resistivo y un filtro de entrada con frecuencia de corte a determinar.

Arquitectura de software: se utilizará Round Robin con interrupciones y de ser necesario encolado funciones.

Nos apoyaremos en un diseño de módulos en base a bloques conceptuales. Una vez determinados los módulos se verá qué funciones se deben implementar y sus encabezados, así como las interfaces de los módulos.

Planificación En la planilla se adjunta la información de las tareas a realizar (color azul), hitos, presentaciones, avance y entrega final (color rojo). Los módulos a implementar en la primera parte son:

- lectura (lector de proximidad) - menú - manejo de memoria RAM - búsqueda en base de datos - validación de usuario/franja - bases de datos Usuarios, parámetros - manejo de HW

y los módulos a implementar en le segunda parte son:

- reloj - alarma - lectura entrada digital - manejo de salidas

45

46

7.4-Datasheet del lector de proximidad PR-200 Proximity Card Reader de Jantek Frequency is 125KHZ Maximum reading range from 14~20cm Highly reliable operation with consistent reader range and performance Water resistant for indoor/outdoor use Built-in watch dog, the system never hang. Built-in tamper switch detects if case is forced open or destroy Multicolor LED with internal or host control Available with Wiegand interface, TTL or RS485 is in option.

Dimensions : 13.0(L) x 8.6(W) X 2.5(H)cm

Power requirements : DC 12V 1A

Environment : Operating temperature Humidity

: 0°C~50°C : 0~90%RH

Current requirements : 50~160mA

Relay 2 relay contact (Max. DC 12V 1Amp)

6.5-Archivos fuente Los archivos están adjuntos en la documentación entregada, se detallan los mismos:

• base_de_datos.c • base_de_datos.h • cola_char.c • cola_char.h • hardware.c • hardware.h • lectura.c • lectura.h • logs.c

47

• logs.h • main_proyecto.c • maq_estados.c • maq_estados.h • menú.c • menú.h • procesamiento.c • procesamiento.h • reloj.c • reloj.h