Anda di halaman 1dari 169

Universidad de Costa Rica

Facultad de Ingeniera
Escuela de Ingeniera El
ectrica

Desarrollo de un prototipo RFID con


alarma remota para monitorear puertas de
acceso.

Por:
Christian Chaves Bejarano

Ciudad Universitaria Rodrigo Facio, Costa Rica


Diciembre del 2014

Desarrollo de un prototipo RFID con


alarma remota para monitorear puertas de
acceso.

Por:
Christian Chaves Bejarano

IE-0499 Proyecto el
ectrico
Aprobado por el Tribunal:

Dr. Jaime Cascante Vindas


Profesor gua

Dr. Lucky Lochi Yu Lo


Profesor lector

Dr. Jose David Rojas Fernandez


Profesor lector

Resumen
La tecnologa RFID es aplicada hoy en da en numerosas areas, una de las
principales es el desarrollo de sistemas de identificacion automatica y el control
de accesos.
El objetivo principal del presente trabajo es el desarrollo de un prototipo
de bajo costo con tecnologa RFID, que incluyera una alarma remota para el
monitoreo de entradas y salidas de una puerta de acceso.
Se desarroll
o una investigacion bibliografica sobre la tecnologa RFID, haciendo hincapie en su aplicacion en los sistemas de control de acceso y monitoreo remoto de puertas de acceso.
Se describen brevemente algunos sistemas de control de acceso RFID desarrollados por empresas comerciales e instituciones educativas, esto con la finalidad de adquirir criterio para el dise
no adecuado de un prototipo de bajo
costo mediante tecnologa RFID.
Se realiz
o el dise
no e implementacion de un sistema de bajo costo con
un Raspberry Pi y un modulo RFID, lo cual permitira el control de accesos
de una puerta y su monitoreo remoto a traves de una pagina web, la cual
se encuentra montada sobre un servidor previamente instalado y configurado
dentro del microcontrolador.
Durante la implementacion del prototipo, se describieron los componentes
y hardware utilizados, detalles de conexion con el microcontrolador, as como
sus costos comerciales. Ademas se brindan detalles sobre el software instalado
para el funcionamiento del dispositivo.
Se presenta la l
ogica utilizada para el desarrollo de los programas y se
realiza una explicaci
on del funcionamiento del prototipo a traves de imagenes,
que servira como manual de consulta.
Dado que el sistema corresponde a un prototipo, este posee ciertas limitaciones, por tanto al final de este proyecto se presentan una serie de posibles mejoras que permitiran obtener un sistema mas completo. Estas mejoras
pueden variar de acuerdo a las necesidades de cada lugar o laboratorio de la
Escuela de Ingeniera Electrica en caso de su instalacion.

Indice general

Indice de figuras

ix

Indice de cuadros

xi

Nomenclatura
1 Introducci
on
1.1 Descripci
on General .
1.2 Justificaci
on . . . . . .
1.3 Alcance del proyecto y
1.4 Objetivos . . . . . . .
1.5 Metodologa . . . . . .

xiii

.
.
.
.
.

1
1
2
2
3
3

2 Marco te
orico
2.1 Sistemas RFID . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 RFID aplicado al control de accesos . . . . . . . . . . . . . . .
2.3 Sistemas RFID comerciales y caseros . . . . . . . . . . . . . . .

5
5
11
13

. . . . . . .
. . . . . . .
limitaciones
. . . . . . .
. . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

3 Dise
no e implementaci
on de un prototipo con Raspberry
3.1 M
odulo Mifare RC522 . . . . . . . . . . . . . . . . . . . . .
3.2 Microcontrolador Raspberry Pi . . . . . . . . . . . . . . . .
3.3 Tarjetas o tags RFID . . . . . . . . . . . . . . . . . . . . . .
3.4 Conexi
on Raspberry PI-Modulo MFRC522 . . . . . . . . .
3.5 Conexi
on Raspberry PI-Teclado Alfanumerico . . . . . . . .
3.6 Dise
no y conexion de los demas componentes del prototipo
3.7 Prototipo final . . . . . . . . . . . . . . . . . . . . . . . . .
4 Instalaci
on e implementaci
on
4.1 Instalaci
on de Raspbian . .
4.2 Servidor Web . . . . . . . .
4.3 Base de datos . . . . . . . .

.
.
.
.
.

Pi 19
. . 20
. . 23
. . 25
. . 26
. . 27
. . 29
. . 31

del software requerido


33
. . . . . . . . . . . . . . . . . . . . 33
. . . . . . . . . . . . . . . . . . . . 38
. . . . . . . . . . . . . . . . . . . . 40

5 Funcionamiento del prototipo, control de accesos y p


agina
web
43
5.1 Sistema de control de accesos con RFID . . . . . . . . . . . . . 43
5.2 Monitoreo remoto a traves de pagina web . . . . . . . . . . . . 50
vii

6 Mejoras al prototipo

59

7 Conclusiones y recomendaciones

63

Bibliografa

65

A Ap
endice
A.1 Configuraci
on del archivo ssmtp.conf . . . . . . . . . . . . . .
A.2 Instalaci
on del software phpMyAdmin . . . . . . . . . . . . .
A.3 C
odigo en Python para la implementacion del sistema . . . .
A.4 C
odigo en PHP y HTML para la implementacion del sistema
A.5 C
odigo en SQL para la base de datos . . . . . . . . . . . . . .

69
. 69
. 70
. 72
. 85
. 145

B Anexos
B.1 Anexo 1. Cotizaci
on Sistema RFID Accesos Automaticos CR .
B.2 Anexo 2. Diagrama configuracion de pines de un Raspberry Pi
modelo B+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.3 Anexo 3. Conexi
on ilustrativa entre un Raspberry Pi modelo B
y el lector MFRC522 . . . . . . . . . . . . . . . . . . . . . . . .
B.4 Anexo 4. Diagrama de conexion completo del prototipo . . . .

viii

149
149
152
154
154

Indice de figuras
2.1
2.2
2.3
2.4

Sistemas de identificacion automatica. Tomada de Finkenzeller (2010)


Representaci
on de un sistema RFID. Tomada de Herrera et al. (2009)
Representaci
on de una tarjeta RFID. Tomada de Finkenzeller (2010)
Lectores RFID de Motorola Solutions. A la izquierda un lector fijo
y a la derecha un lector movil. Tomada de Motorola Solutions (2014)
2.5 Lector RFID Mifare RFID-RC522. Tomada de Deal Extreme (2014)
2.6 Aplicaci
on de los Sistemas RFID al control de accesos. Tomada de
GAO RFID Inc (2014) . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 Sistemas RFID para el control de accesos de la compa
na HID.
Tomada de HID (2014) . . . . . . . . . . . . . . . . . . . . . . . .
2.8 Sistemas RFID de la empresa SecuraKey. Tomada de SecuraKey
(2014b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9 Lectores RFID de la empresa SkyRFID Inc. Tomada de SkyRFID
(2014b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10 Sistema RFID casero. Tomada de Delgadillo y Ortiz (2011) . . . .
2.11 Microcontroladores de bajo costo. . . . . . . . . . . . . . . . . . . .
2.12 M
odulo Mifare RC522. Tomada de Amazon (2014c) . . . . . . . .
3.1
3.2
3.3

5
7
8
9
9
12
15
15
16
16
17
18

Sistema esperado. Tomada de Delgadillo y Ortiz (2011) . . . . . . 19


Esquema del sistema dise
nado. . . . . . . . . . . . . . . . . . . . . 20
c
Configuraci
on de pines del integrado MFRC522. Tomada de NXP
Semiconductors (2014) . . . . . . . . . . . . . . . . . . . . . . . . . . 21
c
3.4 Configuraci
on de pines del integrado MFRC522. Tomada de NXP
Semiconductors (2014) . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5 M
odulo RFID-RC522 con acercamiento al componente integrado
MFRC522. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.6 Configuraci
on de pines del Raspberry Pi modelo B+. Tomada de
Pinout (2014) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.7 Tarjeta RFID del modulo MIFARE RC522. . . . . . . . . . . . . . 26
3.8 Protocolo de comunicacion SPI (Serial Peripherical Interface). Tomada de Byte Paradigm (2014) . . . . . . . . . . . . . . . . . . . . 27
3.9 Diagrama de conexion de pines entre el Raspberry Pi y el modulo
MFRC522. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10 Teclado Alfanumerico a utilizar. Tomada de Amazon (2014b) . . . 28
3.11 Conexi
on del teclado alfanumerico al RPi. . . . . . . . . . . . . . . 29
ix

c 29
3.12 Circuito pull-up. Esquem
atico dise
nado mediante el software TINA .
3.13 Conexi
on de los dem
as componentes en el prototipo. Esquematico
dise
nado mediante el software libre Fritzing. . . . . . . . . . . . . . 31
3.14 Prototipo final RFID. . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12

Diagrama de software requerido. . . . . . . . .


Configuraci
on b
asica de Raspbian. . . . . . . .
Configuraci
on avanzada de Raspbian. . . . . .
Configuraci
on del archivo raspi-blacklist.conf. .
Instalaci
on de MySQLdb. . . . . . . . . . . . .
Instalaci
on de RPi-GPIO. . . . . . . . . . . . .
Proceso de instalaci
on de Apache. . . . . . . .
Acceso al dominio local mediante un navegador
Proceso de instalaci
on de Apache. . . . . . . .
Proceso de instalaci
on de Apache. . . . . . . .
Proceso de instalaci
on de MySQL. . . . . . . .
Proceso de instalaci
on de phpMyAdmin. . . . .

5.1

L
ogica del sistema para el Control de accesos mediante tarjetas
RFID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
L
ogica del sistema para habilitar o deshabilitar el sistema a traves
del teclado del prototipo. . . . . . . . . . . . . . . . . . . . . . . .
Acceso remoto mediante Putty a traves de SSH puerto 22. . . . . .
Ejecuci
on en terminales separadas del software. . . . . . . . . . . .
Ingreso del c
odigo de activacion y desactivacion mediante teclado
alfanumerico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ingreso del c
odigo de activacion y desactivacion mediante teclado
alfanumerico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Control de accesos, sistema desactivado y luego activado. . . . . .
Alarma activada, puerta de acceso abierta y conteo regresivo. . . .
Acceso en terminal mediante una tarjeta registrada. . . . . . . . .
Acceso mediante una tarjeta registrada. . . . . . . . . . . . . . . .
Acceso en terminal mediante una tarjeta registrada. . . . . . . . .
Acceso mediante un llavero no registrado. . . . . . . . . . . . . . .
Diagrama de flujo de la p
agina web. . . . . . . . . . . . . . . . . .
Inicio de sesi
on en la p
agina web. . . . . . . . . . . . . . . . . . . .
Inicio en la p
agina web. Introduccion a la pagina web. . . . . . . .
Registro de usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . .
Usuario registrado. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lista de usuarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Usuario eliminado. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Manejo de correos electr
onicos. . . . . . . . . . . . . . . . . . . . .

5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20

. . .
. . .
. . .
. . .
. . .
. . .
. . .
web.
. . .
. . .
. . .
. . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

33
34
35
36
36
37
39
39
40
40
41
41

44
45
46
47
48
48
49
49
50
51
52
53
53
54
54
55
55
56
56
56

5.21 Lista de accesos autorizados en la pagina web. . . . . . . . . . . .


5.22 Lista de accesos no autorizados en la pagina web. . . . . . . . . . .
5.23 Ventana emergente. . . . . . . . . . . . . . . . . . . . . . . . . . .

57
57
58

6.1
6.2
6.3

Llavn electrico. Tomada de Amazon (2014a). . . . . . . . . . . . . 59


Display LCD. Tomada de CRCibernetica. (2014a). . . . . . . . . . 61
Sensor de movimiento infrarrojo. Tomada de CRCibernetica. (2014b). 61

A.1
A.2
A.3
A.4
A.5
A.6

Proceso
Proceso
Proceso
Proceso
Proceso
Proceso

de
de
de
de
de
de

instalacion
instalacion
instalacion
instalacion
instalacion
instalacion

de
de
de
de
de
de

phpMyAdmin.
phpMyAdmin.
phpMyAdmin.
phpMyAdmin.
phpMyAdmin.
phpMyAdmin.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

70
71
71
72
72
73

B.1 Configuraci
on de pines del Raspberry Pi modelo B +. Tomada de
Raspberry-Pi-Foundation (2014) . . . . . . . . . . . . . . . . . . . 153
B.2 Diagrama de conexion entre el Raspberry Pi y el modulo MFRC522.
Tomada de Raspberry-Pi-Foundation (2014) . . . . . . . . . . . . . 154
B.3 Diagrama de conexion completo del prototipo final . . . . . . . . . 155

Indice de cuadros
2.1
2.2
2.3
3.1
3.2
3.3
3.4
3.5
3.6

Rese
na hist
orica de los sistemas RFID. Tomada de Delgadillo y
Ortiz (2011) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Costo de componentes de un sistema RFID. Tomada de anexo B.1
Costos comerciales de microcontroladores y modulo RFID . . . . .
Descripci
on de pines para comunicacion serial con C. Tomada de
c
NXP
Semiconductors (2014) . . . . . . . . . . . . . . . . . . . .
Tabla comparativa de los modelos del Raspberry Pi. Informacion
tomada de Raspberry-Pi-Foundation (2014) . . . . . . . . . . . . .
Descripci
on de pines del Raspberry Pi para comunicacion serial SPI.
Descripci
on de pines del Raspberry Pi para la comunicacion con el
teclado alfanumerico. . . . . . . . . . . . . . . . . . . . . . . . . . .
Descripci
on de la conexion de los pines del Raspberry Pi con los
dem
as componentes. . . . . . . . . . . . . . . . . . . . . . . . . . .
Costos del prototipo final . . . . . . . . . . . . . . . . . . . . . . .

xi

7
14
18

21
23
25
30
30
32

Nomenclatura
C

Microcontrolador.

EIE

Escuela de Ingeniera Electrica.

F AT

Tabla de asignacion de archivos, por sus siglas en ingles,


File Allocation Table.

GP IO

Pines entrada/salida de proposito general.

LED

Diodo emisor de luz.

M OSI

Por sus siglas en ingles, Master Out-Salve In.

M ISO

Por sus siglas en ingles, Master In-Slave Out.

NFC

Por sus siglas en ingles, Near-Field Communication.

N OOBS

Por sus siglas en ingles, New Out of Box Software.

RF ID

Identificacion por radiofrecuencia.

RP i

Raspberry Pi.

U SB

Bus Universal en Serie.

SD

Formato de tarjetas de memoria, Secure Digital.

S.O.

Sistema Operativo.

SP I

Interfaz de perifericos en serie.

xiii

Introducci
on

1.1

Descripci
on General

El presente proyecto consiste en la realizacion de un prototipo RFID (Identificaci


on por radiofrecuencia, por sus siglas en ingles) para el control y monitoreo
de las entradas y salidas en las puertas de acceso. Dicho prototipo posee una
alarma remota la cual se accionara en caso de que exista un control no autorizado. El
area de acci
on sera la Escuela de Ingeniera Electrica, dado que ah es
donde nace la necesidad del monitorio y control de los accesos a los diferentes
laboratorios que posee dicha escuela.
Inicialmente se presenta una descripcion de los sistemas de identificacion
por radiofrecuencia (RFID) y su aplicacion a los controles de acceso haciendo
un enfoque en los sistemas de bajo costo, entre ellos los que utilizan Raspberry
Pi. A su vez se expone la tematica del monitoreo remoto de puertas de acceso,
como una necesidad existente en la mayora de instituciones para el control y
salvaguardo de equipo y conocimiento.
Seg
un Herrera et al. (2009) en la actualidad, los sistemas de informaci
on
implementados con tecnologa RFID se utilizan ampliamente para catalogar y
controlar recursos, esto hace posible encontrar una variedad de sistemas comerciales e inclusive caseros relacionados con esta tecnologa. En este informe
se presentan algunos de ellos utilizados en el control de accesos y se describen sus caractersticas principales, entre ellas: costo, materiales, accesibilidad,
disponibilidad y lugar de aplicacion. Esto u
ltimo con la finalidad de tener los
argumentos necesarios para el desarrollo del prototipo acorde a las necesidades
y posibilidades de la Escuela de Ingeniera Electrica.
A partir de la investigacion realizada, se presenta el dise
no de un prototipo
de bajo costo con lector RFID, teclado alfanumerico, buzzer, sensor magnetico
y alarma remota va web, que permita monitorear las entradas y salidas por
una puerta de acceso. Por u
ltimo se desarrolla la implementacion e instalacion
de este prototipo en una puerta de acceso brindado a su vez indicaciones de
posibles mejoras a este como lo sera el agregar llavn electrico, posibilidad de
apertura remota y vigilancia nocturna.
1

1 Introduccion

1.2

Justificaci
on

Este proyecto nace a partir de la necesidad que poseen los laboratorios de la


Escuela de Ingeniera Electrica de controlar el acceso a estos. La existencia
de costoso equipo detr
as de las puertas de estos hace necesario el saber quien
entra y quien sale. La falta de versatilidad para el ingreso a los laboratorios
es otra de las razones que fundamentan la realizacion de este proyecto, dado
que en algunos laboratorios se depende de la comunicacion entre secretara y
alguno de los conserjes para el poder ingresar a los laboratorios.
A su vez este proyecto pretende ser una base para el mejoramiento de la
seguridad y la accesibilidad a los diferentes laboratorios de la Escuela, de tal
manera que las personas que tienen permiso para ingreso lo puedan hacer de
forma sencilla y en el caso de que existan ingresos no autorizados, la secretara
sea informada de este evento para la toma de acciones pertinentes y a su vez
sea activada una alarma.
La utilizaci
on de la tecnologa RFID para el dise
no e implementacion de
este prototipo se debe a la facilidad que este sistema ofrece para la obtencion
y retenci
on de datos de manera eficiente y segura (Herrera et al., 2009). Seg
un
Delgadillo y Ortiz (2011) la tecnologa RFID tiene mas de 50 a
nos, pero es
gracias al desarrollo tecnol
ogico que se ha disminuido su costo e incrementado
su aplicaci
on en diferentes sectores.

1.3

Alcance del proyecto y limitaciones

Este proyecto contempla:


La descripci
on te
orica de los sistemas RFID y su aplicacion en los controles de acceso, as como una investigacion del monitoreo remoto de
puertas de acceso.
El dise
no e implementaci
on de un prototipo de bajo costo y su instalacion
en una puerta de acceso de la Escuela de Ingeniera Electrica como una
prueba piloto.
Este proyecto no contempla:
La apertura remota ni la vigilancia nocturna, pero se proponen las mejoras al prototipo para que lo permitan.
La instalaci
on de m
as sistemas en el edificio de la Escuela de Ingeniera
pero se crean las bases suficientes para su futura aplicacion en n puertas
de acceso.

1.4. Objetivos

1.4

Objetivos

Objetivo general
Desarrollar un prototipo de bajo costo, RFID y con alarma remota que permita
monitorear las entradas y salidas por puertas de acceso.

Objetivos especficos
Para el desarrollo de este proyecto se establecieron los siguientes objetivos:
Definir que es RFID y como se aplica en los controles de acceso.
Definir que es el monitoreo remoto de puertas de acceso.
Investigar sobre sistemas RFID comerciales y caseros que permitan monitorear puertas de acceso.
Listar los precios de compra o inversion de materiales de los sistemas
estudiados.
Dise
nar e implementar un prototipo de bajo costo, con lector RFID,
teclado alfanumerico, buzzer, sensor magnetico y alarma remota via web,
que permita monitorear las entradas y salidas por una puerta de acceso.
Instalar el prototipo en una puerta de acceso y el monitor remoto en una
computadora para una prueba piloto.
Proponer mejoras al prototipo que permitan un llavn electrico, apertura
remota y vigilancia nocturna.

1.5

Metodologa

Este proyecto se constituyo basicamente de cinco etapas: investigacion, dise


no, implementaci
on, instalacion y mejoras. Incluyo los siguientes pasos y
procedimientos:
1. Se realiz
o una investigacion bibliografica sobre la aplicacion de la tecnologa RFID en el control de accesos y el monitoreo remoto de puertas
de acceso. Esta investigacion se enfoco en artculos tecnicos y tesis de
grado.
2. Se investig
o sobre diferentes sistemas RFID comerciales e incluso caseros
relacionados con el monitoreo de puertas de acceso. Ademas de listo las
caractersticas y precios de algunos de estos sistemas con la finalidad

1 Introduccion
de obtener informaci
on suficiente para la eleccion de las caractersticas
necesarias del prototipo dise
nado.
3. A partir de la informaci
on obtenida en la seccion anterior, se dise
no e
implement
o un prototipo de bajo costo que reuniera las caractersticas
deseadas para el monitoreo de una puerta de acceso en el area de accion
indicada.
4. Se instal
o el prototipo dise
nado en una de las puertas de acceso y se
realiz
o una prueba piloto para el monitoreo de esta. Se proponen mejoras
al prototipo.

Marco te
orico

Los sistemas de identificacion automatica son parte integral de los sistemas


de seguridad, cada da la aplicacion de esta tecnologa en sectores como la
industria de servicios, logstica, industria y manufactura se vuelve mas popular. Seg
un Finkenzeller (2010) los procedimientos de identificacion automatica
brindan la posibilidad de obtener informacion sobre personas y objetos, incluso
facilita el manejo de productos en transito. Entre los sistemas de identificacion
autom
atica m
as importantes estan: codigos de barras, reconocimiento optico
de caracteres, biometricos, tarjetas inteligentes y sistemas RFID (ver figura
2.1).

2.1

Sistemas RFID

La tecnologa de identificacion por radiofrecuencia (RFID por sus siglas en


ingles) constituye uno de los sistemas de identificacion automatica mas importantes en la actualidad. Seg
un Herrera et al. (2009) la tecnologa RFID
se presenta como una opcion para la identificacion automatica, similar a la
lectura de c
odigos de barras. A pesar de que hasta hace pocos a
nos atras se ha
popularizado su utilizacion, RFID nace ya hace varias decadas, y se presenta

Figura 2.1: Sistemas de identificacion automatica. Tomada de Finkenzeller


(2010)

2 Marco teorico

como una de las tecnologas del futuro, desplazando ya inclusive en algunos


sectores a los c
odigos de barras.
Los sistemas de identificaci
on por radiofrecuencia presentan diversas ventajas respecto a otros sistemas de identificacion, entre ellas posibilidad de
almacenar m
as informaci
on y de tratar cada objeto o producto como u
nico.
RFID constituye entonces un sistema de almacenamiento y recuperacion de
datos remoto que usa dispositivos denominados etiquetas, transpondedores o
tags, donde el prop
osito fundamental del RFID es transmitir la identidad de
un objeto mediante ondas de radio colocada en una etiqueta que puede ser
adherida a un producto, animal o persona (Godinez, 2008).

Historia
En la actualidad la tecnologa RFID ha tomado fuerza como sistema de identificacion autom
atica debido principalmente a la reduccion notoria en el precio
y a las numerosas ventajas que ofrece respecto a otros sistemas de identificacion. Sin embargo, esto no siempre ha sido as, de hecho la tecnologa RFID
nace hace m
as de cincuenta a
nos y con aplicaciones diferentes a las de hoy en
da.
Seg
un Landt (2005), los a
nos 50 fueron una era de exploraci
on de las
tecnicas RFID siguiendo la evoluci
on tecnica en radio y radar de las decadas de los a
nos 30 y 40. Esta tecnologa tuvo una importante aplicacion en
la Segunda Guerra Mundial, donde numerosas tecnologas relacionadas con
RFID fueron exploradas como los sistemas transpondedores de largo alcance
identificaci
on, amigo o enemigo (IFF, por sus siglas en ingles) de aeronaves
(Landt, 2005).
Los a
nos 60 se convirtieron en el preludio para la investigacion de los sistemas RFID que se dara en los a
nos posteriores, en esta decada la investigacion
de R.F. Harrington, plasmada en el artculo Theory of Loaded Scatterers, el
cual describa la teora electromagnetica detras de la tecnologa RFID, constituyo un avance de suma importancia. Siguiendo con Landt (2005), en los a
nos
70 desarrolladores, inventores, compa
nas, instituciones academicas y laboratorios de gobiernos estuvieron activamente trabajando en RFID brindando
notables avances en este campo. A partir de los a
nos 80 y 90, la implementacion y el uso comercial de la tecnologa RFID se convertio en algo cada vez
mas com
un, la tabla 2.1 muestra un resumen historico de la tecnologa RFID.

Componentes
Los sistemas RFID est
an compuestos basicamente de dos componentes, el
transponder (transmite y recibe) localizado dentro de una etiqueta o tarjeta
y un dispositivo lector RFID. Sin embargo, algunos autores mencionan tres

2.1. Sistemas RFID

Cuadro 2.1: Rese


na historica de los sistemas RFID. Tomada de Delgadillo y
Ortiz (2011)

Figura 2.2: Representacion de un sistema RFID. Tomada de Herrera et al.


(2009)

componentes b
asicos en los sistemas RFID a
nadiendo a los dos anteriores una
base de datos, esto debido a que seg
un su argumento un sistema completo
de RFID debe poseer un sistema de almacenamiento para accesar y consultar
datos remotos a traves de proximidad (Herrera et al., 2009). La figura 2.2
corresponde a una representacion basica de un sistema RFID.
Las tarjetas est
an compuestas por una antena y un chip, como se puede

observar en la figura 2.3. Estas


son las encargadas de almacenar la identificaci
on propia de cada objeto o persona y se pueden clasificar en pasivas o
activas, esto dependiendo de si necesitan alimentacion interna o no:

2 Marco teorico

Figura 2.3: Representaci


on de una tarjeta RFID. Tomada de Finkenzeller
(2010)

Pasiva: no requieren alimentacion interna, poseen un menor tama


no y
menor costo. Su principal desventaja respecto a las tarjetas activas es su
necesidad de cercana con el lector para que este u
ltimo pueda inducir
un campo electrom
agnetico con la finalidad de brindar la alimentacion
suficientes para su lectura. A traves de la antena del transponder, el
campo magnetico o electromagnetico del lector provee toda la energa
requerida para operar el transponder (Finkenzeller, 2010). Siguiendo con
Finkenzeller (2010) para que se pueda transmitir informacion del transponder al lector, el campo del lector puede ser modulado, es por esto
que este sistema funciona mediante la tecnica de modulacion digital por
frecuencia (FSK) (Herrera et al., 2009).
Activa: a diferencia de la pasivas, las tarjetas activas necesitan de alimentaci
on interna para su funcionamento, esto se logra principalmente
mediante bateras o celdas solares. Las ventajas que ofrece el tener alimentaci
on interna dentro de las etiquetas son basicamente mayor capacidad de almacenamiento dentro de estas y la posibilidad de aumentar
el rango de comunicaci
on entre transponder y lector. Seg
un Finkenzeller
(2010) la condici
on de alimentacion interna puede sustancialmente incrementar el rango de comunicacion si el transponder es capaz de detectar
la se
nal del lector m
as debil.
El lector RFID consiste en un dispositivo electronico encargado de leer
la informaci
on proveniente de la tarjeta. Como se menciono anteriormente,
el lector RFID se encarga de generar un campo electromagnetico a modo
de interrogaci
on para verificar los datos dentro del transponder, este campo
electromagnetico genera una corriente inducida dentro del circuito interno
de la tarjeta para que esta sea capaz transmitir los datos al lector. De esta
manera, cuando el lector hace una peticion de datos, la tarjeta responde a
dicha solicitud (Herrera et al., 2009). En el mercado existen lectores de tipo

2.1. Sistemas RFID

Figura 2.4: Lectores RFID de Motorola Solutions. A la izquierda un lector fijo


y a la derecha un lector movil. Tomada de Motorola Solutions (2014)

Figura 2.5: Lector RFID Mifare RFID-RC522. Tomada de Deal Extreme


(2014)

fijo y m
oviles dependiendo de la aplicacion y necesidad requerida, como se
observa en la figura 2.4. Ademas existen lectores para la implementacion de
sistemas caseros como el de la figura 2.5.
Los datos obtenidos por el lector RFID pueden ser almacenados y accesados si se utiliza una base de datos, es por esto que diversas ocasiones se
considera esta como uno de los componente basicos de los sistema RFID (ver
figura 2.2). Despues de haber definido los elementos basicos que componen un
sistema RFID se puede entender su forma de funcionamiento general:
El lector RFID enva una solicitud de respuesta a la tarjeta o transponder, esta petici
on viaja en forma de campo electromagnetico que permite
inducir una corriente en tarjetas que se encuentren al alcance.
La tarjeta ser
a energizada si se encuentra al alcance del campo electromagnetico y brindara una respuesta, este alcance dependera del tipo de
tarjeta (pasiva o activa). La respuesta incluye informacion u
nica de cada
transponder.
Si el sistema cuenta con una base de datos, la informacion recolectada por
el lector puede ser almacenada y posteriormente accesada dependiendo
de la aplicaci
on.

10

2 Marco teorico

Aplicaciones
La aparici
on de la tecnologa RFID hace ya mas de cincuenta a
nos ha permitido su aplicaci
on en diversos sectores. Entre las aplicaciones mas comunes de
RFID est
a su uso como tarjetas inteligentes, seg
un Finkenzeller (2010) esto fue
posible desde la decada de los a
nos 70 cuando debido al rapido desarrollo de la
tecnologa de semiconductores fue posible ingresar la memoria de datos y una
logica de protecci
on en un u
nico chip de silicio. En la actualidad la utilizacion
de estos sistemas se ha incrementado debido a los avances en la tecnologa y
la disminuci
on del costo de los sistemas con RFID, entre las aplicaciones mas
importantes est
an: clasificaci
on de productos de un supermercado, la autentificaci
on de documentos, la identificacion de animales en granjas, acceso y
control de vehculos, seguridad para medicamentos controlados y en el sector
del consumo y del transporte (Herrera et al., 2009).
Transporte P
ublico: de acuerdo con Finkenzeller (2010) el transporte
p
ublico es una de las aplicaciones donde existe el mas grande potencial
para el uso de sistemas RFID, particularmente las tarjetas inteligentes sin contacto. Esta aplicacion es encontrada principalmente en pases
desarrolados, la cual naci
o con el objetivo de agilizar el acceso a las
estaciones y desaparecer paulatinamente el uso del boleto de papel (Delgadillo y Ortiz, 2011).
Clasificaci
on de productos en supermercados: en la actualidad
grandes compa
nas est
an haciendo uso de la tecnologa RFID en la logstica de distribuci
on y transporte. Seg
un Delgadillo y Ortiz (2011) esta
aplicaci
on nace con el objetivo de aumentar los margenes de utilidad y
mejorar el servicio a clientes.
Sistemas de pago sin contacto: la tecnologa RFID esta siendo utilizada para la compra y pago de bienes y servicios mediante el uso de
tarjetas inteligentes sin contacto. Organizaciones globales de tarjetas de
c MasterCard
c y American Express
c ofrecen
credito como Visa ,
este tipo de tarjetas (Finkenzeller, 2010).

Ambito
de la salud: en el area de la medicina y la farmacia la tecnologa RFID ha empezado a jugar un papel de suma importancia. El sector
farmaceutico en gran parte favorecido por la Food and Drug Administration (FDA), que recomienda adoptar esta tecnologa para prevenir las
falsificaciones (Portillo et al., 2007). Tambien en el area de medicina se
puede destacar el uso de los sistemas RFID debido a las ventajas que
ofrece en relaci
on con la identificacion de productos y personas, una de
las ventajas indicadas por Finkenzeller (2010) en la medicina humana es

2.2. RFID aplicado al control de accesos

11

la habilidad que poseen los transponders pasivos de funcionar de forma


confiable sin la necesidad de alimentacion interna propia.
Adicionalmente existen otras aplicaciones interesantes de los sistemas RFID,
en el campo de la automatizacion industrial, en la identificacion de contenedores, en la identificaci
on de animales y otras. En el presente proyecto, se tratara
la aplicaci
on de los sistemas RFID en el control de accesos.

2.2

RFID aplicado al control de accesos

La aplicaci
on del RFID en el control de accesos es una de las mas interesantes
y con m
as auge en la actualidad, seg
un Delgadillo y Ortiz (2011) actualmente
la tecnologa RFID es aplicada para controlar la entrada en zonas de acceso
restringido, laboratorios, escuelas, bodegas, entre otros. El presente proyecto
se basa en la utilizaci
on de la tecnologa de la RFID para el monitoreo de
puertas de acceso, por tanto el definir esta aplicacion propia de los sistemas
de identificaci
on por radiofrecuencia es de suma importancia.
Las ventajas que ofrecen los sistemas RFID con respecto a otros sistemas
de identificaci
on automatica hace posible su aplicacion en el control de accesos. De acuerdo con Siegel et al. (2007) este tipo de sistemas permiten el
acceso a recursos fsicos mediante el uso de tarjetas, indicadores biometricos
o combinaci
on de llaves. El objetivo del control de accesos no es impedir el
acceso, es controlarlo. Este control es posible llevarlo a cabo mediante sistemas
RFID dado su capacidad para la identificacion u
nica de objetos y personas.
Diferentes sistemas de tarjetas para el control de accesos han sido utilizado desde hace ya cierto tiempo. Inicialmente fueron las tarjetas perforadas,
luego sistemas con c
odigo de barras y tarjetas de banda magnetica (Finkenzeller, 2010). Sin embargo, los sistemas RFID ofrecen ventajas respecto a las
mencionados anteriormente debido a su tecnologa sin contacto. Siguiendo con
Finkenzeller (2010), una gran ventaja de los sistemas de control de accesos sin
contacto es que el lector es libre de mantenimiento y este no es influenciado
por polvo, suciedad o humedad. En general los primeros sistemas de tarjeta
para el acceso deben ser insertados en el lector de forma correcta para su
lectura, lo que consiste en una gran desventaja respecto a los sistemas RFID.
Entonces en terminos generales los sistemas RFID pueden ser utilizados
para el control de acceso en oficinas, instituciones, empresas, cuartos de habitaci
on, entre otros. Una representacion de esta aplicacion se puede observar
en la figura 2.6.
Los sistemas de control de acceso pueden dividirse en dos grandes categoras (Finkenzeller, 2010):

12

2 Marco teorico

Figura 2.6: Aplicaci


on de los Sistemas RFID al control de accesos. Tomada de
GAO RFID Inc (2014)

Sistemas online: como su nombre lo indica estos sistemas estan conectados a la red y a su vez est
an conectados a una computadora central que
posee la base de datos de los posibles accesos. De acuerdo con Finkenzeller (2010), los sistemas online tienden a ser usados donde la autorizacion
de acceso de un largo n
umero de personas debe ser revisado en pocas
entradas.
Sistemas offline: son frecuentes sobre todo en situaciones donde hay
muchos cuartos individuales, a los cuales pocas personas tienen acceso
Finkenzeller (2010). En este caso estos sistemas no se encuentran conectados a la red a diferencia de los sistemas anteriores, entonces cada
terminal guarda su propia lista de accesos autorizados.

Monitoreo Remoto de Puertas de Acceso


La importancia en el resguardo de los recursos fsicos e intelectuales que se
encuentran detr
as de las puertas de acceso hacen necesario el monitoreo remoto de ellas, la seguridad es siempre un aspecto a considerar, indistintamente
en el lugar al que se haga referencia, ya sea trabajo, casa, oficina o universidad. Siguiendo a Sahbudin et al. (2003) desde que las puertas son la principal
entrada a nuestra casa, compa
na o cualquier tipo de edificio, es que se hace
recomendado un fiable sistema de seguridad de puertas, especialmente dise
nado.
El monitoreo remoto se vuelve entonces, parte fundamental de los sistemas
de seguridad fsicos y un compa
nero indispensable en el control de accesos.
Seg
un Peijiang y Xuehua (2008), el sistema de monitoreo remoto es un efectivo
metodo para la obtenci
on de informacion, que puede ser analizada, transmitida
y administrada. Es por esto que la combinacion de dispositivos de control de
accesos como los sistemas RFID junto con las ventajas que ofrece el monitoreo

2.3. Sistemas RFID comerciales y caseros

13

remoto, permiten el dise


no y la obtencion de un efectivo sistema de seguridad
fsico en puertas de acceso (Bowers, 2007).
Los sistemas de control de accesos fsico deben cumplir con ciertas funciones dentro de un sistema de seguridad, de acuerdo con Bowers (2007) estas
son:
Disuasi
on: la presencia de un lector de tarjetas puede disuadir al penetrador en potencia.
Prevenci
on: el sistema permitira a la puerta de acceso abrirse solo a las
personas autorizadas.
Detecci
on: el sistema debera sonar una alarma si la entrada es forzada
o existe un acceso no autorizado.
Detenci
on: el sistema debera proveer una lista de posibles sospechosos
si se cree que fue un empleado de la institucion.
De acuerdo con Bowers (2007), todos los sistemas de control usan tres tecnicas b
asicas para controlar la entrada a traves de una puerta. Estas tecnicas
han sido descritas como: algo que una persona sabe, algo que una persona
tiene y algo que describe a una persona o esa persona hace. Siguiendo con
Bowers (2007), fsicamente estos tres metodos de seguridad son: dispositivos
con c
odigo almacenado, sistemas de clave portable y sistemas de atributo fsico. Estas tecnicas se pueden extrapolar al presente proyecto con la finalidad
de obtener un prototipo de RFID para el monitoreo de puertas de acceso eficiente, que cumpla con las necesidades principales de un sistema de seguridad
en el control de accesos.

2.3

Sistemas RFID comerciales y caseros

En la actualidad existen numerosas empresas e instituciones educativas dedicadas al dise


no e investigacion de la tecnologa RFID en diversas aplicaciones.
Para el presente proyecto la aplicacion de interes es el control de accesos, por
tanto se presentan algunos ejemplos de sistemas comerciales y caseros.

Sistemas Comerciales
Algunas empresas reconocidas fabricantes de sistemas RFID aplicados al control de accesos son:
HID: RFID y tecnologas sin contacto de HID Global lideran el camino para que socios estrategicos puedan utilizar la tecnologa Genuine

14

2 Marco teorico
HID para crear soluciones innovadoras que permiten a los usuarios finales hacer algo m
as que abrir la puerta (HID, 2014). Siguiendo con HID
(2014), HID Global ofrece la mas amplia gama de lectores, tarjetas, controladores y software de la industria para crear, administrar y utilizar
identidades seguras. La figura 2.7 corresponde a diferentes componentes
(lectores y tarjetas) de marca HID. En Costa Rica, esta tecnologa es
ofrecida por la empresa Accesos Autom
aticos, donde el costo de un sistema general de control de accesos se acerca al millon de colones.
C
odigo
E941600
IRC-2000
RBH-SR-2400
PROXCARDII

Componente
Cerradura electromagnetica
Panel de control + Software
Lector de Proximidad
Tarjeta de proximidad standard

Costo aproximado (colones)


68000
375000
58000
2500

Cuadro 2.2: Costo de componentes de un sistema RFID. Tomada de anexo


B.1

La tabla 2.2 muestra el costo de algunos componentes del sistema con


el fin de brindar una idea general de su costo, la descripcion detallada
de los precios se muestra en la cotizacion adjunta en anexos, ver anexo
B.1.
SecuraKey: una empresa lder en la industria del control de accesos

que nace hace m


as de 40 a
nos. Esta
ha trabajado en la manufactura de
sistemas de control de accesos multipuerta, incluyendo paneles de control de accesos, software, lectores de tarjetas de acceso, tarjeta, llaveros
y accesorios (SecuraKey, 2014a). Una empresa norteamericana no tan
conocida en Costa Rica, pero dedicada durante una gran cantidad de
a
nos a la manufactura de productos electronicos aplicados al control de
accesos y entre estos el uso de la tecnologa RFID. Las figuras 2.8a y
2.8b muestran un sistema RFID y un lector RFID de la empresa anc la cual es una marca
tes mencionado, estos poseen la marca e*Tag ,
registrada de esta empresa.
SkyRFID Inc: es una empresa privada canadiense que empezo su labor
en 1983, primero incursionando en la tecnologa de los codigos de barras
hasta llegar a la tecnologa RFID. Seg
un SkyRFID (2014a), SkyRFID
Inc es un proveedor mundial lder de hardware RFID, soluciones y consultora tecnica. Algunos lectores RFID de esta empresa pionera en el
uso de la tecnologa RFID en el control de accesos se pueden observar
en las figuras 2.9a y 2.9b.

2.3. Sistemas RFID comerciales y caseros

15

Figura 2.7: Sistemas RFID para el control de accesos de la compa


na HID.
Tomada de HID (2014)

(b) Lector RFID


(a) Sistema RFID

Figura 2.8: Sistemas RFID de la empresa SecuraKey. Tomada de SecuraKey


(2014b)

Sistemas Caseros
Adem
as de la gran variedad de sistemas comerciales existentes, tambien se
pueden describir los sistemas que han sido dise
nados en centros educativos o
incluso en hogares, a los cuales se les denomina como caseros. Estos sistemas
com
unmente se dise
nan y construyen mediante microcontroladores que utilizan hardware de bajo costo y software de codigo libre. Su objetivo primordial

16

2 Marco teorico

(a)

(b)

Figura 2.9: Lectores RFID de la empresa SkyRFID Inc. Tomada de SkyRFID


(2014b)

es la investigaci
on de la tecnologa RFID y en ocasiones para satisfacer ciertas
necesidades de instituciones o microempresas donde se desarrollan.
Sistema de control de acceso utilizando un microcontrolador
PIC: en su tesis de graduacion Delgadillo y Ortiz (2011) describen el
dise
no de un sistema de control de acceso denominada Dise
no de un
sistema de control de acceso mediante tecnologa RFID con implementaci
on de un servidor web embebido en un PIC. La figura 2.10 corresponde
a una fotografa del sistema implementado por estos ingenieros.

Figura 2.10: Sistema RFID casero. Tomada de Delgadillo y Ortiz (2011)


El sistema utiliz
o un lector ID-20MFIA fabricado por la empresa IDInnovations y un microcontrolador PIC, con un valor total aproximado
del proyecto de $2302 pesos mexicanos, ver Delgadillo y Ortiz (2011).
Entonces haciendo una conversion a dolares americanos se tiene un valor
aproximado de $175, eso s se debe considerar que el desarrollo de este
proyecto se llev
o a cabo en el a
no 2011.
Otros sistemas de control de acceso utilizando microcontroladores de bajo costo

2.3. Sistemas RFID comerciales y caseros

17

Adem
as del proyecto antes mencionado basado en un microcontrolador
(C) PIC, existen otros proyectos que utilizan microcontroladores de
bajo costo como lo es el Arduino y el Raspberry Pi, ver figura 2.11a y
2.11b respectivamente. Seg
un Arduino (2014) estos microcontroladores
utilizan una plataforma electronica de codigo abierto basado en hardware
y software f
acil de usar.

(a) Arduino. Tomada de Arduino (2014)

(b) Raspberry Pi. Tomada de Raspberry-PiFoundation (2014)

Figura 2.11: Microcontroladores de bajo costo.


Entre las ventajas que ofrecen estos microcontroladores en el desarrollo
de sistemas de control de acceso esta la utilizacion de software de codigo
libre y la existencia en el mercado de modulos (lector y tags) RFID de
bajo costo compatible con ellos, lo que minimiza a
un mas el coste de
implementar un sistema de este tipo. Un ejemplo de estos modulos es el
Mifare RC522 que se puede observar en la figura 2.12, compatible con
Arduino y Raspberry Pi.
En la tabla 2.3 se describen algunos de los costos1 de estos microcontroladores y del m
odulo RFID antes mencionado.

Tomados de http://www.amazon.com

18

2 Marco teorico

Figura 2.12: M
odulo Mifare RC522. Tomada de Amazon (2014c)

Componente
Mifare RC522
Raspberry Pi
Arduino
PIC

Costo ($)
$8.47
$38.69
$23.11
$15.40

Cuadro 2.3: Costos comerciales de microcontroladores y modulo RFID

3 Dise
no e implementaci
on de un
prototipo con Raspberry Pi
En el presente captulo se describe el dise
no e implementacion de un sistema
de control de acceso RFID (prototipo) mediante un microcontrolador Raspberry Pi. Adem
as del uso de este C, se utiliza un modulo Mifare RC522
(lector y tags RFID) compatible con el microcontrolador capaz de realizar la
identificaci
on de personas u objetos. Como se menciono en el captulo 2, un
sistema de control de accesos esta compuesto basicamente por lector RFID,
tarjetas (tags) y un sistema de computo. Una representacion grafica del sistema esperado se puede ver en la figura 3.1.

Figura 3.1: Sistema esperado. Tomada de Delgadillo y Ortiz (2011)

En este caso el uso del C Raspberry Pi junto con el lector RFID Mifare RC522 deben cumplir la funcion del modulo RFID con Servidor Web de la
figura 3.1, adem
as las tarjetas RFID de cada usuario seran implementadas mediante los tags del m
odulo Mifare antes mencionado. La figura 3.2 correponde
al esquema del sistema dise
nado.
Por una parte dentro del esquema se encuentra la logica del sistema o software compuesto por el sistema operativo Raspbian, la base de datos, servidor
y conexi
on a la web; esta seccion se describe en el captulo siguiente. Por otra
parte se encuentran los componentes fsicos o hardware del sistema: tarjeta,
lector, C, teclado alfanumerico y salidas e indicadores. Dado el alcance del
presente proyecto estas salidas e indicadores se limitan a zumbadores o buzzers,
LEDs y un sensor magnetico. Los descripcion de estos componentes fsicos y
su conexi
on se presenta a continuacion:
19

20

3 Dise
no e implementacion de un prototipo con Raspberry Pi

Figura 3.2: Esquema del sistema dise


nado.

3.1

M
odulo Mifare RC522

Para lograr la lectura de las tarjetas o tags se utiliza el lector Mifare RC522 o
MFRC522 fabricado por NXP Semiconductors. De acuerdo con su fabricante
el MFRC522 es un lector/escritor altamente integrado para comunicaciones
c
sin contacto a 13.56 MHz ( NXP
Semiconductors, 2014). Este componente
es compatible con el est
andar internacional ISO/IEC 14443, lo que le habilita
para realizar comunicaci
on con tarjetas Mifare basadas en el mismo estanc
dar. Siguiendo con NXP
Semiconductors (2014), el transmisor interno del
MFRC522 es capaz de manejar una antena lectora/escritora dise
nada para
comunicarse con tarjetas y transponders ISO/IEC 14443 A/MIFARE sin la
necesidad de utilizar circuitera activa adicional.
El lector MFRC522 soporta tres protocolos de comunicacion:
Protocolo SPI (Serial Peripheral Interface)
Protocolo serial UART
Interfaz I2 C
Como se ver
a m
as adelante la comunicacion a utilizar entre el modulo
MFRC522 y el microcontrolador es del tipo SPI (Serial Peripheral Interface).
c
Siguiendo con el fabricante NXP
Semiconductors (2014), otras caractersticas y beneficios que brinda el uso del componente MFRC522 son:
Soporta ISO/IEC 14443 A/MIFARE
Distancia de operaci
on tpica en modo lectura/escritura hasta los 50mm
dependiendo del tama
no de la antena y sintonizacion.

3.1. M
odulo Mifare RC522

21

Figura 3.3: Configuracion de pines del integrado MFRC522. Tomada de


c
NXP
Semiconductors (2014)
Pin
6
24
29
30
31

Smbolo
NRSTPD
SDA
SCK
MOSI
MISO

Tipo2
I
I/O
I
I/O
I/O

Descripcion
Reset
bus serial I2C
reloj SPI serial
SPI master out, slave in
SPI master in, slave out

Cuadro 3.1: Descripci


on de pines para comunicacion serial con C. Tomada
c
de NXP
Semiconductors (2014)

Soporta diferentes interfaces de comunicacion


Temporizador programable
Fuente de poder de 2.5V a 3.3V
En la figura 3.4 se muestra un diagrama con la configuracion de pines
del MFRC522 y en la tabla 3.1 se muestra la descripcion de los pines de
importancia para la comunicacion SPI con el microcontrolador.
La tabla 3.1 s
olo describe los pines que se conectan con el C. Es importante aclarar que el componente MFRC522 se encuentra integrado dentro del
m
odulo lector/escritor RFID-RC522 lo que brinda las salidas adecuadas para
la conexi
on con el microcontrolador, ver figuras 3.5a y 3.5b .

22

3 Dise
no e implementacion de un prototipo con Raspberry Pi

Figura 3.4: Configuraci


on de pines del integrado MFRC522. Tomada de
c
NXP
Semiconductors (2014)

(a) M
odulo RFID-RC522

(b) NXP RC522

Figura 3.5: M
odulo RFID-RC522 con acercamiento al componente integrado
MFRC522.

3.2. Microcontrolador Raspberry Pi

3.2

23

Microcontrolador Raspberry Pi

Los requerimientos en cuanto a la utilizacion de hardware de bajo costo y


uso de software de c
odigo abierto, sumado a la necesidad de implementar un
sistema que cuente con una cantidad aceptable de puertos de entrada y salida, hacen que la balance se incline hacia los microcontroladores Raspberry
Pi. La ventaja principal que ofrece el Raspberry Pi respecto a otros microcontroladores, Arduino por ejemplo, es su posibilidad de funcionar como una
computadora si se le conectan los dispositivos externos necesarios (teclado,
mouse y pantalla).
De acuerdo con Raspberry-Pi-Foundation (2014),
El Raspberry Pi es un ordenador del tama
no de una tarjeta de
credito, de bajo costo que se conecta a un monitor de computadora
o TV y usa un rat
on y teclado est
andar.
Adem
as de funcionar como una computadora, el RPi puede ser configurado
como un servidor web, brinda facilidades para el manejo de base de datos
y posee el soporte de cualquier distribucion Linux. En la actualidad existen
cuatro modelos de Raspberry Pi, ellos son: modelo A, modelo B, modelo B+
y m
odulo computacional. La tabla 3.2 muestra las caractersticas y diferencias
entre cada uno de los modelos.
Tabla comparativa de los modelos del Raspberry Pi
Caracterstica
Modelo A
Modelo B
Modelo B+
Procesador ARM1176JZF-S ARM1176JZF-S ARM1176JZF-S
Velocidad CPU
700Mhz
700Mhz
700Mhz
Memoria RAM
256Mb
512Mb
512Mb
Puertos USB
1
2
4
Almacenamiento
Full SD
Full SD
Micro SD
Ethernet 10/100
No
Si
Si
HDMI
Si
Si
Si
Pines
26
26
40
GPIO
17
17
26
Alimentaci
on
300mA, 1.5W
700mA, 3.5W
650mA, 3W
Tama
no
85x56x15mm
85x56x15mm
85x56x15mm
Cuadro 3.2: Tabla comparativa de los modelos del Raspberry Pi. Informacion
tomada de Raspberry-Pi-Foundation (2014)
El presente proyecto se dise
na e implementa mediante con un modelo B+,
debido a la necesidad de utilizar al menos 19 GPIO para el manejo de los

24

3 Dise
no e implementacion de un prototipo con Raspberry Pi

componentes externos, como se describira mas adelante.

Figura 3.6: Configuraci


on de pines del Raspberry Pi modelo B+. Tomada de
Pinout (2014)

De la figura 3.6, es posible observar que el C Pi posee pines para alimentacion, pines a tierra y pines entrada/salida de proposito general (GPIO, por
sus siglas en ingles). El esquem
atico detallado de configuracion de pines de un
Raspberry Pi modelo B+ se puede ver en anexo B.2. Dado que la conexion
requerida con el m
odulo MFRC522 es mediante protocolo de comunicaciones
SPI, los pines a considerar son los descritos en la tabla 3.3.

3.3. Tarjetas o tags RFID


Pin
19
21
23
24
26

Smbolo
MOSI
MISO
SCLK
CE0
CE1

25
Descripcion
SPI master out, slave in
SPI master in, slave out
reloj
Select slave or master
Select master or slave

Cuadro 3.3: Descripci


on de pines del Raspberry Pi para comunicacion serial
SPI.

3.3

Tarjetas o tags RFID

Dado que el lector MFRC522 utiliza el estandar ISO/IEC 14443, las tarjetas
utilizadas tambien se basan en este estandar internacional. ISO/IEC 14443
titulado Identification cards - Proximity integrated circuit(s) cards, describe el
metodo de funcionamiento y los parametros de operacion de tarjetas inteligentes de acoplamiento por proximidad sin contacto (Finkenzeller, 2010). Entre
los par
ametros definidos por este estandar se encuentran los aspectos fsicos
de la tarjeta y su frecuencia de operacion. De acuerdo con Finkenzeller (2010),
las dimensiones correspondientes a este estandar son 85,72 54,03 0,76mm
y la frecuencia de operacion es de 13.56MHz.
Las tarjetas utilizadas son de la marca MIFARE de la compa
na NXP Semiconductor que junto con el lector MFRC522 completan un modulo RFID.
c
De acuerdo con el fabricante NXP
Semiconductors (2014) entre las caractersticas y beneficios de las tarjetas MIFARE se encuentran:
Transmisi
on de datos y suministro de energa sin contacto.
Frecuencia de operacion 13.56MHz.
Distancia de operacion hasta 100mm dependiendo de la antena.
Algoritmo de anticolision.
Uso de una EEPROM de 1kB
Diferentes aplicaciones, entre ellas manejo de accesos.
En la figura 3.7 muestra una de las tarjetas Mifare a utilizar. Otro dato
importante es que estas tarjetas utilizan la tecnologa NFC (near-field communication) ampliamente utilizada entre dispositivos moviles y telefonos inteligentes para establecer la comunicacion por radiofrecuencia, seg
un Finkenzeller

26

3 Dise
no e implementacion de un prototipo con Raspberry Pi

(2010) NFC es una tecnologa de comunicacion inalambrica en el rango de frecuencia de 13.56MHz.

Figura 3.7: Tarjeta RFID del modulo MIFARE RC522.

3.4

Conexi
on Raspberry PI-M
odulo MFRC522

Despues de haber analizado por separado todas las partes fsicas que forman
el prototipo de la figura 3.2, se logra con mayor facilidad la conexion del C
Raspberry Pi con el m
odulo MFRC522. Es importante recordar que el protocolo de comunicaci
on utilizado es el SPI (Serial Peripherical Interface), por
ello en las secciones anteriores se ha hecho hincapie en los pines de los componentes que permiten este protocolo de comunicacion. SPI es un protocolo de
4 lineas de se
nal, (Byte Paradigm, 2014):
Una se
nal de reloj nombrada SCLK, envada desde el bus maestro a
todos los esclavos; todas las se
nales SPI son sincronizadas con esta se
nal
de reloj.
Una se
nal de selecci
on de esclavo por cada esclavo, SSn, usado para
seleccionar el esclavo con el que el maestro se comunica.
Una lnea de datos desde el maestro a los esclavos, nombrada MOSI
(Master Out-Slave In)
Una lnea de datos desde los esclavos al maestro, nombrada MISO (Master In-Slave Out)
Una representaci
on gr
afica del protocolo de comunicacion SPI se puede
observar en la figura 3.8.

3.5. Conexi
on Raspberry PI-Teclado Alfanumerico

27

Figura 3.8: Protocolo de comunicacion SPI (Serial Peripherical Interface).


Tomada de Byte Paradigm (2014)

A partir de la informacion descrita anteriormente respecto al protocolo


de comunicaci
on SPI, del analisis de pines del C Raspberry Pi y del lector
MFRC522 se puede realizar una conexion adecuada del sistema. El diagrama
de la figura 3.9 muestra la comunicacion mediante SPI entre el C y el modulo
MFRC522. En el anexo B.3 se muestra una conexion mas ilustrativa entre los
pines de conexi
on del Raspberry Pi y el modulo MFRC522.

Figura 3.9: Diagrama de conexion de pines entre el Raspberry Pi y el modulo


MFRC522.

3.5

Conexi
on Raspberry PI-Teclado Alfanum
erico

Despues de haber realizado la conexion del lector MFRC522 con el C RPi, se


procede a agregar los demas componentes requeridos en el prototipo. El teclado
alfanumerico a utilizar consta de 16 botones con ocho pines de salida, esta

28

3 Dise
no e implementacion de un prototipo con Raspberry Pi

dise
nado para funcionar inicialmente con un Arduino, sin embargo, para este
caso es totalmente compatible con los pines de entrada y salida del Raspberry
Pi. Este teclado es de bajo costo1 ronda en promedio los $3, unos 1600 colones.
En la figura 3.10 se presenta el teclado alfan
umerico y es posible observar que
tiene 8 pines de salida los cuales van conectados al RPi para su respectiva
utilizaci
on.

Figura 3.10: Teclado Alfanumerico a utilizar. Tomada de Amazon (2014b)

El diagrama de conexi
on del teclado con los pines del RPi se muestra en
la figura 3.11, es importante describir que el teclado se comporta como una
matriz 4x4, donde las filas corresponden a entradas en los pines del RPi y las
columnas se configuran como salidas para as realizar una seleccion completa
de todos las posiciones de la matriz. En este caso las filas o entradas al RPi
llevan una resistencia de 1k por proteccion del microcontrolador. Las filas en
funcion de entrada se deben configurar en modo pull-up, como el circuito de
la figura 3.12, sin embargo esto se realiza en la implementacion del software
como se ver
a en el captulo siguiente.
La configuraci
on mostrada hace referencia a la numeracion de pines del
RPi por tablero no a la numeracion indicada mediante GPIO, por ejemplo
el pin 29 es el GPIO 5, esto es de importancia dado que una mala conexion
puede provocar un incorrecto funcionamiento del prototipo e inclusive da
nar
el C. El cuadro 3.4 posee una descripcion mas detallada de la conexion.

Dato tomado de http://www.amazon.com

3.6. Dise
no y conexi
on de los demas componentes del prototipo

29

Figura 3.11: Conexion del teclado alfanumerico al RPi.

Figura 3.12: Circuito pull-up. Esquematico dise


nado mediante el software
c
TINA .

3.6

Dise
no y conexi
on de los dem
as componentes
del prototipo

Por u
ltimo se realiza el dise
no y conexion de los demas componentes necesarios
en el prototipo, estos son: LEDs, Buzzers, sensor magnetico y resistencias. El
cuadro 3.5 muestra la descripcion detallada de los pines y su conexion.
Para la obtenci
on de los valores de resistencia de proteccion en los LEDs
se utiliza la siguiente ecuacion:
V cc VLED = I R

(3.1)

30

3 Dise
no e implementacion de un prototipo con Raspberry Pi
Pin
16
18
32
36
29
31
33
37

GPIO
23
24
12
16
5
6
13
26

Modo
Entrada
Entrada
Entrada
Entrada
Salida
Salida
Salida
Salida

Descripci
on
Fila de la matriz, pull-up
Fila de la matriz, pull-up
Fila de la matriz, pull-up
Fila de la matriz, pull-up
Columna de la matriz
Columna de la matriz
Columna de la matriz
Columna de la matriz

Cuadro 3.4: Descripci


on de pines del Raspberry Pi para la comunicacion con
el teclado alfanumerico.
Pin
5
7
11
13
15
40

GPIO
3
4
17
27
22
21

Modo
Salida
Entrada
Salida
Salida
Salida
Salida

Descripcion
Buzzer
Sensor Magnetico, pull-up
LED Verde y resistor
LED Rojo y resistor
Buzzer
Buzzer

Cuadro 3.5: Descripci


on de la conexion de los pines del Raspberry Pi con los
demas componentes.

Considerando que los pines del RPi brindan un valor de tension de 3.3V,
ademas que un valor de tensi
on promedio en los LEDs sera de VLED = 2,4V
y una corriente de 5mA de consumo para una luminosidad aceptable, entonces
se obtiene que:
3,3V 2,4 = 5mA R
R=

3,3V 2V
= 180
5mA

El diagrama de la figura 3.13, realizado con el software libre fritzing2 ,


muestra la conexi
on de los componentes con el RPi, de nuevo en este caso hay
que considerar que algunos pines se utilizan en modalidad de salida y otros
como entrada.
2

M
as informaci
on sobre Fritzing en http://fritzing.org/home/

3.7. Prototipo final

31

Figura 3.13: Conexi


on de los demas componentes en el prototipo. Esquematico
dise
nado mediante el software libre Fritzing.

3.7

Prototipo final

Despues de haber realizado la descripcion del hardware requerido, as como su


dise
no y conexi
on con los diferentes pines del C Raspberry Pi, se obtiene el
prototipo final mostrado en la figura 3.14.
En este caso por razones de trabajo en el laboratorio el prototipo se encuentra conectado con dispositivos externos como teclado USB, raton USB
y monitor, sin embargo para el funcionamiento final del sistema no es necesario mantenerlo conectado a estos dispositivos externos. En el anexo B.4 se
presenta un esquem
atico completo del prototipo implementado.
En la tabla 3.6 se muestran los costos3 de componentes del prototipo, lo
que brinda un costo aproximado final de $100.
Dado ya la finalizacion de la conexion del hardware y componentes electr
onicos necesarios en el captulo siguiente se describe el manejo del software
requerido.

Tomados de www.amazon.com

32

3 Dise
no e implementacion de un prototipo con Raspberry Pi

Figura 3.14: Prototipo final RFID.

Componente
Mifare RC522
Raspberry Pi
Teclado alfanumperico
Protoboard con set de cables
Buzzers
LEDs y resistencias

Costo aproximado ($)


$8.47
$38.69
$3
$39.51
$2
$2

Cuadro 3.6: Costos del prototipo final

4 Instalaci
on e implementaci
on del
software requerido
Despues de haber realizado el dise
no y conexion del hardware necesario en el
prototipo, en el presente captulo se describe la instalacion e implementacion
de la l
ogica del sistema y el software utilizado. En el captulo 3, especficamente
en la figura 3.2 se presento un esquematico con las tres grandes partes que
forman la l
ogica del sistema: el sistema operativo, la base de datos y el servidor
web. En el diagrama de la figura 4.1 se presenta una descripcion mas detallada
del software requerido.

Figura 4.1: Diagrama de software requerido.

4.1

Instalaci
on de Raspbian

De acuerdo con Raspberry-Pi-Foundation (2014) existen dos metodos para la


instalaci
on del sistema operativo Raspbian en el C, mediante la descarga de
NOOBS (N ew Out of Box Software) o a partir de la instalacion de imagenes.
Dado que la primera es la recomendada por Raspberry-Pi-Foundation (2014)
se utiliza este metodo, siguiendo con Raspberry-Pi-Foundation (2014) los pasos
son los siguientes:
Descargar el software NOOBS desde raspberrypi.org/downloads.
Formatear un tarjeta SD de al menos 4GB en formato FAT.
Descargar y extraer los archivos del archivo comprimido NOOBS.
Copiar los archivos extrados en la tarjeta SD.
33

34

4 Instalacion e implementacion del software requerido


En el primer arranque de NOOBS, la particion Recovery FAT sera reducida al mnimo y una lista de los sistemas operativos se desplegaran.
Elegir el sistema operativo Raspbian.
Esperar la finalizaci
on de la instalacion

Configuraci
on inicial
Al iniciar por primera vez el sistema operativo Raspbian, se desplegara la
ventana de configuraci
on raspi-config (ver figura 4.2), donde se deben indicar
las configuraciones b
asicas de cualquier S.O como la hora, fecha e idioma del
teclado.

Figura 4.2: Configuracion basica de Raspbian.


Despues de haber realizado la configuracion basica deseada se procede a
la pesta
na Advanced Options, donde se realizan las siguientes configuraciones
especficas necesarias para el sistema:
Habilitar SSH: este caso se debe habilitar la comunicacion ssh a traves
del puerto 22 si se desea la comunicacion con otras computadoras, como
se ver
a m
as adelante esto facilita de gran manera el trabajo sobre el C.
Habilitar SPI: para el desarrollo del prototipo y la comunicacion con
el lector es necesario habilitar este protocolo de comunicacion, como se
describi
o en la captulo 3 la comunicacion entre el lector y el RPi se lleva
a cabo mediante este protocolo de comunicacion.
Realizar un Update: como se observa en la figura, una de las pesta
nas
corresponde a la posibilidad de realizar un Update o actualizacion del

4.1. Instalaci
on de Raspbian

35

S.O., es importante realizar este proceso para el correcto funcionamiemto


del sistema. Esto se puede realizar en la terminal o consola de Raspbian
mediante el siguiente comando:
sudo apt-get update && sudo apt-get upgrade

Figura 4.3: Configuracion avanzada de Raspbian.


En el caso que se haya finalizado la configuracion y se necesite cambiar o
realizar alguna configuracion extra se puede ingresar de nuevo mediante
el siguiente comando en terminal:
sudo raspi-config

Despues de finalizado los procesos en la ventana de configuracion se debe


realizar un u
ltimo paso correspondiente a la configuracion inicial pero
este paso realiza en terminal:
Edici
on de archivo raspi-blacklist.conf : para finalizar con la habilitacion
de la comunicaci
on SPI del C con el lector RFID, se debe editar el
archivo antes mencionado, mediante el siguiente comando en terminal
abrimos el archivo:
sudo nano /etc/modprobe.d/raspi-blacklist.conf

36

4 Instalacion e implementacion del software requerido


Comentando la lnea correspondiente a SPI para as evitar su prohibicion
de uso, obtenemos un archivo como el que se muestra en la figura 4.4.

Figura 4.4: Configuracion del archivo raspi-blacklist.conf.

Python
El lenguaje de programaci
on Python viene preinstalado en el S.O. Raspbian,
sin embargo se deben realizar las descargas e instalacion de algunas libreras
y modulos para el correcto funcionamiento del prototipo, estas son:
MySQLdb: es un m
odulo que permite la comunicacion entre la base de
datos creada mediante el software de codigo abierto MySQL y el lenguaje
de programaci
on Python. Para su instalacion se debe escribir en consola
el siguiente comando (ver figura 4.5):
sudo apt-get install python-mysqldb

Figura 4.5: Instalacion de MySQLdb.

RPi-GPIO: m
odulo que permite la comunicacion y el manejo de los
GPIO del Raspberry Pi, esta instalacion se lleva a cabo mediante la
ejecuci
on en terminal del siguiente comando:
sudo apt-get install python-rpi.gpio

En la figura 4.6 se observa la instalacion en terminal1 .


1

Es posible que necesite la instalaci


on de python-dev

4.1. Instalaci
on de Raspbian

37

Figura 4.6: Instalacion de RPi-GPIO.

SPI-py2 . : librera de software libre que permite el manejo de los pines


para la comunicacion SPI a traves de python. Su descarga e instalacion
se llevan a cabo con los siguientes comandos en terminal:
sudo git clone https://github.com/lthiery/SPI-Py
sudo python setup.py install

MFRC5223 : es una extension de la librera de software libre en lenguaje


de programaci
on C para python, debido a que el lector MFRC522 fue
inicialmente dise
nado para Arduino, sin embargo a traves de los puertos
SPI del RPi se logra su correcto funcionamiento con este C. Su descarga
e instalaci
on se llevan a cabo mediante los siguientes comandos:
git clone https://github.com/mxgxw/MFRC522-python.git
sudo python MFRC522 install

Esta librera define una clase para interactuar con el modulo lector
MFRC522 a traves de python.

SSMTP
La herramienta SSMTP permite el envo de correos electronicos desde una
m
aquina local previamente configurada, a la computadora o en este caso al
2
3

Disponible en https://github.com/lthiery/SPI-Py
Disponible en https://github.com/mxgxw/MFRC522-python

38

4 Instalacion e implementacion del software requerido

C se le asigna una direcci


on de correo electronica propia del servidor de
c para su respectiva utilizacion. A partir de la configuracion
emails GMAIL
se pueden enviar correos a las direcciones deseadas a traves de scripts de
bash. Para su respectiva instalaci
on se utiliza la siguiente lnea de comando en
terminal:
sudo apt-get install ssmtp

Despues de su instalaci
on se procede con la configuracion en el archivo4
ssmtp.conf, se accede a este archivo mediante el siguiente comando:
sudo nano /etc/ssmtp/ssmtp.conf

En el archivo se debe indicar el correo asignado a la computadora local, en


este caso es pilab203@gmail.com, los correos electronicos de destino se indican
en el script a utilizar. El archivo de configuracion completo se puede observar
en el apendice A.1.

4.2

Servidor Web

En esta secci
on se describe la instalacion y configuracion del software requerido para obtener un servidor web mediante el RPi. Dado que el C utilizado
funciona como una computadora al instalarle el S.O. y realizar la configuracion
necesaria, se puede conseguir que tambien tenga la funcionalidad de un servidor y de esta manera sea accesado de manera remota para lograr el control de
accesos.

Apache
La aplicaci
on para servidor web a utilizar es Apache5 , el cual corresponde a
un software de c
odigo abierto multiplataformas para el manejo de servidores
web mediante HTTP (ver Apache (2014)). La instalacion en el RPi se lleva
mediante la siguiente lnea de comando en la terminal:
sudo apt-get install apache2
4

Una
explicaci
on
m
as
detallada
Configure-the-server/Install-ssmtp.html
5
Disponible en http://www.apache.org/

en

http://www.havetheknowhow.com/

4.2. Servidor Web

39

La imagen de la figura 4.7 muestra el proceso de instalacion en la terminal.


Mediante la direcci
on ip se puede accesar al dominio local a traves de un
navegador web para comprobar su correcto funcionamiento, esto se muestra
en la figura 4.8.

Figura 4.7: Proceso de instalacion de Apache.

Figura 4.8: Acceso al dominio local mediante un navegador web.

PHP
El lenguaje principal de programacion a utilizar para el desarrollo web es
PHP6 , el cual consiste en uno de los mas populares y eficientes para la manejo
de base de datos, esta es la razon principal de su uso en el presente proyecto
(ver (PHP, 2014)). Para su instalacion se utiliza la terminal del C:
sudo apt-get install php5
En la figura 4.9 se observa el proceso de instalacion de PHP, ademas de
este paquete es necesario la librera que permite la comunicacion entre PHP y
MySQL (ver 4.10), esta es php5-mysql y su instalacion se lleva a cabo mediante
la ejecuci
on en terminal de:
6

Disponible en http://php.net/

40

4 Instalacion e implementacion del software requerido

sudo apt-get install php5-mysql

Figura 4.9: Proceso de instalacion de Apache.

Figura 4.10: Proceso de instalacion de Apache.

HTML
HTML (en ingles, HyperText Markup Language) corresponde a uno de los
lenguajes m
as utilizados para la codificacion de paginas web. En el presente
trabajo es utilizada para la elaboracion grafica y estetica de la pagina, dado
que la parte l
ogica para el manejo de usuarios se realiza con PHP. De acuerdo
con Delgadillo y Ortiz (2011), HTML corresponde a un lenguaje de marcado
que permite la descripci
on de la estructura y del contenido de las paginas web
en forma de texto. HTML no requiere instalacion ya que por s mismo no
corresponde a un lenguaje de programacion.

4.3

Base de datos

Como se describi
o en el captulo 2, un sistema de control de accesos esta
compuesto por un lector RFID, tarjetas o tags RFID y una sistema de computo

4.3. Base de datos

41

con una base de datos. En esta seccion se describe el software utilizado para
el manejo de base de datos.

MySQL
Se utiliz
o la base de datos de codigo abierto MySQL7 , por ser una de las
m
as populares y con mayor informacion disponible para su utilizacion (ver
(MySQL, 2014)). Para su instalacion se utiliza la siguiente lnea en la terminal:
sudo apt-get install mysql-server

La imagen de la figura 4.11 muestra el proceso de instalacion desde consola.

Figura 4.11: Proceso de instalacion de MySQL.

phpMyAdmin
Se utiliz
o la herramienta de software libre phpMyAdmin escrita en el lenguaje
de programaci
on PHP, esto con la finalidad de facilitar el manejo de MySQL
(ver (phpMyAdmin, 2014)). Para su instalacion se ingresa la siguiente lnea
de comando:
sudo apt-get install phpmyadmin

La imagen de la figura 4.12 muestra parte del proceso de instalacion desde


consola, la instalaci
on completa se describe en el apendice A.2.

Figura 4.12: Proceso de instalacion de phpMyAdmin.


7

Disponible en http://www.mysql.com/

42

4 Instalacion e implementacion del software requerido

Basicamente el sistema requiere una base de datos nombrada basedatos1


con 4 tablas: usuarios, accesos, correos y alertas. El archivo en SQL (por sus
siglas en ingles Structured Query Language) para la creacion de las tablas de
la base de datos se encuentra en el apendice A.5. Es importante mencionar
que el usuario y la contrase
na de la base de datos a traves de MySQL debe
estar correctamente indicados en los diferentes scripts que necesiten acceso a
la base de datos. El RPi posee los siguientes datos temporales para el acceso
a la misma:
Usuario= root
Contrase~
na = proyecto01

5 Funcionamiento del prototipo,


control de accesos y p
agina web
El presente captulo se divide en dos secciones, una que presenta la logica
y uso del sistema para el control de accesos; y otra seccion que explica el
funcionamiento de la p
agina web para el manejo de usuarios del sistema.

5.1

Sistema de control de accesos con RFID

Para lograr la implementacion del sistema de control de accesos mediante tarjetas RFID y su aplicaci
on como alarma se utilizo el lenguaje de programacion
Python, as como las libreras descritas en el captulo anterior. En la presente
secci
on se describe la l
ogica utilizada para la implementacion del sistema y as
como una explicaci
on de su uso, que servira como un manual de consulta para
su respectiva utilizaci
on.

L
ogica del sistema
La l
ogica del sistema se puede observar en los diagramas de flujo 5.1 y 5.2, en
el primero se describe el control de accesos mediante las tarjetas RFID, considerando que el sistema se encuentra activado, o en el caso que se requiera
su desactivaci
on a traves del teclado del prototipo. Otra consideracion importante es que por el momento el sistema se encuentra dentro del laboratorio y
se activa hasta que la puerta haya sido abierta, esta se
nal es enviada debido
a la activaci
on del sensor magnetico.
Es posible determinar que la logica del sistema descrita en la figura 5.1
corresponde b
asicamente a una alarma y al registro de accesos (autorizados
o no) en la base de datos, los cuales seran consultados mediante la pagina
web. Este primer diagrama engloba la utilizacion de practicamente todos los
componentes o hardware del prototipo excepto la del teclado, debido a que el
teclado tiene una funci
on un poco separada, activar o desactivar el sistema.
La figura 5.2 muestra la logica utilizada para la activacion o desactivacion
del sistema, esto se lleva a cabo u
nicamente mediante el teclado del prototipo
a traves del ingreso de un codigo de cuatro dgitos previamente seleccionado.
Adem
as del teclado existe un zumbador o buzzer que permite guiar al usuario
en la utilizaci
on del sistema.
43

44

5 Funcionamiento del prototipo, control de accesos y pagina web

Figura 5.1: L
ogica del sistema para el Control de accesos mediante tarjetas
RFID.

La descripci
on detallada del sistema a traves de sus salidas e indicadores
se desarrolla en la siguiente seccion, de esta manera se brinda al usuario un
manual de consulta para su respectiva utilizacion. El codigo desarrollado en
Python para la implementaci
on del sistema se encuentra en el apendice A.3,
y esta constitudo de los siguientes scripts y documentos:
Correo.py: permite el envo de correos electronicos a traves de la herramienta SSMPT.
Basedatos.py: c
odigo que almacena las funciones para la comunicacion
con la base de datos, esto se logra a traves de la librera MySQLdb de
python. Estas funci
on son el registro de accesos, alertas y consulta de
usuarios.

5.1. Sistema de control de accesos con RFID

45

Figura 5.2: L
ogica del sistema para habilitar o deshabilitar el sistema a traves
del teclado del prototipo.

Lectura.py: puede decirse que este es el codigo principal, ya que posee


el manejo de los componentes electronicos o indicadores, as como las
funciones para la lectura de tarjetas.
Teclado.py: este script se encarga del funcionamiento del teclado para
la activaci
on y desactivacion del sistema.
Alarma.txt: archivo de texto para lectura y escritura, de tal manera que
se logra determinar si la alarma esta activa o no.

46

5 Funcionamiento del prototipo, control de accesos y pagina web

Adem
as de los c
odigos antes mencionados, se deben considerar todas las libreras descritas en el captulo 4 para el correcto funcionamiento del prototipo.

Utilizando el prototipo
Dado que el prototipo debe funcionar sin dispositivos externos como teclado
USB y monitor, es importante la descripcion correcta de su funcionamiento
para as familiarizarse con el sistema como se hara con una alarma de carro
o de una casa. De esta manera en este seccion se describen una serie de pasos
o situaciones que se pueden presentar mediante la utilizacion del prototipo de
tal manera que se tenga un manual de consulta.
Para las pruebas y toma de imagenes se utilizo el software Putty1 que
permite utilizar la comunicaci
on mediante SSH a traves del puerto 22 y de
esta manera tener acceso al raspberry Pi de manera remota, eso s se necesita
conocer la direcci
on ip del C con anterioridad. La imagen 5.3 muestra el
acceso remoto a la terminal del RPi, ademas de conocer la direccion ip, Putty
solicita el nombre de usuario del C y contrase
na para permitir el acceso,
estos datos temporales son:
Usuario= pi
Contrase~
na = proyecto01

Figura 5.3: Acceso remoto mediante Putty a traves de SSH puerto 22.
El sistema empieza a funcionar mediante la ejecucion separada de los programas principales, estos son lectura.py y Teclado.py. El primero se encarga,
como se mencion
o anteriormente, de realizar la lectura de tarjetas RFID as
como el llamada a las funciones dentro del codigo basedatos.py para el control
de accesos. El segundo programa principal Teclado.py se encarga basicamente
1
M
as informaci
on sobre Putty en http://www.chiark.greenend.org.uk/~sgtatham/
putty/download.html

5.1. Sistema de control de accesos con RFID

47

de habilitar y deshabilitar el sistema mediante el ingreso de codigos a traves


del teclado del prototipo. Para empezar hay que encontrase en la carpeta que
almacene el software y se escriben los siguientes comandos en terminales separadas:
Terminal 1
sudo python lectura.py

Terminal 2
sudo python Teclado.py

Obteniendo algo como lo que se observa en la figura 5.4.

Figura 5.4: Ejecucion en terminales separadas del software.


Los siguientes pasos describen la utilizacion del prototipo en cuanto al
sistema de control de accesos se refiere, dando informacion sobre lo que ocurre
en las salidas e indicadores:
El c
odigo de desarme consta de cuatro dgitos que pueden ser modificados, adem
as se puede modificar la longitud del codigo.
Si se ingresa el c
odigo de 4 dgitos de desarme incorrecto suena un pitido
largo y vuelve al ciclo de espera de codigo. Ver figura 5.5
Si se ingresa el c
odigo correcto de 4 dgitos y el sistema verifica si su
estado anterior estaba armado o desarmado (ver logica del sistema en
5.2).

48

5 Funcionamiento del prototipo, control de accesos y pagina web

Figura 5.5: Ingreso del c


odigo de activacion y desactivacion mediante teclado
alfanumerico.

Si el sistema estaba armado, se desarmara y emitira dos sonidos cortos


dando la indicaci
on (ver de nuevo figura 5.5).
Si este estaba desarmado, el sistema se armara y emitira 5 pitidos largos
con pausas de un segundo y uno corto para brindar el tiempo necesario
para salir del laboratorio (ver figura 5.6).

Figura 5.6: Ingreso del c


odigo de activacion y desactivacion mediante teclado
alfanumerico.

La lectura de tarjetas se mantendra desactivada siempre que el sistema


este desarmado y se indicara con un mensaje en pantalla de Alarma

5.1. Sistema de control de accesos con RFID

49

desactivada(ver 5.7).
En el momento que el sistema se arme el sistema entrara a comprobar si
el sensor magnetico ha sido activado o no, esto es que la puerta haya sido
abierta o no, siempre que el sistema este con la puerta cerrada el sistema
estar
a en una constante verificacion del estado del sensor magnetico y
desplegar
a en terminal no pasa nada (ver 5.7).

Figura 5.7: Control de accesos, sistema desactivado y luego activado.

Si el sistema detecta que la puerta ha sido abierta enviara una se


nal
de solicitud de tarjeta para el ingreso o en el caso de no poseer tarjeta
desarmar el sistema mediante el codigo del teclado, esto se realizara
durante 10s en un conteo regresivo indicado por pitidos hasta que sea
ingresada una tarjeta o se ingrese el codigo de desarme del sistema. Ver
figura 5.8.

Figura 5.8: Alarma activada, puerta de acceso abierta y conteo regresivo.

50

5 Funcionamiento del prototipo, control de accesos y pagina web


En el caso de que no se ingrese ninguna tarjeta ni se ingrese el codigo de
desactivaci
on durante los 10s indicados, el sistema entrara en un estado
de alarma, emitiendo un pitido continuo durante 10s, ademas se enviara
una alerta a la p
agina web respectiva, se registrara en la base datos para
su respectiva consulta y por u
ltimo se enviara un correo electronico al
profesor o administrador del laboratorio. Ver nuevamente figura 5.8.
En el caso de que se ingrese una tarjeta valida el sistema registrara este
acceso en la base de datos para su respectiva consulta en la pagina web.
El sistema brindar
a un mensaje de bienvenida y vuelve a verificar si la
puerta ha sido cerrada. Ver figura 5.9 y 5.10

Figura 5.9: Acceso en terminal mediante una tarjeta registrada.

Se puede dar el caso en que la tarjeta no haya sido leda correctamente o


se ingrese una tarjeta no autorizada (que no se encuentre registrada en
la base de datos), en este caso el sistema indicara un acceso denegado
y dar
a la oportunidad de ingresar un codigo de desarme u otra tarjeta,
esto durante tres intentos (programables).

5.2

Monitoreo remoto a trav


es de p
agina web

El prototipo implementado consta de un pagina web desarrollada mediante el


lenguaje de programaci
on PHP y HTML para el monitoreo remoto de la puerta
de acceso, esta p
agina permite el registro de usuarios, acceso a la informacion
de la base de datos y al despliegue de alertas. El diagrama presentado en la
figura 5.13 explica en resumen el funcionamiento de la pagina web.
Para acceder a la p
agina web se hace uso de la direccion ip en cualquier
navegador web. Los siguientes pasos describen las partes de la pagina web con
mas detalle, adem
as de im
agenes que ilustran su funcionamiento:

5.2. Monitoreo remoto a traves de pagina web

51

Figura 5.10: Acceso mediante una tarjeta registrada.

Inicio de sesi
on: para el ingreso a la pagina web se requiere iniciar sesion
mediante un usuario y contrase
na. Aunque se trate un acceso a la pagina
sobre otra direcci
on, por ejemplo NUEVO USUARIO, el servidor autom
aticamente despliega la ventana para el inicio de sesion. Esta pagina
posee un control de errores para el caso en que se ingrese un usuario/contrase
na incorrectos o no se inserte ning
un dato. En la imagen de la
figura 5.14 se muestra el proceso de apertura de sesion.

Inicio: presenta una introduccion al proyecto. Corresponde a la vista inicial al haber iniciado sesion (ver figura 5.15). Se puede observar en la
esquina superior izquierda el despliegue del nombre del usuario ademas
de un link para finalizar sesion.

Nuevo Usuario: permite el insercion de nuevos usuarios, mediante este


registro se indican los datos del usuario del sistema ademas de la contrase
na y n
umero de la tarjeta. En la imagen de la figura 5.16 se observa
los campos para el registro del usuario, en el momento que el usuario ha
sido ingresado de manera satisfactoria se despliega un mensaje como el
de la figura 5.17.

52

5 Funcionamiento del prototipo, control de accesos y pagina web

Figura 5.11: Acceso en terminal mediante una tarjeta registrada.

Usuarios: muestra una tabla con los datos de los usuarios registrados,
estos datos son: nombre, apellido, usuario y n
umero de tarjeta RFID, ver
figura 5.18. Adem
as esta p
agina posee el link para eliminar los usuarios
(figura 5.19).
Correos: permite el manejo de los correos electronicos para el envo de
alertas, ver figura 5.20. Se pueden agregar o eliminar los emails, estos
ser
an los destinatarios de las alertas emitidas.
Accesos: muestra una tabla con los datos de los accesos autorizados mediante tarjetas registradas, muestra detalles como fecha, hora y usuario
(ver figura 5.21).
C
amara: es un espacio para una futura mejora al prototipo al agregar
una c
amara de vigilancia.
Alertas: muestra una tabla con los datos de los accesos no autorizados,
indica la fecha, hora y lugar (ver 5.22). Esta pagina se refresca automaticamente de tal manera que si hubiera una alerta nueva se desplegara
una ventana emergente como la mostrada en la figura 5.23.
El c
odigo en PHP y HTML para el desarrollo de esta pagina web se muestra
en el apendice A.4.

5.2. Monitoreo remoto a traves de pagina web

Figura 5.12: Acceso mediante un llavero no registrado.

Figura 5.13: Diagrama de flujo de la pagina web.

53

54

5 Funcionamiento del prototipo, control de accesos y pagina web

Figura 5.14: Inicio de sesion en la pagina web.

Figura 5.15: Inicio en la p


agina web. Introduccion a la pagina web.

5.2. Monitoreo remoto a traves de pagina web

Figura 5.16: Registro de usuarios.

Figura 5.17: Usuario registrado.

55

56

5 Funcionamiento del prototipo, control de accesos y pagina web

Figura 5.18: Lista de usuarios.

Figura 5.19: Usuario eliminado.

Figura 5.20: Manejo de correos electronicos.

5.2. Monitoreo remoto a traves de pagina web

Figura 5.21: Lista de accesos autorizados en la pagina web.

Figura 5.22: Lista de accesos no autorizados en la pagina web.

57

58

5 Funcionamiento del prototipo, control de accesos y pagina web

Figura 5.23: Ventana emergente.

Mejoras al prototipo

El prototipo descrito en el presente proyecto permite un control basico de accesos a traves del monitoreo remoto de una puerta y el uso tarjetas RFID,
sin embargo al ser un prototipo presenta ciertas limitaciones indicadas en el
alcance del proyecto. Estas limitaciones pueden eliminarse mediante la aplicaci
on de mejoras, dependiendo eso s de las necesidades del lugar o del laboratorio (en el caso que su aplicacion sea para los laboratorios de la Escuela de
Ingeniera Electrica). A continuacion se describen algunas de las mejores que
pueden ser aplicadas al sistema o prototipo desarrollado:
C
amara de video: para lograr una vigilancia nocturna se propone instalar
una c
amara de video que permita un constante monitoreo incluso en
horas de la noche, de tal manera que si existe alguna alerta indicada en
la p
agina web, esta alerta pueda ser atendida de manera remota y tomar
las medidas de seguridad adecuadas.
Cierre electromagnetico o llavn electrico: para lograr una apertura remota a traves del servidor web o mediante el uso de las tarjetas RFID,
se propone agregar un circuito de potencia que incluya un cierre electromagnetico, este llavn electrico pueda ser manejado mediante los GPIO
del C. Para esto es necesario un dise
no que considere que la mayora
de llavines electricos utilizan 12Vdc o 24Vdc y las salidas de RPi son
de 3.3V. La ilustracion 6.1 corresponde a un ejemplo de llavn electrico
con solenoide con un costo aproximado de $201 , sin embargo este puede
variar dependiendo de las necesidades y del tipo de cerradura.

Figura 6.1: Llavn electrico. Tomada de Amazon (2014a).

Dato tomado de www.amazon.com

59

60

6 Mejoras al prototipo
Sirena o parlante con mp3 : cuando existe una alerta debido a un ingreso
no autorizado, el sistema emite un sonido mediante un buzzer durante
unos segundos para dar la se
nal de alarma, sin embargo se propone el uso
de una sirena o un parlante con un sonido en formato mp3 para hacer
alarma m
as audible. EL RPi posee una salida de audio que permitira
realizar esto a traves de un script y agregarlo al codigo ya implementado.
Arranque autom
atico en caso de reinicio: el prototipo no esta exento
de reiniciarse debido a alguna falla del S.O. o de un corte de energa,
por tanto se propone la implementacion de un script en bash para la
ejecuci
on autom
atica en caso de reinicio.
Alimentaci
on de respaldo: como se menciono anteriormente el sistema
puede reiniciarse debido a un corte de energa, por tanto es importante
la utilizaci
on de sistemas de respaldo de energa como las conocidas UPS
(por sus siglas en ingles uninterruptible power supply).
IP P
ublica: en este momento el prototipo tiene instalado y configurado
todo lo necesario para funcionar como servidor pero solo de acceso de
local, es decir que puede ser accesado por otros dispositivos con acceso a
internet pero si se encuentran conectados a la misma red local. En el caso
que se requiera un acceso remoto desde una red exterior se necesita una
ip p
ublica que en el caso de EIE debe ser solicitada al administrador
de redes, esto para su debida asignacion y la apertura de los puertos
necesarios.
Intercomunicador: en el caso de encontrarse el sistema en uno de los
laboratorios de EIE, sera conveniente la instalacion de un intercomunicador que permita la comunicacion entre el sistema y la secretara. Esto
puede ser de utilidad para la apertura remota o alguna alerta desplegada
por el sistema.
Display: idealmente el prototipo debe funcionar sin la necesidad de un
dispositivo externo que brinde indicaciones visuales como lo sera un
monitor o una pantalla, sin embargo se propone el uso de un display
o pantalla LCD que despliegue mensajes como por ejemplo: n
umero de
tarjeta RFID utilizada, estado del sistema (activado o desactivado), codigo ingresado con el teclado, entre otros. Un display de bajo costo se
puede observar en la figura 6.2.
Teclado: el teclado alfanumerico utilizado usa 8GPIO de los 26 disponibles en un Raspberry Pi B+, por tanto es para considerar utilizar otro
tipo de teclado que no limite la cantidad de pines de entrada y salida
del RPi, por ejemplo un teclado USB.

6 Mejoras al prototipo

61

Figura 6.2: Display LCD. Tomada de CRCibernetica. (2014a).

Protecci
on exterior y ventilacion: si el sistema se desea utilizar en un laboratorio a modo de prueba, es importante una proteccion del prototipo
debido a que en este momento el sistema solo posee un proteccion en el
RPi. Adem
as es importante considerar que estos C llegan a unas temperaturas altas por lo que utilizar alg
un sistema simple de enfriamiento
como un ventilador de computadora es importante mejora a considerar.
Sensor infrarrojo: para la vigilancia nocturna, ademas de la camara de
vigilancia, se puede utilizar un sensor infrarrojo de movimiento o PIR
que active la alarma en caso de un acceso no autorizado. Existen sensores
de este tipo de bajo costo como el de la figura 6.3.

Figura 6.3: Sensor de movimiento infrarrojo. Tomada de CRCibernetica.


(2014b).

Conclusiones y recomendaciones

Conclusiones
Con el desarrollo del presente proyecto se reconoce la importancia de la tecnologa RFID y su aplicacion a diferentes areas, entre ellas el control de accesos.
Adem
as, el desarrollo de este prototipo permitio entender las diferentes posibilidades que brindan los Cs, entre ellos el Raspberry Pi, para el desarrollo
de aplicaciones y proyectos.
El uso de software libre y hardware de bajo costo permite la implementaci
on de proyectos educacionales que desarrollan habilidades de investigacion
y creatividad en el estudiante y a su vez permiten satisfacer necesidades existentes en la Escuela de Ingeniera Electrica.
Es posible observar la necesidad de implementar sistemas de control de
acceso en los laboratorios de la Escuela de Ingeniera Electrica que permitan
un resguardo del equipo detras de cada puerta, ademas de facilitar un acercamiento de los estudiantes interesados a los laboratorios. Por tanto la incursion
en el desarrollo de este tipo de prototipos es de gran importancia.
El Raspberry Pi presento diferentes ventajas con respecto a otros C,
por ejemplo su versatilidad para ser usado como una computadora. Ademas
posee diferentes protocolos de comunicacion, donde el utilizado en el presente
proyecto fue SPI.
Se logra la construccion de un prototipo de bajo costo que permitio un
control de accesos con alarma mediante el uso de la tecnologa RFID, ademas
se implement
o un servidor web que permitio el monitoreo remoto. De esta
manera se puede observar que es posible la realizacion de un prototipo de
bajo costo que se asemeje a un sistema comercial.
A su vez se obtiene un prototipo con facilidad para el manejo de mejoras,
donde a partir de la implementacion de estas se podra obtener un sistema
m
as completo acorde a las necesidades de cada laboratorio.
Se puede tomar ventaja del desarrollo de proyectos electricos en EIE y del
interes de estudiantes en el desarrollo de aplicaciones y proyectos de este tipo
que permitan llegar a satisfacer o ayudar en algunas necesidades de la Escuela.

Recomendaciones
Despues de haber finalizado con el desarrollo de este prototipo basado en la
tecnologa RFID se pueden brindar las siguientes recomendaciones:
63

64

7 Conclusiones y recomendaciones
Realizar m
as investigaci
on sobre la tecnologa RFID, la cual esta teniendo un gran auge, para as tomar ventaja de los beneficios que esta
ofrece.
Analizar e investigar m
as sobre los protocolos de comunicacion que utiliza el Raspberry Pi, por ejemplo el I2C, de tal manera que se puedan
desarrollar m
as proyectos basados en otros protocolos de comunicacion
o tomar ventaja de ellos y extraer mas pines de entrada-salida, dado que
la cantidad de GPIO podra ser una limitacion que presente el RPi.
Se debe tener precauci
on en la utilizacion de los GPIO del Raspberry Pi
debido a que este no posee una proteccion interna contra corto circuito.
Por tanto se debe ser cuidadoso cuando se configuran los pines como
entrada o salida, ya que se podra da
nar el RPi.
En el captulo 6 se mencionaron como posibles mejoras, sin embargo la
utilizaci
on de una alimentacion de energa de respaldo y un display en
el prototipo se pueden considerar como recomendaciones tambien.
Se deben realizar pruebas durante un perodo de tiempo determinado
sobre el prototipo, esto con la finalidad de poder verificar los tiempos de
respuesta en cuanto a acciones como: la duracion al cerrar la puerta de
entrada, el tiempo en deslizar la tarjeta o ingresar el codigo y el tiempo
necesario para salir del laboratorio cuando el sistema ha sido activado.
Es importante la realizaci
on de un dise
no completo, investigando y estudiando sobre los temas de interes que se puedan presentar, con la
finalidad de lograr un adecuado desarrollo e implementacion del proyecto.
Para el desarrollo del software es importante la realizacion de diagramas de l
ogica completos que faciliten la programacion posterior. Ademas
cuando se trabaja programando codigo es importante evitar el uso de
tildes y la letra n
dado que esto puede brindar errores posteriores en la
compilaci
on.

Bibliografa
Amazon (2014a). Amico dc 12v open frame type solenoid for electric door lock.
http://www.amazon.com/Amico-Open-Frame-Solenoid-Electric/dp/
B005FOTJF8/ref=sr_1_8?ie=UTF8&qid=1416793156&sr=8-8&keywords=
electromagnetic+lock. Consultado el 22 de noviembre del 2014 a las
7:37pm.
Amazon (2014b).
Keyboard for arduino.
http://www.amazon.com/
Universial-Switch-Keypad-Keyboard-Arduino/dp/B008A30NW4/
ref=sr_1_1?ie=UTF8&qid=1416587753&sr=8-1&keywords=keyboard+
arduino. Consultado el 15 de Noviembre del 2014 a las 10:56am.
Amazon (2014c).
Mifare RC522.
http://www.amazon.com/
RFID-RC522-Sensor-Module-Silver-13-26mA/dp/B00GYR1KJ8/ref=
sr_1_1?s=electronics&ie=UTF8&qid=1412369209&sr=1-1&keywords=
mifare+rc522. Consultado el 02 de Octubre del 2014 a las 02:48pm.
Apache (2014). The Apache Software Foundation. http://apache.org/.
Consultado el 22 de noviembre del 2014 a las 06:54pm.
Arduino (2014). What is arduino? www.arduino.cc. Consultado el 02 de
Octubre del 2014 a las 02:18pm.
Bowers, D. (2007). Physical access control. En Information Security Management Handbook. Auerbach Publications. Taylos & Francis Group.
Byte Paradigm (2014).
Introduction to I 2 C and SPI protocols.
http://www.byteparadigm.com/applications/
introduction-to-i2c-and-spi-protocols/?/article/AA-00255/
22/Introduction-to-SPI-and-IC-protocols.html.
Consultado el
04/10/2014 a las 08:40pm.
c
NXP
Semiconductors (2014). MF1S50yyX/V1 MIFARE Classic EV1
1K - Main stream contactless smart card IC for fast and easy soc
lution development. NXP
Semiconductors N.V. 2014. Consultado
el 03/10/2014 a las 08:40pm en http://www.nxp.com/documents/data_
sheet/MF1S50YYX_V1.pdf.
c
NXP
Semiconductors (2014). MFRC522. Standard 3V MIFARE reader soc
lution. NXP
Semiconductors N.V. 2014. Consultado el 03/10/2014 a las
65

66

Bibliografa

08:22pm en http://www.elecrow.com/download/MFRC522%20Datasheet.
pdf.
CRCibernetica.
(2014a).
Basic
16x2
character
LCD
Black
on
Green
5v.
http://www.crcibernetica.com/
basic-16x2-character-lcd-black-on-green-5v/.
Consultado el
23 de noviembre a las 10:16am.
CRCibernetica. (2014b).
PIR Motion Sensor Module.
http://www.
crcibernetica.com/pir-motion-sensor-module/. Consultado el 23 de
noviembre a las 10:16am.
Deal Extreme, D. X. (2014).
RFID-RC522 RF IC Modulo Sensor Card - Blue + Silver.
http://www.dx.com/es/p/
rfid-rc522-rf-ic-card-sensor-module-blue-silver-203517\#.
VAs682OEwr8. Consultado el 06 de setiembre del 2014 a las 10:50am.
Delgadillo, S. y Ortiz, J. A. (2011). Dise
no de un sistema de control de acceso
mediante tecnologia RFID con implementacion de un servidor web embebido
en un pic. Reporte tecnico, Universidad Autonoma de Zacatecas, Mexico.
Finkenzeller, K. (2010). RFID Handbook. Fundamentals and Applications in
Contactless Smart Cards, Radio Frequency Identification and Near-Field
Communication. Wiley, 3ra. edicion.
GAO RFID Inc, A. (2014). Rfid access control and management. http://www.
gaorfid.com/Presentations/PDFs/Access-Control.pdf. Consultado el
07 de setiembre del 2014 a las 4:03pm.
Godinez, L. M. (2008). RFID: Oportunidades y riesgos, su aplicaci
on pr
actica.
Alfaomega.
Herrera, J. C., Perez, P., y Marciano, M. (2009). Tecnologa RFID aplicada
al control de accesos. Centro de Innovaci
on y Desarrollo Tecnol
ogico en
C
omputo del Instituto Politecnico Nacional, Mexico, D. F.
HID (2014). About HID. http://www.hidglobal.com/about-hid.
Landt, J. (2005). The history of rfid. Potentials, IEEE, 24:811.
Motorola Solutions, M. S. (2014).
Lectores rfid.
http://www.
motorolasolutions.com/XL-ES/Productos+y+Servicios+para+
Empresas/RFID/Lectores+RFID.
Consultado el 06 de setiembre del
2014 a las 11:11am.

Bibliografa

67

MySQL (2014). Mysql. the worlds most popular open source database. http:
//www.mysql.com/.
Peijiang, C. y Xuehua, J. (2008). Design and implementation of remote monitoring system based on gsm. Computational Intelligence and Industrial
Application, 2008. PACIIA 08. Pacific-Asia Workshop on IEEE, 1:678
681.
PHP (2014). PHP. http://php.net/. Consultado el 22 de noviembre del
2014 a las 5:37pm.
phpMyAdmin (2014). Bringing mysql to the web. http://www.phpmyadmin.
net/home_page/index.php. Consultado el 22 de noviembre del 2014 a las
06:57pm.
Pinout (2014). http://pi.gadgetoid.com/pinout/pinout. Consultado el
04/10/2014 a las 30:04pm.
Portillo, J., Bermejo, A. B., y Bernardos, A. (2007). Tecnologa de identificaci
on por radiofrecuencia (RFID): Aplicaciones en el ambito de la salud.
Reporte tecnico, Fundacion Madri+d para el Conocimiento.
Raspberry-Pi-Foundation (2014). What is a Raspberry Pi? http://www.
raspberrypi.org/. Consultado el 02 de Octubre del 2014 a las 02:18pm.
Sahbudin, R., Lee, C., Chin, T., y Siong, L. (2003). Room access monitoring
system. Research and Development, 2003. SCORED 2003. Proceedings.
Student Conference on IEEE, paginas 304308.
SecuraKey (2014a). Access control systems. http://www.securakey.com/
index.htm.
c
SecuraKey (2014b).
e*tag 13.56mhz
RFID Products.
http://www.
securakey.com/PRODUCTS/RFID_PRODUCTS/etag_brochure_6903.pdf.
Siegel, C., Sagalow, T., y Serritella, P. (2007). Cyber-risk management: Technical and insurance controls for enterprise-level security. En Harold F Tipton,
CISSP-Micki Krause, C., editor, Information Security Management Handbook. Auerbach Publications. Taylos & Francis Group, 6ta edicion.
SkyRFID, I. (2014a). About us. Our History. http://skyrfid.com/About_
Us.php.
SkyRFID, I. (2014b). Rfid Access Control Management.
skyrfid.com/index.php?pr=RFID_Access_Management.

http://www.

Ap
endice

A.1

Configuraci
on del archivo ssmtp.conf

La configuraci
on final del archivo ssmtp.conf para el envo de correos electronicos a traves del Raspberry Pi queda de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

#
# C o n f i g f i l e f o r sSMTP s e n d m a i l
#
# The p e r s o n who g e t s a l l m a i l f o r u s e r i d s < 1000
# Make t h i s empty t o d i s a b l e r e w r i t i n g .
#r o o t=p o s t m a s t e r
r o o t=p i l a b 2 0 3 @ g m a i l . com
# The p l a c e where t h e m a i l g o e s . The a c t u a l machine name i s
# r e q u i r e d no
# MX r e c o r d s a r e c o n s u l t e d . Commonly m a i l h o s t s a r e named
# m a i l . domain . com
#mailhub=m a i l
mailhub=smtp . g m a i l . com : 5 8 7
AuthUser=p i l a b 2 0 3 @ g m a i l . com
AuthPass=p r o y e c t o 0 1
UseTLS=YES
UseSTARTTLS=YES
# Where w i l l t h e m a i l seem t o come from ?
#rewriteDomain=
rewriteDomain=g m a i l . com
# The f u l l hostname
#hostname=r a s p b e r r y p i
hostname= p i l a b 2 0 3 @ g m a i l . com
# Are u s e r s a l l o w e d t o s e t t h e i r own From : a d d r e s s ?
# YES Allow t h e u s e r t o s p e c i f y t h e i r own From : a d d r e s s
# NO Use t h e system g e n e r a t e d From : a d d r e s s
FromLineOverride=YES

69

70

A Apendice

A.2

Instalaci
on del software phpMyAdmin

Para la instalaci
on y configuraci
on de phpMyAdmin en el RPi se deben seguir
1
los siguientes pasos :
Instalar el paquete desde terminal mediante el comando:
sudo apt-get install phpmyadmin

Figura A.1: Proceso de instalacion de phpMyAdmin.

Elecci
on de apache como servidor web.
Configuraci
on mediante dbconfig-common.
Designaci
on de una contrase
na, en este proyecto es proyecto01.
Configuraci
on del archivo apache2.conf, se accesa al archivo mediante la
siguiente lnea en comando:
sudo nano /etc/apache2/apache2.conf

Al final del archivo se debe agregar la siguiente lnea:


Include /etc/phpmyadmin/apache.conf
1
Explicaci
on a
un m
as detallada disponible en http://www.raspipress.com/2012/09/
tutorial-install-phpmyadmin-on-your-raspberry-pi/

A.2. Instalaci
on del software phpMyAdmin

71

Figura A.2: Proceso de instalacion de phpMyAdmin.

Figura A.3: Proceso de instalacion de phpMyAdmin.

Luego se debe reinicar apache, con el siguiente comando:


sudo /etc/init.d/apache2 restart

Acceso a phpMyAdmin mediante la direccion local de la computadora o


este caso del C.

72

A Apendice

Figura A.4: Proceso de instalacion de phpMyAdmin.

Figura A.5: Proceso de instalacion de phpMyAdmin.

A.3

C
odigo en Python para la implementaci
on del
sistema

Para lograr la utilizaci


on del prototipo se debieron programas los siguientes
codigos en el lenguaje de programacion Python:

Correo.py
1 L i n e a shebang
2 #! / u s r / b i n / env python
3 #I m por tar l o s modulos y l i b r e r i a s n e c e s a r i a s
4 import s u b p r o c e s s
5 import o s

A.3. C
odigo en Python para la implementacion del sistema

73

Figura A.6: Proceso de instalacion de phpMyAdmin.

6 import MySQLdb
7 import b a s e d a t o s
8 #Funcion c o r r e o para e l manejo de c o r r e o s d e s t i n a t a r i o s de l a s
alertas
9 def c o r r e o ( ) :
10
db=b a s e d a t o s . c o n e c t a r ( )#Se c o n e c t a con l a b a s e de d a t o s
11
db2=db . c u r s o r ( )#D e s p l a z a e l c u r s o r a t r a v e s de l a b a s e de
datos
12
db2 . e x e c u t e ( SELECT c o r r e o FROM c o r r e o s WHERE 1 )#E j e c u t a
una s e l e c c i o n de l a t a b l a u s u a r i o s
13
c o r r e o s=db2 . f e t c h a l l ( )#Almacena s e l e c c i o n de l a t a b l a
usuarios
14
#C i c l o para e l e n v i o de c o r r e o s a cada d e s t i n a t a r i o de l a
b a s e de d a t o s
15
f o r c o r r e o in c o r r e o s :
16
s u b p r o c e s s . Popen ( echo Alarma | m a i l s Alarma
%s %(c o r r e o ) , s h e l l=True )#P r o c e s o por medio
de s c r i p t de l i n u x
17
db . c l o s e ( )#C i e r r a l a c o n e x i o n t e m p o r a l a l a b a s e de d a t o s

Basedatos.py
1

B a s e d a t o s . py s e e n c a r g a r d e l manejo de l a b a s e de d a t o s
mediante pythonmysql
2 Posee l a s f u n c i o n e s r e s p e c t i v a s para i n s e r t a r l o s a c c e s o s ,
c o r r o b o r a r s i e l t a g I d e s t a y s i e x i s t e una a l e r t a
3 #Impor tar l o s modulos y l i b r e r i a s n e c e s a r i a s
4

74

A Apendice

5 #I m por tar pythonmysql


6 import MySQLdb
7
8 #I m por tar modulos r e q u e r i d o s
9 from time import s t r f t i m e , l o c a l t i m e
10 import d a t e t i m e
11 from u n i d e c o d e import u n i d e c o d e
12
13 #Funcion para c o n e c t a r s e con l a b a s e de d a t o s
14 def c o n e c t a r ( ) :
15
return MySQLdb . c o n n e c t ( l o c a l h o s t , r o o t , p r o y e c t o 0 1 ,
basedatos1 )
16
17 # Funcion V a l i d a r a c c e s o , r e c i b e e l t a g I d
18 def V a l i d a r A c c e s o ( t a g I d ) :
19
db= c o n e c t a r ( )#Se c o n e c t a con l a b a s e de d a t o s
20
db2= db . c u r s o r ( )#D e s p l a z a e l c u r s o r a t r a v e s de l a b a s e de
datos
21
db2 . e x e c u t e ( SELECT u s u a r i o FROM u s u a r i o s WHERE t a g I d= %s
%(t a g I d ) )#E j e c u t a una s e l e c c i o n de l a t a b l a u s u a r i o s
22
u s u a r i o=db2 . f e t c h o n e ( )#E j e c u t a una s e l e c c i o n de l a t a b l a
usuarios
23
db . c l o s e ( )#C i e r r a l a c o n e x i o n t e m p o r a l a l a b a s e de d a t o s
24
return u s u a r i o#Devuelve e l v a l o r u s u a r i o
25
26 #Funcion I n s e r t a r A c c e s o , r e c i b e e l tagID como parametro
27 def I n s e r t a r A c c e s o ( t a g I d ) :
28
db= c o n e c t a r ( )#Se c o n e c t a con l a b a s e de d a t o s
29
db2= db . c u r s o r ( )#D e s p l a z a e l c u r s o r a t r a v e s de l a b a s e de
datos
30
f e c h a=s t r f t i m e ( %d/ %m/ %Y , l o c a l t i m e ( ) )#Almacena l a
variable fecha
31
hora=s t r f t i m e ( %H: %M: %S , l o c a l t i m e ( ) )#Almacena e l dato
hora
32
db2 . e x e c u t e ( SELECT u s u a r i o FROM u s u a r i o s WHERE t a g I d= %s
, ( t a g I d ) )#E j e c u t a una s e l e c c i o n de l a t a b l a u s u a r i o s
33
u s u a r i o=db2 . f e t c h o n e ( )#E j e c u t a una s e l e c c i o n de l a t a b l a
usuarios
34
db2 . e x e c u t e ( INSERT INTO a c c e s o s ( nombre , t a g I d , f e c h a ,
hora ) VALUES ( %s, %s , %s , %s ) , ( s t r ( u s u a r i o ) , t a g I d ,
f e c h a , hora ) )#I n s e r t a l o s d a t o s en l a t a b l a de a c c e s o s
35
db . commit ( )#E j e c u t a l a i n s e r c i o n
36
db . c l o s e ( )#C i e r r a l a c o n e x i o n t e m p o r a l con l a b a s e de
datos
37
38 #Funcion I n s e r t a r A l e r t a , r e c i b e e l tagID como parametro y e l l u g a r
en e l c a s o n e c e s a r i o
39 def I n s e r t a r A l e r t a ( t a g I d , l u g a r ) :
40
db= c o n e c t a r ( )#Se c o n e c t a con l a b a s e de d a t o s
41
db2= db . c u r s o r ( )#D e s p l a z a e l c u r s o r a t r a v e s de l a b a s e de
datos

A.3. C
odigo en Python para la implementacion del sistema
42
43
44

45
46

75

f e c h a=s t r f t i m e ( %d/ %m/ %Y , l o c a l t i m e ( ) )#Almacena l a


variable fecha
hora=s t r f t i m e ( %H: %M: %S , l o c a l t i m e ( ) )#Almacena e l dato
hora
db2 . e x e c u t e ( INSERT INTO a l e r t a s ( Lugar , t a g I d , f e c h a ,
hora ) VALUES ( %s , %s , %s , %s ) , ( l u g a r , t a g I d , f e c h a , hora
) )#I n s e r t a l o s d a t o s en l a t a b l a de a l e r t a s
db . commit ( )#E j e c u t a l a i n s e r c i o n
db . c l o s e ( )#C i e r r a l a c o n e x i o n t e m p o r a l con l a b a s e de
datos

Lectura.py
1 #! / u s r / b i n / python
2
3 #Impor tar d o c s . py n e c e s a r i o s
4 import b a s e d a t o s #Importa b a s e d a t o s . py para e l manejo con l a b a s e
de d a t o s
5 import c o r r e o #Importa e l documento c o r r e o . py para e l manejo d e l
correo
6 #import t e c l a d o
7
8 #Impor tar modulos
9 import s y s
10 import time
11 import RPi . GPIO a s GPIO #Importa l a l i b r e r i a para e l manejo de l o s
pines del raspberry pines
12 import MFRC522#Importa l a l i b r e r i a para e l manejo d e l l e c t o r
MIFARE RC522
13 import s u b p r o c e s s
14
15
16 #Encender y apagar Led r o j o
17 def encenderLed ( ) :
18
GPIO . output ( 1 3 , True )#Pone l a s a l i d a d e l p i n 13 en a l t o
19
time . s l e e p ( 0 . 5 )#Le da un tiempo de e s p e r a de 0 . 5 s
20
21 #Encender e l LED v e r d e
22 def encenderLedV ( ) :
23
GPIO . output ( 1 1 , True )#Pone l a s a l i d a 11 d e l p i en a l t o
24
time . s l e e p ( 0 . 3 )#Espera 0 . 3 s
25
GPIO . output ( 1 1 , F a l s e )##Pone l a s a l i d a 11 en b a j o
26
27 #Funcion apagar LED r o j o
28 def apagarLed ( ) :
29
GPIO . output ( 1 3 , F a l s e )#Pone l a s a l i d a d e l p i n 13 en b a j o
30
31 #E m i t i r s o n i d o de b u z z e r
32 def b u z z e r ( ) :
33
GPIO . output ( 1 5 , True )#Pone l a s a l i d a 15 d e l p i en a l t o
34
time . s l e e p ( 0 . 1 )#Tiempo de e s p e r a de 0 . 1 s
35
GPIO . output ( 1 5 , F a l s e )#Pone l a s a l i d a 15 en f a l s o

76

A Apendice

36
37 #Funcion s i r e n a , para e m i t i r un a v i s o de a l e r t a
38 En e s t e c a s o c o r r e s p o n d e a un b u z z e r p e r o
39 p o d r i a u t i l i z a r s e una s i r e n a o un s o n i d o mediante
40 mp3
41 def s i r e n a ( ) :
42
GPIO . output ( 1 5 , True )#Pone s a l i d a 15 en a l t o
43
time . s l e e p ( 8 )#Tiempo de e s p e r a 8 s para a l e r t a r
44
GPIO . output ( 1 5 , F a l s e )#Pone l a s a l i d a en b a j o
45
46 #Se d e f i n e v a r i a b l e g l o b a l a u t i l i z a r e n v i o
47 global e n v i o#V a r i a b l e g l o b a l e n v i o
48 e n v i o=0#Valor i n i c i a l de e n v i o
49
50 #Funcion a l e r t a#
51 Permite l a i n s e r c i o n de l a a l e r t a en l a b a s e de datos ,
52 ademas e n v i a un c o r r e o e l e c t r o n i c o a l u s u a r i o i n d i c a d o en c o r r e o .
py .
53 Esto puede s e r m o d i f i c a d o a v a r i o s c o r r e o s , por u l t i m o s e i n d i c a
la variable
54 l u g a r que para n s i s t e m a s debe s e r m o d i f i c a d o p r e f e r i b l e o como
sugerencia
55 mediante l a i p p r o p i a de cada uno
56 def a l e r t a ( ) :
57
t a g I d= n u l o #D e f i n e e l t a g I d como n u l o porque no s e
inserto
58
l u g a r= Lab203 #Se puede m o d i f i c a r por e l i p p r o p i o de
cada l a b o r a t o r i o
59
global e n v i o #R e c i b e l a v a r i a b l e g l o b a l e n v i o
60
i f ( e n v i o ==0) :#S i e l e n v i o e s c e r o e n t o n c e s
61
b a s e d a t o s . I n s e r t a r A l e r t a ( t a g I d , l u g a r )#I n s e r t a
a l e r t a en l a b a s e de d a t o s
62
e n v i o=e n v i o+1#Sumele uno a l a v a r i a b l e g l o b a l
envio
63
c o r r e o . c o r r e o ( )#Llame a l a f u n c i o n e n v i o para su
respectivo envio
64
p e r m i s o ( )#Vuelva a l l a m a r a l a f u n c i o n p e r m i s o ( )
para v e r i f i c a r s i l a alarma ha s i d o
desactivada
65
e l s e :# De o t r a manera s o l o l l a m e a l a f u n c i o n p e r m i s o dado
que ya ha s i d o e n v i a d a l a a l e r t a
66
p e r m i s o ( )#Llama a l a f u n c i o n p e r m i s o para
v e r i f i c a r s i fue desactivada la alerta
67
68 #Funcion i n i c i a l i z a r G P I O para i n i c i a r e l uso de l o s p i n e s d e l p i
69 Aqui s e r e g i s t r a n l o s p i n e s a u t i l i z a r para l a l e c t u r a de
t a r j e t a s
70 def i n i c i a l i z a r G p i o ( ) :
71
GPIO . s e t w a r n i n g s ( F a l s e )#Se c o l o c a n l a s a d v e r t e n c i a s en
falso

A.3. C
odigo en Python para la implementacion del sistema
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
106

77

#El modo de t r a b a j o en l o s p i n e s e s i m p o r t a n t e y de
c u i d a d o porque
#v a r i a n l o s numeros i n d i c a d o s a l o s p i n e s por GPIO o s o l o
pin X
GPIO . setmode (GPIO .BOARD)#Modo de t r a b a j o e s GPIO .BOARD
d i f e r e n t e de bcm
GPIO . s e t u p ( 1 1 , GPIO .OUT)#Coloca e l p i n 11 como s a l i d a
GPIO . s e t u p ( 1 3 , GPIO .OUT)#Coloca e l p i n 13 como s a l i d a
GPIO . s e t u p ( 1 5 , GPIO .OUT)#Coloca e l p i n 15 como s a l i d a
GPIO . s e t u p ( 4 0 ,GPIO .OUT)
#Coloca e l p i n 7 como e n t r a d a en modo P u l l UP c o r r e s p o n d e
a l s e n s o r magnetico
GPIO . s e t u p ( 7 ,GPIO . IN , p u l l u p d o w n=GPIO . PUD UP)#Coloca e l
p i n 7 como e n t r a d a
Funcion c i c l o s e e n c a r g a de e s t a r comprobando s i s e ha
i n g r e s a d o una t a r j e t a r f i d por e l l e c t o r
y s i n o r e a l i z a un c o n t e o r e g r e s i v o d e s d e 10 s , en e l momento que s e
d e s l i z a una t a r j e t a e l c i c l o s e t e r m i n a
y d e v u e l v e e l v a l o r i d de l a t a r j e t a
def c i c l o ( ) :
i n g r e s o = True#Coloca l a v a r i a b l e i n g r e s o en TRUE
c o n t a d o r= 10#I n i c i a l i z a e l c o n t a d o r
#El c i c l o s e r e p i t e m i e n t r a s i n g r e s o e s t e en a l t o y
c o n t a d o r d i f e r e n t e de 0
while ( i n g r e s o==True and c o n t a d o r !=0) :
doc=open ( alarma . t x t , r+)
doc . s e e k ( 0 , 0 )
armado=doc . r e a d ( 1 )
doc . c l o s e d
l e c t u r a = MFRC522 . MFRC522 ( )#D e f i n e l a f u n c i o n l e c t u r a como
l a c l a s e MFRC522 d e l l e c t o r
#Llama a l a f u n c i o n MFRC522 Request para o b t e n e r
e l e s t a d o de l e c t u r a y e l t i p o de t a r j e t a
( e s t a d o , t i p o ) = l e c t u r a . MFRC522 Request ( l e c t u r a .
PICC REQIDL)
#Llama a l a f u n c i o n MFRC522 Anticoll para o b t e n e r
e l e s t a d o de l e c t u r a y e l i d de l a t a r j e t a
e v i t a n d o c o l i s i o n de d a t o s
( e s t a d o , dato ) = l e c t u r a . MFRC522 Anticoll ( )
b u z z e r ( )#Llama a l a f u n c i o n b u z z e r para e m i t i r un p i t i d o
por segundo
print c o n t a d o r# Imprime e l v a l o r d e l c o n t a d o r en p a n t a l l a
c o n t a d o r=contador 1# Disminuye e l v a l o r d e l c o n t a d o r en
uno
#time . s l e e p ( 1 )
i f ( e s t a d o == l e c t u r a . MI OK) :#S i e l e s t a d o e s i g u a l a l a
v a r i a b l e MI OK d e l l e c t o r
l e c t u r a . AntennaOff ( )#Limpia l o s b i t s r e c i b i d o s
i n g r e s o=F a l s e#I n g r e s o en f a l s e
c o n t a d o r=0#Contador r e i n i c i a d o

78
107
108
109
110
111
112
113
114
115
116
117
118
119
120

A Apendice

#Devuelve l o s d a t o s o b t e n i d o s de l a s
listas
return s t r ( dato [ 0 ] ) +s t r ( dato [ 1 ] ) +s t r ( dato [ 2 ] ) +s t r ( dato
[ 3 ] ) +s t r ( dato [ 4 ] )
e l i f ( armado==0 ) :
print ( Alarma ha s i d o d e s a c t i v a d a )
i n g r e s o=F a l s e
c o n t a d o r=0
time . s l e e p ( 0 . 2 )
#Funcion l e e r T a g ( ) p e r m i t e o b t e n e r e l l o s d a t o s o b t e n i d o s en c i c l o
y a l m a c e n a r l o para su manejo
def l e e r T a g ( ) :
print ( D e s l i c e t a r j e t a o i n g r e s e c o d i g o )#Se s o l i c i t a l a
t a r j e t a o c o d i g o de desarme de l a alarma
global t a g I d#V a r i a b l e t a g I d g l o b a l
t a g I d=0# Valor i n i c i a l 0
t a g I d= c i c l o ( )#Se l l a m a l a f u n c i o n c i c l o y s e almacena su
v a l o r en t a g I d
encenderLed ( )#Enciende l e d r o j o s i s e d e t e c t a o s i s e
f i n a l i z o l a cuenta
b u z z e r ( )#Emite un p i t i d o con e l b u z z e r
apagarLed ( )#Apaga e l l e d r o j o
print ( t a g I d )#Imprime e l v a l o r d e l t a g I d en p a n t a l l a
return t a g I d#Devuelve e l t a g I d

121
122
123
124
125
126 #D e f i n e v a r i a b l e g l o b a l i n t e n t o s
127 global i n t e n t o s#V a r i a b l e g l o b a l
128 i n t e n t o s =3
#I n t e n t o s en 3 i n i c i a l m e n t e
129 La f u n c i o n p e r m i s o v e r i f i c a s i e x i s t e p e r m i s o para i n g r e s a r ,
mediante e l v a l o r d e l t a g I d#Devuelve
130 s i no r e c i b e e l t a g I d i n d i c a l a a c c i o n a r e a l i z a r y s i s e i n g r e s a
una t a r j e t a i n v a l i d a tambien
131 def p e r m i s o ( ) :
132
l e e r T a g ( )#Llama a l a f u n c i o n l e e r T a g para o b t e n e r e l v a l o r
de l a t a r j e t a
133
global t a g I d#I n d i c a que e l t a g I d e s g l o b a l
134
#a c c e s o=True
135
global i n t e n t o s #Llama a l a v a r i a b l e g l o b a l i n t e n t o s
136
global s 1
137
print i n t e n t o s #Imprime en c o n s o l a l a c a n t i d a d de i n t e n t o s
disponibles
138
doc=open ( alarma . t x t , r+)#Abre e l a r c h i v o alarma . t x t
139
doc . s e e k ( 0 , 0 )#Busca en l a p o s i c i o n 0 , 0
140
armado=doc . r e a d ( 1 )#L e e r e l v a l o r de un b i t
141
doc . c l o s e d#C i e r r a e l documento
142
#S i e l documento i n d i c a un v a l o r de uno l a alarma e s t a
activa
143
#Es d e c i r no s e ha d e s a c t i v a d o l a alarma mediante c o d i g o
por t a n t o
144
#p r o c e d a con l a s a c c i o n e s
145
i f ( armado==1 ) :# s i armado e s i g u a l a uno e n t o n c e s

A.3. C
odigo en Python para la implementacion del sistema
146
147
148
149
150
151

152
153
154
155
156
157
158
159
160

161
162

163

164
165

166

167
168
169

170
171
172

79

i f ( t a g I d==None ) :# S i e l t a g I d e s nulo , no s e
deslizo tarjeta
encenderLed ( )#Encender LED r o j o
apagarLed ( )#Apagar LED r o j o
print ( Alarma )#En c o n s o l a
d e s p l i e g a alarma
GPIO . output ( 4 0 , True )
#s u b p r o c e s s . Popen ( a p l a y a l a r m 0 1 .
wav , s h e l l=True )#Suene l a
s i r e n a o buzzer
a l e r t a ( )#Y l l a m e a l a f u n c i o n l a
alerta
#De o t r a manera s i s e i n s e r t o o d e s l i z o t a r j e t a
e l s e :#V e r i f i c a s i e l u s u a r i o e s t a en l a b a s e de
datos
u s u a r i o= b a s e d a t o s . V a l i d a r A c c e s o ( t a g I d )
print ( u s u a r i o )#Imprime u s u a r i o en
pantalla
i f ( u s u a r i o==None ) :#S i u s u a r i o e s n u l o
encenderLed ( )#Encienda l e d r o j o
apagarLed ( )#Apague e l l e d r o j o
print ( Acceso Denegado )#I n d i q u e
e l a c c e s o denegado a e s a
tarjeta
#S i i n t e n t o s e s d i f e r e n t e de c e r o
i f ( i n t e n t o s !=0) :#Tiene l a
p o s i b i l i d a d de i n g r e s a r o t r a
t a r j e t a o d e s a c t i v a r alarma
print D e s l i c e o t r a
t a r j e t a o c o d i g o \n
Tiene %d i n t e n t o s % (
intentos )
#g l o b a l i n t e n t o s
i n t e n t o s=i n t e n t o s 1#
Disminuya l a c a n t i d a d
de i n t e n t o s
#Llama a l a f u n c i o n
i n t e n t o s para
v e r i f i c a r s i se
ingresa tarjeta
correcta
#o s i s e d e s h a b i l i t a l a
alarma con c o d i g o
permiso ( )
print i n t e n t o s#Imprime
c a n t i d a d de i n t e n t o s
restantes
#a c c e s o=F a l s e
#De o t r a manera s i s e acabaron l o s
intentos
else :

80
173
174
175

176
177
178
179
180

181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

A Apendice

print ( Alarma )#D e s p l i e g u e


mensaje de a l e r t a
GPIO . output ( 4 0 , True )
#s u b p r o c e s s . Popen ( a p l a y
a l a r m 0 1 . wav , s h e l l=
True )#Suene s i r e n a
a l e r t a ( )#Llama a l a
funcion alerta
#S i s e i n g r e s o una t a r j e t a v a l i d a e n t o n c e s
else :
print B i e n v e n i d o #Imprima
bienvenido
b a s e d a t o s . I n s e r t a r A c c e s o ( t a g I d )#
I n g r e s e e l a c c e s o en l a b a s e
de d a t o s
encenderLedV ( )#Encender l e d v e r d e
#a c c e s o=F a l s e
i n t e n t o s =3#I n t e n t o s r e i n i c i a d o
GPIO . output ( 4 0 , F a l s e )
#s u b p r o c e s s . Popen ( a p l a y d 1
a l a r m 0 1 . wav , s h e l l=True )
e l s e :#S i s e i n g r e s o e l c o d i g o de d e s a c t i v a c i o n
#s e imprime en p a n t a l l a
print ( Alarma ha s i d o d e s a c t i v a d a )
GPIO . output ( 4 0 , F a l s e )
#s u b p r o c e s s . Popen ( a p l a y d 1 a l a r m 0 1 . wav , s h e l l=
True )
Funcion p r i n c i p a l de l e c t u r a , s e i n i c i a e l c i c l o de l e c t u r a
def l e c t u r a ( ) :
GPIO . c l e a n u p ( )#Se l i m p i a l o s d a t o s en l o s p i n e s d e l p i
global e n v i o#V a r i a b l e e n v i o g l o b a l
try :#Trate de r e a l i z a r
i n i c i a l i z a r G p i o ( )#I n i c i a l i z a r l o s p i n e s para
entrada y s a l i d a
c i c l o=True#c i c l o en a l t o
while c i c l o :#I n i c i a e l c i c l o de l e c t u r a
doc=open ( alarma . t x t , r+)#Abre e l doc
doc . s e e k ( 0 , 0 )#Se p o s i c i o n a en 0 , 0
armado=doc . r e a d ( 1 )#l e e e l v a l o r i n i c i a l de
un b i t
doc . c l o s e d#c i e r r a e l doc
i f ( armado==1 ) :#S i l a alarma s e e n c u e n t r a
habilitada
i f (GPIO . i n p u t ( 7 )==True ) :#Y s i e l
s e n s o r magnetico s e a c t i v o
p e r m i s o ( )#Llame a l a
funcion permiso
time . s l e e p ( 1 )#Espero un
segundo
else :

A.3. C
odigo en Python para la implementacion del sistema
208

print ( No pasa nada )#S i


e l s e n s o r no s e ha
activado
e n v i o=0#R e i n i c i a v a r i a b l e
e n v i o en 0
time . s l e e p ( 0 . 5 ) #Dar mas segundo
para c e r r a r

209
210
211
212
213
214
215
216
217
218

81

else :
print ( Alarma no a c t i v a )#S i l a
alarma e s t a d e s a c t i v a d a
time . s l e e p ( 1 )
#Para s a l i r d e l programa n e c e s i t a i n t e r r u m p i r e l c i c l o
mediante t e c l a d o usb
except K e y b o a r d I n t e r r u p t :
GPIO . c l e a n u p ( )#Limpia l o s d a t o s en l o s p i n e s
#Llama l a f u n c i o n p r i n c i p a l
lectura ()

Teclado.py
1 #Impor tar l o s modulos y l i b r e r i a s n e c e s a r i a s
2 import RPi . GPIO a s GPIO#Importa l a l i b r e r i a para e l manejo de l o s
pines del raspberry pines
3 import time#Importa time para e l manejo d e l tiempo
4
5 #Se i n i c i a l i z a l a l e c t u r a de l o s p i n e s en modo BOARD
6 GPIO . setmode (GPIO .BOARD)#Observar ques e s d i f e r e n t e de bcm
7
8 #Se c o n s t r u y e una m a t r i z 44 c o r r e s p o n d i e n t e a l o s v a l o r e s d e l
teclado
9 M= [ [ 1 , 2 , 3 , A ] ,
10
[ 4 , 5 , 6 , B ] ,
11
[ 7 , 8 , 9 , C ] ,
12
[ , 0 , # , D ] ]
13
14 #Se d e c l a r a n l a s f i l a s y columnas c o r r e s p o n d i e n t e s a l o s p i n e s de
entrada y s a l i d a
15 F i l = [ 3 6 , 3 2 , 1 8 , 1 6 ]#F i l a s c o r r e s p o n d e n a e n t r a d a s d e l s i s t e m a en
modo p u l l up
16 Col = [ 3 7 , 3 3 , 3 1 , 2 9 ]#Columnas d e l s i s t e m a como s a l i d a s
17 l i s t a = [ ]#Se i n i c i a l i z a l a l i s t a donde s e almacena e l c o d i g o
18 #I n i c i a c i c l o que toma l o s v a l o r e s de l a s columnas y l o s c o n v i e r t e
en s a l i d a s
19 f o r j in r a n g e ( 4 ) :
20
GPIO . s e t u p ( Col [ j ] , GPIO .OUT)#Cada columna en l a p o s i c i o n
s e d e c l a r a como s a l i d a
21
GPIO . output ( Col [ j ] , 1 )#Cada columna s e pone en a l t o
22
23 #I n i c i a c i c l o para c o l o c a r cada f i l a como e n t r a d a en modo p u l l up
24 f o r i in r a n g e ( 4 ) :
25
GPIO . s e t u p ( F i l [ i ] , GPIO . IN , p u l l u p d o w n=GPIO . PUD UP)#Cada
f i l a como e n t r a d a modo p u l l up

82

A Apendice

26 #Trate l o s i g u i e n t e
27 try :
28
while ( True ) :#Mantengase d e n t r o d e l c i c l o
29
GPIO . s e t u p ( 5 ,GPIO .OUT)#U t i l i c e e l p i n como s a l i d a
para u t i l i z a r o t r o b u z z e r
30
i f l e n ( l i s t a ) <4:#S i l a l i s t a e s menor a c u a t r o
digitos
31
f o r j in r a n g e ( 4 ) :#Para cada j en e l rango
de 44
32
GPIO . output ( Col [ j ] , 0 )#Pruebe
c o l o c a n d o cada columna en b a j o
33
34
f o r i in r a n g e ( 4 ) :#Por cada i en
e l rango de 44
35
i f GPIO . i n p u t ( F i l [ i ] ) ==0:#
S i cada f i l a e s t a b a j o
encontro e l d i g i t o
presionado
36
GPIO . output ( 5 , True
)#Suene e l
buzzer
37
time . s l e e p ( 0 . 1 )
38
GPIO . output ( 5 ,
F a l s e )#Apague
e l buzzer
39
l i s t a . append (M[ i ] [
j ] )#Agregue e l
valor a la
lista
40
print M[ i ] [ j ]#
Imprima e l
d i g i t o en
consola
41
print l i s t a#
Imprima l a
lista
42
#p r i n t l e n ( l i s t a )
43
time . s l e e p ( 0 . 2 )#
E spe r e 0 . 2 s
para e v i t a r
duplicar el
digito
44
while (GPIO . i n p u t (
F i l [ i ] ) ==0) :#
Si se esta
presionando
pase a l a
siguiente
accion
45
pass
46

A.3. C
odigo en Python para la implementacion del sistema
47
48
49
50
51
52
53
54
55
56

57

58

59
60
61
62
63
64
65
66
67

68
69
70
71
72
73

83

GPIO . output ( Col [ j ] , 1 )#Vuelva e l


v a l o r de l a columna a a l t o
e l s e : #De o t r a manera s i l a l i s t a e s de 4 e n t o n c e s
verifique
i f ( l i s t a ==[ A , 2 , 0 , 3 ] ) :#S i l a l i s t a e s
e l c o d i g o de h a b i l i t a r y d e s h a b i l i t a r
print b i n g o #Imprima b i n g o en
pantalla
l i s t a = [ ]#R e i n i c i a l i s t a
doc=open ( alarma . t x t , r+)#Abre
doc alarma . t x t
doc . s e e k ( 0 , 0 )#Busca l a p o s i c i o n
0 ,0
armado=doc . r e a d ( 1 )#Lee e l v a l o r de
un b i t
doc . c l o s e d#C i e r r a e l doc
i f ( armado==0 ) :#S i armado e s t a en
cero entonces h a b i l i t e la
alarma
f o r x in r a n g e ( 5 ) :#C i c l o
de c o n t e o para dar
tiempo de c e r r a r
puerta
GPIO . output ( 5 , True
)#Emite 5
pitidos largos
time . s l e e p ( 0 . 4 )
GPIO . output ( 5 ,
False )
time . s l e e p ( 1 )
doc=open ( alarma . t x t , r+
)#Abre doc alarma . t x t
doc . s e e k ( 0 , 0 )#Busca l a
p o s i c i o n 0 ,0
doc . w r i t e ( 1 )#E s c r i b e e l
v a l o r 1 de armado
prueba=doc . r e a d ( 1 )
doc . c l o s e d #C i e r r a e l doc
print El s i s t e m a ha s i d o
armado #I n d i c a que e l
s i s t e m a ha s i d o
habilitado
GPIO . output ( 5 , True )#Emite
pitido corto
time . s l e e p ( 0 . 1 )
GPIO . output ( 5 , F a l s e )
else :
doc=open ( alarma . t x t , r+
)#Abre doc alarma . t x t

84
74
75
76
77
78

79

80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

A Apendice

doc . s e e k ( 0 , 0 )#Busca l a
p o s i c i o n 0 ,0
doc . w r i t e ( 0 )#E s c r i b e e l
v a l o r 0 de armado
prueba=doc . r e a d ( 1 )
doc . c l o s e d #C i e r r a e l doc
print El s i s t e m a s e ha
desarmado #I n d i c a que
e l s i s t e m a ha s i d o
deshabilitado
GPIO . output ( 5 , True )#I n d i c a
con dos p i t i d o s
cortos
time . s l e e p ( 0 . 1 )
GPIO . output ( 5 , F a l s e )
time . s l e e p ( 0 . 1 )
GPIO . output ( 5 , True )
time . s l e e p ( 0 . 1 )
GPIO . output ( 5 , F a l s e )
e l s e :#S i e l c o d i g o e s i n c o r r e c t o l o i n d i c a
y reinicia la l i s t a
GPIO . output ( 5 , True )
time . s l e e p ( 1 )
GPIO . output ( 5 , F a l s e )
print Codigo i n c o r r e c t o
l i s t a =[]
#Se puede d e t e n e r mediante e l t e c l a d o usb
except K e y b o a r d I n t e r r u p t :
GPIO . c l e a n u p ( )#Limpia l o s d a t o s en l o s p i n e s

Alarma.txt
Este archivo es un documento simple con permisos de lectura y escritura para
los usuarios, de tal manera que el sistema se puede habilitar o deshablitar a
traves de poner un alto (1) o un bajo (0) mediante el codigo ingresado por el
teclado.

A.4. C
odigo en PHP y HTML para la implementacion del sistema

A.4

85

C
odigo en PHP y HTML para la
implementaci
on del sistema

Accesos.php
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
<html l a n g=EN xml : l a n g=EN
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
<head>
<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >
</ s t y l e >
</head>

28
29
30
31
32 <body>
33 <![ i f
34 <![ i f
35 <![ i f
36 <![ i f

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>

86
37
38
39
40
41
42
43
44

45

46

47

48

49

50

51

52

53

A Apendice
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><

A.4. C
odigo en PHP y HTML para la implementacion del sistema

87

span>S a l i r </span></
a></ l i >
54
55
56
57
58
59

60
61

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

</ul>
</div ><! f i n a l i z a menu
>
</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>
<p>&nbsp ; </p>
<h1> Tabla de a c c e s o s r e g i s t r a d o s
</h1><! Tabla de a c c e s o s
r e g i s t r a d o s >
<form a c t i o n= a c c e s o s . php method=POST>
<i n p u t type=hidden name= l i m p i a r v a l u e= l i m p i a r >
<i n p u t type=submit v a l u e=LIMPIAR TABLA>
</form>
<?php
i f ( i s s e t ( $ POST [ l i m p i a r ] ) ) {
$ l i m p i a r=$ POST [ l i m p i a r ] ;
$query= DELETE FROM a c c e s o s WHERE 1 ;
$query2=ALTER TABLE a c c e s o s AUTO INCREMENT= 1 ;
// / S i l a s o l i c i t u d e s t a en t r u e
i f ( mysql query ( $query ) ) {
echo <f o n t s i z e =6, c o l o r =r e d > La t a b l a ha s i d o l i m p i a d a </
f o n t > ; // U s u a r i o e l i m i n a d o
header ( L o c a t i o n : a c c e s o s . php ) ;
mysql query ( $query2 ) ;
} else {
echo D i s c u l p e , i n t e n t e de nuevo ; // I n t e n t e de nuevo s i no s e pudo
}
}
?>
<! I n i c i a t a b l a de a c c e s o s >
<d i v i d=d i v 1 >
<t a b l e width= 500 a l i g n= c e n t e r b o r d e r=
3 >
<th>I d e n t i f i c a c i o n </th>
<th>Usuario </th>
<th>Fecha</th>
<th>Hora</th>
<?php
// I n i c i a e l query o s o l i c i t u d a l a bas de
datos
$query = SELECT FROM a c c e s o s WHERE 1
;

88
93
94
95
96
97

98

99
100

101

102

103

104

105

106
107

A Apendice

// S i l a s o l i c i t u d e s v e r d a d e r a c o n t i n u e
i f ( $ q u e r y r u n = mysql query ( $query ) ) {
i f ( mysql num rows ( $ q u e r y r u n )==
NULL) { // S i l a c a n t i d a d de
f i l a s con d a t o s e s n u l a
echo <f o n t s i z e =4,
c o l o r =r e d >No hay
r e s u l t a d o s </f o n t > ; //
I n d i c a que no hay
r e s u l t a d o s por e l
momento
} e l s e { //De o t r a manera s i hay
resultados entonces
// D e s p l a c e e l v e c t o r de
s o l i c i t u d f i l a por
f i l a indicando l o s
d a t o s d e n t r o de l a
tabla
while ( $query row =
mysql fetch assoc (
$query run ) ) {
$ i d = $query row [
i d ] ; // Obtenga
e l i d de cada
fila
$usuario =
$query row [
nombre ] ; //
Obtenga e l
u s u a r i o de
cada f i l a
$fecha =
$query row [
f e c h a ] ; //
Obtenga l a
f e c h a de cada
fila
$hora= $query row [
hora ] ; //
Obtenga l a
hora de cada
fila
?>
<! I n s e r t a l o s
d a t o s en l a
tabla mientras
el ciclo
encuentre
d a t o s nuevos

A.4. C
odigo en PHP y HTML para la implementacion del sistema

>
<t r a l i g n= c e n t e r
>
<td><?php echo $ i d
;?></td><!
almacena e l i d
en l a t a b l a
>
<td><?php echo
$ u s u a r i o ;?></
td><!
almacena e l
u s u a r i o en l a
t a b l a >
<td><?php echo
$ f e c h a ;?></td
><! almacena
e l nombre en
l a t a b l a >
<td><?php echo
$hora ;?></td
><! almacena
el apellido
en l a t a b l a >
</t r >

108
109

110

111

112

113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

89

<?php
}
}
// S i l a s o l i c t u d e s i n c o r r e c t a e n t o n c e s
despliegue el error
} else {
echo mysql error ( ) ; // e r r o r en l a
b a s e de d a t o s
}
?>
</ t a b l e >
</div>
</div>
</div ><! Contenido a l f i n a l >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>

90

A Apendice

135

< l i >C h r i s t i a n Chaves B. </


li >

136
137
138

</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160

<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {
// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
include i n i c i a r s e s i o n . php ;
}
?>

Alertar.php
1
2
3

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
// r e q u i r e f u n c i o n e s . php ; / / Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
$query = UPDATE a l e r t a s SET check =1 WHERE 1 ;
$ q u e r y r u n = mysql query ( $query ) ;

4
5
6
7
8 ?>
9
10 <body>
11 <f o n t s i z e=10 , c o l o r=r e d >A l e r t a </f o n t ><!Mensaje de a l e r t a >
12 <d i v i d= l o g o c l a s s=bootonbanner ><! U t i l i z a l a imagen como un
banner>
13 <img s r c=images / images . j p g ><!Imagen de a l e r t a >
14 </body>

Alertas.php

A.4. C
odigo en PHP y HTML para la implementacion del sistema
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
<html l a n g=EN xml : l a n g=EN
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
<head>
<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >
</ s t y l e >
</head>

27
28
29
30
31 <body>
32 <![ i f
33 <![ i f
34 <![ i f
35 <![ i f
36
37
38
39
40

91

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >

92
41
42
43

44

45

46

47

48

49

50

51

52

53
54
55

A Apendice
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>
</div ><! f i n a l i z a menu
>
</div>

A.4. C
odigo en PHP y HTML para la implementacion del sistema
56
57

58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

85
86
87
88
89
90

93

</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>
<p>&nbsp ; </p>
<! Tabla de a c c e s o s no
a u t o r i z a d o s >
<h1> Tabla de a c c e s o s no
a u t o r i z a d o s </h1>
<form a c t i o n= a l e r t a s . php method=POST>
<i n p u t type=hidden name= l i m p i a r v a l u e= l i m p i a r >
<i n p u t type=submit v a l u e=LIMPIAR TABLA>
</form>
<?php
i f ( i s s e t ( $ POST [ l i m p i a r ] ) ) {
$ l i m p i a r=$ POST [ l i m p i a r ] ;
$query= DELETE FROM a l e r t a s WHERE 1 ;
$query2=ALTER TABLE a l e r t a s AUTO INCREMENT= 1 ;
// / S i l a s o l i c i t u d e s t a en t r u e
i f ( mysql query ( $query ) ) {
echo <f o n t s i z e =6, c o l o r =r e d > La t a b l a ha s i d o l i m p i a d a </
f o n t > ; // U s u a r i o e l i m i n a d o
header ( L o c a t i o n : a l e r t a s . php ) ;
mysql query ( $query2 ) ;
} else {
echo D i s c u l p e , i n t e n t e de nuevo ; // I n t e n t e de nuevo s i no s e pudo
}
}
?>
<d i v i d=d i v 1 >
<t a b l e width= 500 a l i g n= c e n t e r b o r d e r=
3 >
<th>I n g r e s o </th><! numero de i n g r e s o
>
<th>Lugar</th><! l u g a r de i n g r e s o no
a u t o r i z a d o >
<th>t a g I d </th><! t a g i d s i e s que s e
i n g r e s o con una t a r j e t a no a u t o r i z a d a
>
<th>Fecha</th><! f e c h a de a c c e s o no
p e r m i t i d o >
<th>Hora</th><! hora de a c c e s o no
p e r m i t i d o >
<?php
// I n i c i a e l query o s o l i c i t u d a l a bas de
datos
$query = SELECT FROM a l e r t a s WHERE 1
;

94
91
92
93
94
95
96

97

98
99

100

101

102

103

104

105

106

A Apendice
// Se r e f r e s c a cada 10 s para v e r s i hay
alerta
$ s e l f=$ SERVER [ PHP SELF ] ;
header ( r e f r e s h : 1 0 ; u r l=$ s e l f ) ;
// S i l a s o l i c i t u d e s v e r d a d e r a c o n t i n u e
i f ( $ q u e r y r u n = mysql query ( $query ) ) {
i f ( mysql num rows ( $ q u e r y r u n )==
NULL) { // S i l a c a n t i d a d de
f i l a s con d a t o s e s n u l a
echo <f o n t s i z e =4,
c o l o r =r e d >No hay
r e s u l t a d o s </f o n t > ; //
I n d i c a que no hay
r e s u l t a d o s por e l
momento
} else {
// D e s p l a c e e l v e c t o r de
s o l i c i t u d f i l a por
f i l a indicando l o s
d a t o s d e n t r o de l a
tabla
while ( $query row =
mysql fetch assoc (
$query run ) ) {
$numero2=
mysql num rows
( $query run ) ;
$ i d = $query row [
i d ] ; // Obtenga
e l i d de cada
fila
$lugar =
$query row [
Lugar ] ; //
Obtenga e l
l u g a r de cada
fila
$tagId =
$query row [
t a g I d ] ; //
Obtenga e l
t a g i d de cada
fila
$fecha =
$query row [
f e c h a ] ; //
Obtenga l a
f e c h a de cada
fila
$hora= $query row [
hora ] ; //

A.4. C
odigo en PHP y HTML para la implementacion del sistema

Obtenga l a
hora de cada
fila
$ b i t= $query row [
check ] ;

107
108
109
110

111
112

113

114

115

116

117
118
119
120
121

122

95

?>
<! I n s e r t a l o s
d a t o s en l a
tabla mientras
el ciclo
encuentre
d a t o s nuevos
>
<t r a l i g n= c e n t e r
>
<td><?php echo $ i d
;?></td><!
almacena e l i d
en l a t a b l a
>
<td><?php echo
$ l u g a r ;?></td
><! almacena
e l l u g a r en
l a t a b l a >
<td><?php echo
$ t a g I d ;?></td
><! almacena
e l t a g I d en
l a t a b l a >
<td><?php echo
$ f e c h a ;?></td
><! almacena
l a f e c h a en
l a t a b l a >
<td><?php echo
$hora ;?></td
><! almacena
l a hora en l a
t a b l a >
</t r >
<?php
i f ( $ b i t== 0 ) {
?>
< s c r i p t l a n g u a g e=
JavaScript
type= t e x t /
j a v a s c r i p t >
<!

96

A Apendice

123

124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

window . open (
a l e r t a r . php ,
a l e r t a , width
=300 , h e i g h t
=280 )
//>
</ s c r i p t >
<?php
}
}
}
// S i l a s o l i c t u d e s i n c o r r e c t a e n t o n c e s
despliegue el error
} else {
echo mysql error ( ) ; // e r r o r en l a
b a s e de d a t o s
}
?>
</ t a b l e >
</div>
</div>
</div ><! Contenido a l f i n a l >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>
<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >

A.4. C
odigo en PHP y HTML para la implementacion del sistema
162
163
164
165
166
167
168
169
170
171
172
173

97

</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {
// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
include i n i c i a r s e s i o n . php ;
}
?>

borrar usuario.php
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
<html l a n g=EN xml : l a n g=EN
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
<head>
<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >

98
28
29 </head>
30
31 <body>
32 <![ i f
33 <![ i f
34 <![ i f
35 <![ i f
36
37
38
39
40
41
42
43

44

45

46

47

48

49

50

A Apendice
</ s t y l e >

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><

A.4. C
odigo en PHP y HTML para la implementacion del sistema

span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>
</div ><! f i n a l i z a menu
>

51

52

53
54
55
56
57

</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>

58
59
60
61
62
63

<p>&nbsp ; </p>
<p>&nbsp ; </p>
<?php
// Mediante e l metodo g e t o b t i e n e
e l u s u a r i o a e l i m i n a r de l a
t a b l a u s u a r i o s 2 . php
$ b o r r a r u s u a r i o = $ GET [
borrar usuario ] ;
// / P r o c e s o de e l i m i n a r en l a b a s e
de d a t o s
$query= DELETE from u s u a r i o s
WHERE i d = $ b o r r a r u s u a r i o ;
$query2=ALTER TABLE u s u a r i o s
AUTO INCREMENT= 1 ;
// / S i l a s o l i c i t u d e s t a en t r u e
i f ( mysql query ( $query ) ) {
echo <f o n t s i z e =6,
c o l o r =r e d > El
u s u a r i o ha s i d o
e l i m i n a d o </f o n t > ; //
Usuario eliminado
mysql query ( $query2 ) ;
} else {
echo D i s c u l p e , i n t e n t e de
nuevo ; // I n t e n t e de
nuevo s i no s e pudo
}

64
65
66
67
68
69
70

71
72
73

74
75
76
77

99

?>
</div>

100

A Apendice

78
79
80
81
82
83

</div ><! Contenido a l f i n a l >


<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {
// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
include i n i c i a r s e s i o n . php ;
}
?>

camara.php
1
2
3
4
5

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a

A.4. C
odigo en PHP y HTML para la implementacion del sistema
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
<html l a n g=EN xml : l a n g=EN
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
<head>
<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >
</ s t y l e >
</head>

27
28
29
30
31 <body>
32 <![ i f
33 <![ i f
34 <![ i f
35 <![ i f
36
37
38
39
40
41
42
43

101

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >

102
44

45

46

47

48

49

50

51

52

53
54
55
56
57

58

A Apendice
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>
</div ><! f i n a l i z a menu
>
</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>
<p>&nbsp ; </p>

A.4. C
odigo en PHP y HTML para la implementacion del sistema
59

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

103

<h1> CAmara
de v i g i l a n c i a remota
</h1><!Contenido para e l
manejo de una camara web>
<p>&nbsp ; </p>
ralo
c
<h2>Esp A
muy p r o n t o ! </h2>
<p>&nbsp ; </p>
<! I n s e r t a l a imagen de una camara>
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / camara . j p g >
</div>
</div ><! Contenido a l f i n a l >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>
<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {
// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d

104
101
102
103

A Apendice

include i n i c i a r s e s i o n . php ;
}
?>

conexion.php
1
2
3

4
5
6
7
8
9
10
11
12
13
14
15

<?php
// Permite l a c o n e x i o n con l a b a s e de d a t o s
$ c o n n e r r o r = No s e puede c o n e c t a r a l a b a s e de d a t o s ; // Se
i n d i c a e l e r r o r en e l c a s o de no poder c o n e c t a r con l a b a s e
datos
// Se i n d i c a n l o s p a r a m e t r o s d e l host , u s u a r i o y c o n t r a s e n a
$mysql host = l o c a l h o s t ;
$mysql user = root ;
$mysql pass = ;
//Nombre de l a b a s e de d a t o s a c o n e c t a r
$mysql db = b a s e d a t o s 1 ;
// S i no s e puede c o n e c t a r o no puede s e l e c c i o n a r l a b a s e d a t o s
entonces indique e l error
i f ( ! @mysql connect ( $ m y s q l h o s t , $ m y s q l u s e r , $ m y s q l p a s s ) | | !
@ m y s q l s e l e c t d b ( $mysql db ) ) {
die ( $ c o n n e r r o r ) ;
}
?>

funciones.php
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17

<?php
ob start ( ) ; // A c t i v a e l almacenamiento en e l b u f f e r de s a l i d a
s e s s i o n s t a r t ( ) ; // Crea una s e s i o n o reanuda l a a c t u a l basada en
una s e s i o n pasada
$ v a r i a b l e =0;
$ c u r r e n t f i l e = $ SERVER [ SCRIPT NAME ] ; // Almacena en que p a g i n a
esta
@ $ h t t p r e f e r e r = $ SERVER [ HTTP REFERER ] ; // Hace r e f e r e n c i a a l a
p a g i n a que v i e n e
// Funcion l o g g e d i n s i s e ha i n g r e s a d o l o s d a t o s puede i n i c i a r
sesion
function loggedin () {
i f ( i s s e t ( $ SESSION [ u s u a r i o i d ] ) &&!empty( $ SESSION [
u s u a r i o i d ] ) ) { // S i s e ha i n g r e s a d o un v a l o r de
u s u a r i o o no e s t a v a c i o
r e t u r n true ; // Devuelve t r u e
} else {
r e t u r n f a l s e ; // Devuelve f a l s e
}
}
// Funcion g e t u s e r f i e l d p e r m i t e o b t e n e r l o s d a t o s d e l u s u a r i o
function getuserfield ( $ f i e l d ){

A.4. C
odigo en PHP y HTML para la implementacion del sistema
18

$query = SELECT $ f i e l d FROM u s u a r i o s WHERE id = .


$ SESSION [ u s u a r i o i d ] . ; // S e l e c c i o n a l o que s e
d e s e a d e l u s u a r i o donde u s u a r i o i d c o r r e s p o n d e a l
identificador
i f ( $ q u e r y r u n = mysql query ( $query ) ) { // S o l i c i t a l a
p e t i c i o n a l a b a s e de d a t o s
i f ( $ q u e r y r e s u l t = mysql result ( $query run , 0 ,
$ f i e l d ) ) { // S i hay un r e s u l t a d o d e v u e l v a l o
r e t u r n $ q u e r y r e s u l t ; // Return r e s u l t a d o
}
}

19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

105

}
function limpiar () {
// / P r o c e s o de e l i m i n a r en l a b a s e de d a t o s
$query= DELETE FROM b a s e d a t o s 1 . a c c e s o s WHERE a c c e s o s
. id = 7 ;
// / S i l a s o l i c i t u d e s t a en t r u e
i f ( mysql query ( $query ) ) {
echo <f o n t s i z e =6, c o l o r =r e d > El u s u a r i o ha s i d o
e l i m i n a d o </f o n t > ; // U s u a r i o e l i m i n a d o
} else {
echo D i s c u l p e , i n t e n t e de nuevo ; // I n t e n t e de nuevo s i no
s e pudo
}
}
?>

index.php
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>

106

A Apendice

17 <html l a n g=EN xml : l a n g=EN


18
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
19
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
20
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
21
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
22 <head>
23 <!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
24
< t i t l e >CCB</ t i t l e >
25
<meta c o n t e n t= t e x t / html ; c h a r s e t=ISO885915 httpe q u i v=
ContentType >
26
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
27
< s t y l e type= t e x t / c s s >
28
</ s t y l e >
29 </head>
30
31 <body>
32 <![ i f IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>
33 <![ i f l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
34 <![ i f IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
35 <![ i f g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
36
<d i v i d=wrapper ><! wrapper >
37
<!D e f i n e l a imagen s u p e r i o r o banner>
38
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
39
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
40
<d i v i d= c o n t e n t ><! c o n t e n i d o >
41
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
42
<div ><! menu de t a b s >
43
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
44
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
45
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
46
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >

A.4. C
odigo en PHP y HTML para la implementacion del sistema
47

<l i

48

<l i

49

<l i

50

<l i

51

<l i

52

<l i

53
54
55
56
57

c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >

</ul>
</div ><! menu >
</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>

58
59
60
61

<p>&nbsp ; </p>
<h1> I n t r o d u c c i&o a c u t e ; n</h1><!
I n d i c a una i n t r o d u c c i o n >
<p>&nbsp ; </p>
<p>Esta p a
g i n a web p e r m i t e e l
manejo de u s u a r i o s de una
aplicacio
n electro
n i c a para e l
c o n t r o l de a c c e s o s .</p>

62
63

64
65
66
67
68
69
70

107

</div>
</div ><! Contenido i n f e r i o r >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >

108

A Apendice

71

<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno:</h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>

72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {
// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
include i n i c i a r s e s i o n . php ;
}
?>

iniciar sesion.php
1 <! I n i c i o d e l HTML>
2 <! D e c l a r a c i o n d e l t i p o de documento>
3 <!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
4 h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
5 <! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
6 <! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
7 <html l a n g=EN xml : l a n g=EN
8
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
9
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
10
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
11
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
12 <head>

A.4. C
odigo en PHP y HTML para la implementacion del sistema
13
14
15
16

<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >
</ s t y l e >
</head>

17
18
19
20
21 <body>
22 <![ i f
23 <![ i f
24 <![ i f
25 <![ i f
26
27
28
29
30
31
32
33
34
35
36
37
38
39

40

41

42

109

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<! c o n t e n i d o a l c e n t r o >
<d i v c l a s s=redondo i d= c e n t e r c o n t e n t >
<h1> I n i c i a r S e s i o n </h1><!
I n i c i a r s e s i o n >
<p>&nbsp ; </p>
<?php

// echo < f o n t s i z e =6
c o l o r =r e d >Debe
i n i c i a r s e s i o n para
registrar o consultar
u s u a r i o s <br></f o n t > ;
// Comprueba que l o s campos
de u s u a r i o y
c o n t r a s e n a hayan s i d o
insertados
i f ( i s s e t ( $ POST [ u s u a r i o
] )&&i s s e t ( $ POST [
contrasena ] ) ){
$ u s u a r i o = $ POST [
u s u a r i o ] ; //
Almacena e l
valor usuario
en una
variable

110
43

44

45
46

47

A Apendice
$contrasena =
$ POST [
contrasena ] ;
// Almacena e l
valor
c o n t r a s e n a en
una v a r i a b l e
$ c o n t r a s e n a h a s h=
md5(
$contrasena ) ;
// Se l e da un
e n c r i p t a d o de
m5 por
seguridad
i f ( ! empty(
$ u s u a r i o )&&!
empty(
$contrasena ) ) {
// S i l o s
campos no
estan vacios
vaya a l a b a s e
de d a t o s
$query=
SELECT
id
FROM
usuarios

WHERE

usuario
= .
mysql real escape string
(
$usuario
) .
AND
contrasena
= .
mysql real escape string
(
$contrasena hash
) . ;
//
Seleccione
e l id
de l a
tabla

A.4. C
odigo en PHP y HTML para la implementacion del sistema

111
usuarios
donde
usuario
y
contrasena

48

49

encriptada
estan
if (
$query run
=
mysql query
(
$query
) ) { //
Solicitud
a la
base
de
datos
$query num rows
=
mysql num rows
(
$query run
)
;
//
Almacena
cantidad
de
filas

50

if
(
$query num rows
==0)
{
//
Si
no
hay

112

A Apendice
ningun
dato

51

echo

Usuario
/
contrasena
incorrectos
.

;
//
Los
datos
son
incorrectos

52

}
else
if
(
$query num rows
==1)
{
//
Si
existe
el
usuario
y
la
contrasena
entonces
inicie

A.4. C
odigo en PHP y HTML para la implementacion del sistema

113

sesion
53

$usuario id
=

mysql resu
(
$que ry r un
,
0,

id

)
;
//
Almacene
el
id
del
usuario
54

$ SESSION
[

usuario id

]=
$usuario i
;
//
Inicia
una
sesion
con
el
usuario

114

A Apendice
id

55

header
(

Location
:
index
.
php

)
;
//
Redirijase
a
index
.
php
}

56
57
58
59
60

}
} else {
echo
Usted
debe
ingresar
usuario
y
contrasena
. ; //
S i no
ingreso
los
campos
entonces
indiquelo

61
62
63
64
65

}
}
?>

A.4. C
odigo en PHP y HTML para la implementacion del sistema
66

<!D e f i n e un form para tomar


informacion del usuario
mediante metodo POST>
<form a c t i o n = <?php echo
$ c u r r e n t f i l e ; ?> method =
POST>
U s u a r i o : <i n p u t type= t e x t name
= u s u a r i o > c o n t r a s e n a : <i n p u t
type= password name=
c o n t r a s e n a >
<i n p u t type=submit v a l u e=
I n i c i a r >
</form><! F i n a l i z a form>

67

68

69
70
71
72
73
74
75
76
77

</div>
</div ><! Contenido a l f i n a l >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>

78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

115

<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>

116

A Apendice

registro.php

1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
<html l a n g=EN xml : l a n g=EN
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
<head>
<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >
</ s t y l e >
</head>

27
28
29
30
31 <body>
32 <![ i f
33 <![ i f
34 <![ i f
35 <![ i f
36
37
38

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>

A.4. C
odigo en PHP y HTML para la implementacion del sistema
39
40
41
42
43

44

45

46

47

48

49

50

51

52

53

117

<!D e f i n e que s e empieza a t r a b a j a r en e l


c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>

118
54
55
56
57

58
59
60

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

82

83

84
85

A Apendice
</div ><! f i n a l i z a menu
>
</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>
<p>&nbsp ; </p>
<h1> R e g i s t r o de u s u a r i o s </h1><!
Contenido para e l r e g i s t r o de
u s u a r i o s >
<p>&nbsp ; </p>

<?php
// Comprueba que s e haya i n g r e s a d o t o d o s l o s v a l o r e s y l o s almacena
en v a r i a b l e s mediante e l metodo POST
if (
i s s e t ( $ POST [ u s u a r i o ] )&&
i s s e t ( $ POST [ c o n t r a s e n a ] )&&
i s s e t ( $ POST [ c o n t r a s e n a r e p e t i r ] )&&
i s s e t ( $ POST [ nombre ] )&&
i s s e t ( $ POST [ a p e l l i d o ] )&&
i s s e t ( $ POST [ t a g I d ] ) ) {
// Almacena l o s d a t o s o b t e n i d o s mediante e l POST en
v a r i a b l e s para su r e s p e c t i v o manejo
$ u s u a r i o = $ POST [ u s u a r i o ] ;
$ c o n t r a s e n a = $ POST [ c o n t r a s e n a ] ;
$ c o n t r a s e n a r e p e t i r = $ POST [ c o n t r a s e n a r e p e t i r
];
$ c o n t r a s e n a h a s h = md5( $ c o n t r a s e n a ) ;
$nombre = $ POST [ nombre ] ;
$ a p e l l i d o= $ POST [ a p e l l i d o ] ;
$ t a g I d= $ POST [ t a g I d ] ;
// S i no quedo ningun e s p a c i o v a c i o c o n t i n u e
i f ( ! empty( $ u s u a r i o )&&!empty( $ c o n t r a s e n a )&&!empty(
$ c o n t r a s e n a r e p e t i r )&&!empty( $nombre )&&!empty(
$ a p e l l i d o )&&!empty( $ t a g I d ) ) {
i f ( s t r l e n ( $ u s u a r i o ) >30|| s t r l e n ( $nombre )
>40|| s t r l e n ( $ a p e l l i d o ) >40){ // S i no
s o b r e p a s o e l tamano de c a r a c t e r e s que
p e r m i t e l a b a s e de d a t o s
echo No s o b r e p a s e l a c a n t i d a d de
c a r a c t e r e s ; // S i s e e x c e d e e l
e s p a c i o a s i g n a d o en b a s e de
d a t o s para l o s campos
indiquelo
} else {
i f ( $ c o n t r a s e n a !=
$ c o n t r a s e n a r e p e t i r ) { // S i l a s

A.4. C
odigo en PHP y HTML para la implementacion del sistema

86
87
88
89

90

91
92

93

94

95

119

c o n t r a s e n a s no c o i n c i d e n l o
indica
echo c o n t r a s e n a s no
coinciden . ;
} else {
// / P r o c e s o de r e g i s t r o en
l a b a s e de d a t o s
$query = SELECT u s u a r i o
FROM u s u a r i o s WHERE
u s u a r i o = $ u s u a r i o
; // S e l e c c i o n a l a t a b l a
usuarios el espacio
u s u a r i o donde l a
variable es igual a
algun usuario
existente
$ q u e r y r u n = mysql query (
$query ) ; // I n i c i a l a
p e t i c i o n a l a b a s e de
datos
i f ( mysql num rows (
$ q u e r y r u n )==1){ // S i
e l u s u a r i o ya e x i s t e
indiquelo
echo El u s u a r i o
. $ u s u a r i o . ya
existe . ;
} e l s e { //De o t r a manera
i n s e r t e l o s v a l o r e s en
l a b a s e de d a t o s
$query = INSERT
INTO u s u a r i o s
VALUES ( ,
.
mysql real escape
( $usuario ) .
, .
mysql real escape
(
$contrasena hash
) . , .
mysql real escape
( $nombre ) . ,
.
mysql real escape
( $apellido ) .
, .
mysql real escape
( $tagId ) . ) ;

string

string

string

string

string

120

A Apendice

96

i f ( $query run =
mysql query (
$query ) ) {
header (
Location
:
registro exitoso
. php )
; //
Vaya a

97

registro
exitoso
} else
echo Contacte a l
administrador .
; // Algun
problema
c o n t a c t e con
el
administrador

98
99

100
101
102
103
104

105
106
107
108

109
110
111

112

113

}
}
} else {
echo Todos l o s campos son n e c e s a r i o s . ; //
Si se dejo algun e s p a c i o s i n e s c r i b i r
i n d i q u e e l problema
}
}
?>
<!D e f i n e un form para tomar
informacion del usuario
mediante metodo POST>
<p></p>
<form a c t i o n= r e g i s t r o . php method
=POST>
<!Se s o l i c i t a u s u a r i o ,
c o n t r a s e n a 2 v e c e s , nombre ,
a p e l l i d o , tagID>
U s u a r i o :< br> <i n p u t type= t e x t
name= u s u a r i o maxlength= 30
v a l u e=<?php echo @$usuario ;
?> ><br><br><!u s u a r i o l i m i t e
de v a l o r e s 30 max>
Contrasena :< br> <i n p u t type=
password name= c o n t r a s e n a ><
br><br><!D e f i n e l a
c o n t r a s e n a l i m i t e de v a l o r e s

A.4. C
odigo en PHP y HTML para la implementacion del sistema

no i n d i c a d o >
R e p e t i r c o n t r a s e n a : <br> <i n p u t
type=password name=
c o n t r a s e n a r e p e t i r ><br><br
><!R e p i t e l a c o n t r a s e n a
l i m i t e de v a l o r e s no i n d i c a d o
>
Nombre:< br> <i n p u t type= t e x t
name=nombre maxlength= 40
v a l u e=<?php echo @$nombre ; ?>
><br><br><!Nombre d e l
u s u a r i o l i m i t e de v a l o r e s 40
max>
A p e l l i d o :< br> <i n p u t type= t e x t
name= a p e l l i d o maxlength= 40
v a l u e=<?php echo @ $ a p e l l i d o
; ?> ><br><br><!A p e l l i d o d e l
u s u a r i o l i m i t e de v a l o r e s 40
max>
t a g I d :< br> <i n p u t type= t e x t name
= t a g I d maxlength= 40 v a l u e
=<?php echo @$tagId ; ?> ><br
><br><!D e f i n e e l t a g I d
l i m i t e de v a l o r e s 40 i n d i c a d o
>
<i n p u t type=submit v a l u e=
R e g i s t r a r >
</form><! F i n a l i z a form>

114

115

116

117

118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

121

</div>
</div ><! Contenido a l f i n a l >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>

122

A Apendice

138
139
140
141
142
143
144
145
146
147

< l i >Dr . Jaime Cascante </ l i


>
</ul>
</div>
<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >

148
149 </body>
150 </html>
151 <?php
152 } e l s e {
153 // S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
154 include i n i c i a r s e s i o n . php ;
155 ?>
156 <body>
157 <d i v c l a s s=redondo i d= r i g h t c o n t e n t >
158
159
<p>&nbsp ; </p>
160 <h1> Debe i n i c i a r s e s i o n para e l r e g i s t r o de u s u a r i o s </h1><!
D e s p l i e g a msj i n d i c a n d o que n e c e s i t a i n i c i a r s e s i o n >
161 </div>
162 </body>
163 <?php
164 }
165 ?>

registro exitoso.php
1
2
3
4
5
6
7
8
9

10
11
12
13

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >

A.4. C
odigo en PHP y HTML para la implementacion del sistema

123

14 <html l a n g=EN xml : l a n g=EN


15
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
16
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
17
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
18
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
19 <head>
20
< t i t l e >CCB</ t i t l e >
21
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
22
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s >
23
< s t y l e type= t e x t / c s s >
24
</ s t y l e >
25 </head>
26
27 <! I n i c i o d e l HTML>
28 <! D e c l a r a c i o n d e l t i p o de documento>
29 <!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
30 h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
31 <! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
32 <! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
33 <html l a n g=EN xml : l a n g=EN
34
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
35
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
36
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
37
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
38 <head>
39 <!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
40
< t i t l e >CCB</ t i t l e >
41
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
42
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
43
< s t y l e type= t e x t / c s s >
44
</ s t y l e >
45 </head>
46
47 <body>
48 <![ i f IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>
49 <![ i f l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
50 <![ i f IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
51 <![ i f g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
52
<d i v i d=wrapper ><! wrapper >
53
<!D e f i n e l a imagen s u p e r i o r o banner>
54
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
55
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
56
<d i v i d= c o n t e n t ><! c o n t e n i d o >

124
57
58
59

60

61

62

63

64

65

66

67

68

69
70
71
72

A Apendice
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>
</div ><! menu >
</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >

A.4. C
odigo en PHP y HTML para la implementacion del sistema

<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>

73

74
75
76

<p>&nbsp ; </p><! I n d i c a que e l


u s u a r i o ha s i d o r e g i s t r a d o >
<h2><f o n t c o l o r=r e d > El u s u a r i o
ha s i d o r e g i s t r a d o </f o n t ></h2
>
<p>&nbsp ; </p>

77

78
79
80
81
82
83
84
85

</div>
</div ><! Contenido a l f i n a l >
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>

86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111

125

<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {

126
112
113
114
115

A Apendice

// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
include i n i c i a r s e s i o n . php ;
}
?>

salir.php
1
2
3
4
5
6

<?php
require f u n c i o n e s . php ; // Llama a l documentos f u n c i o n e s que
almacena l a s f u n c i o n e s r e q u e r i d a s
// D e s tr uy e l a s e s i o n
session destroy ( ) ; // F i n a l i z a l a s e s i o n
header ( L o c a t i o n : . $ h t t p r e f e r e r ) ; //Y mantiene como r e f e r e n c i a l a
ultima l o c a l i z a c i o n
?>

styles sheet
1 / $ i d : C r i s t i a n c h a v e s . c s s /
2
3 /
4 R e g l a s g e n e r a l e s
5 /
6
7 . c l e a r { c l e a r : both ;
8
margin : 0 px ;
9
}
10 /
11 D e f i n e tamano de l e t r a , mergen y fondo
12 /
13 body { f o n t s i z e : 1 6 px ;
14
background :#20434d ;
15
margin : 5 px ;
16
}
17 /
18 Wrapper t i e n e un tamano de 960995
19 /
20 #wrapper { width : 9 6 0 px ;
21
h e i g h t : 9 9 5 px ;
22
margin : 5 px auto ;
23
}
24
/
25 Contenido margen de 5
26 /
27 #c o n t e n t { margin : 5 px 0px ;
28
}
29
30 /
31 Cuerpo fondo e l c o l o r
32 /
33 #c u e r p o { h e i g h t : auto ;
34
margintop : 0 px ;

A.4. C
odigo en PHP y HTML para la implementacion del sistema
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

background :#3F14CD ;
}
/
Banner s u p e r i o r y l a imagen u t i l i z a d a
/
#topBanner { width : auto ;
h e i g h t : 2 0 0 px ;
background : #20434d u r l ( images / topbanner . jpg ) ;
}
/
D e f i n e c a r a c t e r i s t i c a s de redondo
/
. redondo { b o r d e r . r a d i u s : 10 px ;
mozborder r a d i u s : 1 0 px ;
webkitborder r a d i u s : 1 0 px ;
b e h a v i o r : u r l ( border r a d i u s . h t c ) ;# s t h a s h . PHKLzK3o . dpuf
}

/
Contenido a l a i z q u i e r d a
/
#l e t f c o n t e n t { width : 1 9 5 px ; / 240/
float : left ;
minh e i g h t : 4 0 0 px ;
/
background :#14CD20 ; /
h e i g h t : 5 0 0 px ;
}
/
Contenido a l a d e r e c h a
fondo , a l t o , ancho , margen
/
#r i g h t c o n t e n t { width : 7 3 5 px ; / 240/
minh e i g h t : 6 9 0 px ;
background :# f f f f f f ;
h e i g h t : 5 0 0 px ;
float : left ;
margin l e f t : 1 0 px ;
padding : 1 0 px ;
}
#d i v 1 {
overflow : s c r o l l ;
h e i g h t : 5 0 0 px ;
width : 5 0 0 px ;
float : center ;
margin l e f t : 7 5 px ;
padding : 1 0 px ;
}

127

128

A Apendice

86
87
88
/
89 Contenido a l c e n t r o
90 fondo , a l t o , ancho , margen
91 /
92 #c e n t e r c o n t e n t { width : 7 3 5 px ; / 240/
93
minh e i g h t : 6 9 0 px ;
94
background :# f f f f f f ;
95
h e i g h t : 5 0 0 px ;
96
float : center ;
97
margin l e f t : 1 0 0 px ;
98
padding : 1 0 px ;
99
}
100
101
/
102 Banner i n f e r i o r
103 /
104
#bottomBanner { width : auto ;
105
h e i g h t : 2 0 0 px ;
106
background : #20434d ;
107
margintop : 5 px ;
108
f o n t f a m i l y : H e l v e t i c a , A r i a l , sans s e r i f ;
109
c o l o r : #d8d8d8 ;
110
}
111
/
112 C a r a c t e r i s t i c a s de l a imagen i n f e r i o r y banner i n f e r i o r
113 /
114
#l o g o { margin : 5 px ;
115
}
116
117
. bootonbanner { f l o a t : l e f t ;
118
width : 3 1 5 px ;
119
margin : 0px ;
120
}
121
122
123
124
/ Menu /
125
/ Descargado de h t t p : / / cssmenumaker . com///
126
/ M o d i f i c a d o por C h r i s t i a n Chaves con f i n e s e d u c a t i v o s /
127
128
#cssmenu > u l {
129
l i s t s t y l e : none ;
130
margin : 0 ;
131
padding : 0 ;
132
v e r t i c a l a l i g n : b a s e l i n e ;
133
l i n e h e i g h t : 5 ;
134
}
135
136
/ The c o n t a i n e r /

A.4. C
odigo en PHP y HTML para la implementacion del sistema
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187

#cssmenu > u l {
display : block ;
position : relative ;
width : 200 px ;
/ The l i s t e l e m e n t s which c o n t a i n t h e l i n k s /
}
#cssmenu > u l l i {
display : block ;
position : relative ;
margin : 0 ;
padding : 0 ;
width : 100 %;
}
#cssmenu > l i { h i g h t : 400 px ; }
/ G e n e r a l l i n k s t y l i n g /
#cssmenu > u l l i a {
/ Layout /
display : block ;
position : relative ;
margin : 0 ;
border top : 1px d o t t e d #3a3a3a ;
border bottom : 1px d o t t e d #1b1b1b ;
padding : 11 px 20 px ;
/ Typography /
f o n t f a m i l y : H e l v e t i c a , A r i a l , sans s e r i f ;
c o l o r : #d8d8d8 ;
t e x t d e c o r a t i o n : none ;
t e x t t r a n s f o r m : u p p e r c a s e ;
t e x t shadow : 0 1px 1px #000;
f o n t s i z e : 13 px ;
f o n t w e i g h t : 3 0 0 ;
/ Background & e f f e c t s /
background : #282828;
}
/ Rounded c o r n e r s f o r t h e f i r s t l i n k o f t h e menu/ submenus /
#cssmenu > u l l i : f i r s t c h i l d > a {
border topl e f t r a d i u s : 4px ;
border topr i g h t r a d i u s : 4px ;
border top : 0 ;
}
/ Rounded c o r n e r s f o r t h e l a s t l i n k o f t h e menu/ submenus /
#cssmenu > u l l i : l a s t c h i l d > a {
border bottoml e f t r a d i u s : 4px ;
border bottomr i g h t r a d i u s : 4px ;
border bottom : 0 ;

129

130
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237

A Apendice

}
/ The hover s t a t e o f t h e menu/submenu l i n k s /
#cssmenu > u l l i > a : hover ,
#cssmenu > u l l i : hover > a {
color : #f f f f f f ;
t e x t shadow : 0 1px 0 rgba ( 0 , 0 , 0 , 0 . 3 ) ;
background : #0681a3 ;
background : webkitl i n e a r g r a d i e n t (#0997 bf , #0681a3 ) ;
background : mozl i n e a r g r a d i e n t (#0997 bf , #0681a3 ) ;
background : l i n e a r g r a d i e n t (#0997 bf , #0681a3 ) ;
border c o l o r : t r a n s p a r e n t ;
}
/ The arrow i n d i c a t i n g a submenu /
#cssmenu > u l . hassub > a : : a f t e r {
content : ;
position : absolute ;
top : 16 px ;
r i g h t : 10 px ;
width : 0px ;
h e i g h t : 0px ;
/ C r e a t i n g t h e arrow u s i n g b o r d e r s /
b o r d e r : 4px s o l i d t r a n s p a r e n t ;
border l e f t : 4px s o l i d #d8d8d8 ;
}
/ The same arrow , but with a d a r k e r c o l o r , t o c r e a t e t h e shadow
e f f e c t /
#cssmenu > u l . hassub > a : : b e f o r e {
content : ;
position : absolute ;
top : 17 px ;
r i g h t : 10 px ;
width : 0px ;
h e i g h t : 0px ;
/ C r e a t i n g t h e arrow u s i n g b o r d e r s /
b o r d e r : 4px s o l i d t r a n s p a r e n t ;
border l e f t : 4px s o l i d #000;
}
/ Changing t h e c o l o r o f t h e arrow on hover /
#cssmenu > u l l i > a : hover : : a f t e r ,
#cssmenu > u l l i : hover > a : : a f t e r {
border l e f t : 4px s o l i d # f f f f f f ;
}
#cssmenu > u l l i > a : hover : : b e f o r e ,
#cssmenu > u l l i : hover > a : : b e f o r e {
border l e f t : 4px s o l i d rgba ( 0 , 0 , 0 , 0 . 3 ) ;
}
/ THE SUBMENUS /
#cssmenu > u l u l {
position : absolute ;

A.4. C
odigo en PHP y HTML para la implementacion del sistema
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253

131

l e f t : 100 %;
top : 9999px ;
padding l e f t : 5px ;
opacity : 0;
width : 140 px ;
/ The f a d e e f f e c t , c r e a t e d u s i n g an o p a c i t y t r a n s i t i o n /
webkitt r a n s i t i o n : o p a c i t y 0 . 3 s e a s e i n ;
mozt r a n s i t i o n : o p a c i t y 0 . 3 s e a s e i n ;
t r a n s i t i o n : o p a c i t y 0 . 3 s e a s e i n ;
}
/ Showing t h e submenu when t h e u s e r i s h o v e r i n g t h e p a r e n t l i n k
/
#cssmenu > u l l i : hover > u l {
top : 0px ;
opacity : 1;
}

tabla usuarios.php
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>
<! I n i c i o d e l HTML>
<! D e c l a r a c i o n d e l t i p o de documento>
<!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
<! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
<! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
<html l a n g=EN xml : l a n g=EN
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
<head>
<!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
< t i t l e >CCB</ t i t l e >

132
25
26
27
28
29 </head>
30
31 <body>
32 <![ i f
33 <![ i f
34 <![ i f
35 <![ i f
36
37
38
39
40
41
42
43

44

45

46

47

48

A Apendice
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
< s t y l e type= t e x t / c s s >
</ s t y l e >

IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>


l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
<d i v i d=wrapper ><! wrapper >
<!D e f i n e l a imagen s u p e r i o r o banner>
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >

A.4. C
odigo en PHP y HTML para la implementacion del sistema
49

50

51

52

53
54
55
56
57

58
59
60

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

133

<l i

c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>
</div ><! f i n a l i z a menu
>
</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>
<p>&nbsp ; </p>
<h1> R e g i s t r o de c o r r e o s ( email )
</h1><!Contenido para e l
r e g i s t r o de u s u a r i o s >
<p>&nbsp ; </p>
<?php
$borrar correo = null ;
i f ( i s s e t ($ GET [ b o r r a r c o r r e o ] ) != n u l l ) {
$ b o r r a r c o r r e o = $ GET [ b o r r a r c o r r e o ] ;
$query= DELETE from c o r r e o s WHERE i d = $ b o r r a r c o r r e o ;
$query2=ALTER TABLE c o r r e o s AUTO INCREMENT= 1 ;
i f ( mysql query ( $query ) ) {
echo <f o n t s i z e =6, c o l o r =r e d > El c o r r e o ha
s i d o e l i m i n a d o </f o n t > ; // U s u a r i o e l i m i n a d o
mysql query ( $query2 ) ;
} else {
echo D i s c u l p e , i n t e n t e de nuevo ; // I n t e n t e de
nuevo s i no s e pudo
}
}
// Comprueba que s e haya i n g r e s a d o t o d o s l o s v a l o r e s y l o s almacena
en v a r i a b l e s mediante e l metodo POST
i f ( i s s e t ( $ POST [ u s u a r i o ] )&&i s s e t ( $ POST [ c o r r e o ] ) ) {

134
78
79
80
81
82
83
84

85

86
87
88

89

90

91

92

93

A Apendice
// Almacena l o s d a t o s o b t e n i d o s mediante e l POST en
v a r i a b l e s para su r e s p e c t i v o manejo
$ u s u a r i o = $ POST [ u s u a r i o ] ;
$ c o r r e o = $ POST [ c o r r e o ] ;
// S i no quedo ningun e s p a c i o v a c i o c o n t i n u e
i f ( ! empty( $ u s u a r i o )&&!empty( $ c o r r e o ) ) {
i f ( s t r l e n ( $ u s u a r i o ) >30|| s t r l e n ( $ c o r r e o )
>70){ // S i no s o b r e p a s o e l tamano de
c a r a c t e r e s que p e r m i t e l a b a s e de
datos
echo No s o b r e p a s e l a c a n t i d a d de
c a r a c t e r e s ; // S i s e e x c e d e e l
e s p a c i o a s i g n a d o en b a s e de
d a t o s para l o s campos
indiquelo
} else {
// / P r o c e s o de r e g i s t r o de
correos
$query = SELECT c o r r e o
FROM c o r r e o s WHERE
c o r r e o = .
mysql real escape string
( $ c o r r e o ) . ; //
Selecciona la tabla
usuarios el espacio
u s u a r i o donde l a
variable es igual a
algun usuario
existente
$ q u e r y r u n = mysql query (
$query ) ; // I n i c i a l a
p e t i c i o n a l a b a s e de
datos
i f ( mysql num rows (
$ q u e r y r u n )==1){ // S i
e l c o r r e o ya e x i s t e
indiquelo
echo El c o r r e o .
$ c o r r e o . ya
existe . ;
} e l s e { //De o t r a manera
i n s e r t e l o s v a l o r e s en
l a b a s e de d a t o s
$query = INSERT
INTO c o r r e o s
VALUES ( ,
.
mysql real escape string
( $usuario ) .
, .

A.4. C
odigo en PHP y HTML para la implementacion del sistema

135

mysql real escape string


( $correo ) . )
;
i f ( $query run =
mysql query (
$query ) ) {
header (
Location
:
correos
. php )
; //
Vaya a

94

95

correos
actualizado
} else
echo Contacte a l
administrador .
; // Algun
problema
c o n t a c t e con
el
administrador

96
97

98
99
100
101
102

103
104
105
106

107
108
109
110

111
112
113
114

}
} else {
echo Todos l o s campos son n e c e s a r i o s . ; //
Si se dejo algun e s p a c i o s i n e s c r i b i r
i n d i q u e e l problema
}
}
?>
<!D e f i n e un form para tomar
informacion del usuario
mediante metodo POST>
<p></p>
<form a c t i o n= c o r r e o s . php method=
POST>
<!Se s o l i c i t a u s u a r i o , c o r r e o >
U s u a r i o : <i n p u t type= t e x t name
= u s u a r i o > Correo : <i n p u t
type= t e x t name= c o r r e o >
<i n p u t type=submit v a l u e=
I n s e r t a r >
</form><! F i n a l i z a form>
<d i v i d=d i v 1 >

136
115
116
117
118

119
120
121
122
123
124
125

126

127
128

129

130

131

132

A Apendice
<t a b l e width= 500 a l i g n= c e n t e r b o r d e r=
3 >
o mero</th><! numero de i n g r e s o
<th>NA
>
<th>Usuario </th><! l u g a r de i n g r e s o no
a u t o r i z a d o >
<th>Correo </th><! t a g i d s i e s que s e
i n g r e s o con una t a r j e t a no a u t o r i z a d a
>
<th>E l i m i n a r </th>
<?php
// I n i c i a e l query o s o l i c i t u d a l a bas de
datos
$query = SELECT FROM c o r r e o s WHERE 1
;
// S i l a s o l i c i t u d e s v e r d a d e r a c o n t i n u e
i f ( $ q u e r y r u n = mysql query ( $query ) ) {
i f ( mysql num rows ( $ q u e r y r u n )==
NULL) { // S i l a c a n t i d a d de
f i l a s con d a t o s e s n u l a
echo <f o n t s i z e =4,
c o l o r =r e d >No hay
c o r r e o s i n g r e s a d o s </
f o n t > ; // I n d i c a que no
hay r e s u l t a d o s por e l
momento
} else {
// D e s p l a c e e l v e c t o r de
s o l i c i t u d f i l a por
f i l a indicando l o s
d a t o s d e n t r o de l a
tabla
while ( $query row =
mysql fetch assoc (
$query run ) ) {
$ i d = $query row [
i d ] ; // Obtenga
e l i d de cada
fila
$usuario =
$query row [
u s u a r i o ] ; //
Obtenga e l
l u g a r de cada
fila
$correo =
$query row [
c o r r e o ] ; //
Obtenga e l
t a g i d de cada
fila

A.4. C
odigo en PHP y HTML para la implementacion del sistema
133
134

?>
<! I n s e r t a l o s
d a t o s en l a
tabla mientras
el ciclo
encuentre
d a t o s nuevos
>
<t r a l i g n= c e n t e r
>
<td><?php echo $ i d
;?></td><!
almacena e l i d
en l a t a b l a
>
<td><?php echo
$ u s u a r i o ;?></
td><!
almacena e l
u s u a r i o en l a
t a b l a >
<td><?php echo
$ c o r r e o ;?></td
><! almacena
e l c o r r e o en
l a t a b l a >
<td><a h r e f=
c o r r e o s . php?
borrar correo
=<?php echo
$ i d ; ?> >
ELIMINAR</a></
td>
</t r >

135
136

137

138

139

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155

137

<?php
}
}
// S i l a s o l i c t u d e s i n c o r r e c t a e n t o n c e s
despliegue el error
} else {
echo mysql error ( ) ; // e r r o r en l a
b a s e de d a t o s
}
?>
</ t a b l e >
</div>
</div>
</div ><! Contenido a l f i n a l >

138
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180

A Apendice
<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>
<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >

181
182 </body>
183 </html>
184 <?php
185 } e l s e {
186 // S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
187 include i n i c i a r s e s i o n . php ;
188 ?>
189 <body>
190 <d i v c l a s s=redondo i d= r i g h t c o n t e n t >
191
192
<p>&nbsp ; </p>
193 <h1> Debe i n i c i a r s e s i o n para e l r e g i s t r o de u s u a r i o s </h1><!
D e s p l i e g a msj i n d i c a n d o que n e c e s i t a i n i c i a r s e s i o n >
194 </div>
195 </body>
196 <?php
197 }
198 ?>

A.4. C
odigo en PHP y HTML para la implementacion del sistema

139

tabla usuarios2.php
1
2
3
4
5
6
7
8
9

<?php
// Llama a l a s f u n c i o n e s d e n t r o de l o s a r c h i v o s r e q u e r i d a s
require f u n c i o n e s . php ; // Llama a l a s f u n c i o n e s l o g g e d i n y
getuserfield
require c o n e x i o n . php ; // R e a l i z a l a c o n e x i o n con l a b a s e de d a t o s
// S i e l s i s t e m a s e r e g i s t r a puede i n g r e s a r a l a p a g i n a
i f ( loggedin () ){
$nombre= g e t u s e r f i e l d ( nombre ) ; // Obtiene e l nombre d e l
usuario
$ a p e l l i d o= g e t u s e r f i e l d ( a p e l l i d o ) ; // Obtiene e l a p e l l i d o
d e l u s u a r i o que ha i n g r e s a d o
echo <f o n t c o l o r =w h i t e > Bienvenido , . $nombre . .
$ a p e l l i d o . . <a h r e f =s a l i r . php> S a l i r </a><br></f o n t >
;
?>

10
11
12 <! I n i c i o d e l HTML>
13 <! D e c l a r a c i o n d e l t i p o de documento>
14 <!DOCTYPE html PUBLIC //W3C//DTD XHTML 1 . 0 S t r i c t //EN
15 h t t p : / /www. w3 . o r g /TR/ xhtml1 /DTD/ xhtml1 s t r i c t . dtd >
16 <! D e c l a r a c i o n de p a r a m e t r o s d e l documeto , xmlsn>
17 <! D e c l a r a c i o n xmlsn para e l e s p a c i o de nombres o namespace>
18 <html l a n g=EN xml : l a n g=EN
19
xmlns=h t t p : / /www. w3 . o r g /1999/ xhtml
20
xmlns : x2=h t t p : / /www. w3 . o r g /TR/ xhtml2
21
xmlns : r o l e=h t t p : / /www. w3 . o r g /2005/01/ wair d f /
GUIRoleTaxonomy#
22
xmlns : s t a t e=h t t p : / /www. w3 . o r g /2005/07/ aaa >
23 <head>
24 <!D e f i n e e l t i t u l o de l a p e s t a n a en e l navegador y e l e s t i l o a
u t i l i z a r s t y l e s h e e t >
25
< t i t l e >CCB</ t i t l e >
26
<META HTTPEQUIV=ContentType c o n t e n t= t e x t / html ;
c h a r s e t=u t f 8/>
27
<l i n k r e l= s t y l e s h e e t h r e f= s t y l e s . c s s ><!D e c l a r a c i o n
d e l s t y l e s h e e t >
28
< s t y l e type= t e x t / c s s >
29
</ s t y l e >
30 </head>
31
32 <body>
33 <![ i f IE ]>< d i v i d= I E r o o t ><![ e n d i f ]>
34 <![ i f l t e IE 6]>< d i v i d= I E 6 r o o t ><![ e n d i f ]>
35 <![ i f IE 7]>< d i v i d= I E 7 r o o t ><![ e n d i f ]>
36 <![ i f g t IE 7 ]>< d i v i d= I E 8 r o o t ><![ e n d i f ]>
37
<d i v i d=wrapper ><! wrapper >
38
<!D e f i n e l a imagen s u p e r i o r o banner>
39
<d i v c l a s s=redondo i d=topBanner ></div ><!
topBanner>

140
40
41
42
43
44

45

46

47

48

49

50

51

52

53

54
55

A Apendice
<!D e f i n e que s e empieza a t r a b a j a r en e l
c o n t e n i d o >
<d i v i d= c o n t e n t ><! c o n t e n i d o >
<d i v i d= l e t f c o n t e n t ><! c o n t e n i d o a l a
i z q u i e r d a >
<div ><! menu de t a b s >
<d i v i d= cssmenu ><!
D e f i n e e l t i p o de menu
a u t i l i z a r >
<ul ><!Se i n d i c a n l o s
nombres de l a s
pestanas y la
referencia a las
p a g i n a s que r e d i r i g e n
>
< l i c l a s s= a c t i v e ><a
h r e f= i n d e x . php ><
span>I n i c i o </span
></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= r e g i s t r o . php
><span>Nuevo
Usuario </span></a
></ l i >
< l i c l a s s= a c t i v e ><a
h r e f=
t a b l a u s u a r i o s 2 . php
><span>U s u a r i o s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= c o r r e o s . php
><span>Correos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a c c e s o s . php
><span>Accesos </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= camara . php ><
span>C&aacutemara </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= a l e r t a s . php
><span>A l e r t a s </
span></a></ l i >
< l i c l a s s= a c t i v e ><a
h r e f= s a l i r . php ><
span>S a l i r </span></
a></ l i >
</ul>
</div ><! menu >

A.4. C
odigo en PHP y HTML para la implementacion del sistema
56
57
58

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

81

82
83

141

</div>
</div ><! f i n a l i z a c o n t e n i d o a l a
i z q u i e r d a >
<d i v c l a s s=redondo i d= r i g h t c o n t e n t
><!Empieza e l c o n t e n i d o a l a derecha
>
<p>&nbsp ; </p>
<h1> Tabla de u s u a r i o s r e g i s t r a d o s
</h1>
<h2>E l i j a e l u s u a r i o a e l i m i n a r </
h2>
<! Tabla para i n d i c a r l o s u s u a r i o s
r e g i s t r a d o s >
<d i v i d=d i v 1 >
<t a b l e width= 500 a l i g n= c e n t e r b o r d e r=
3 >
<th>I d e n t i f i c a c i o n </th><! I d e n t i f i c a c i o n
o p o s i c i o n en l a t a b l a >
<th>Usuario </th><! u s u a r i o de l a b a s e de
d a t o s >
<th>t a g I d </th><! numero de t a r j e t a r f i d
>
<th>Nombre</th><! nombre d e l u s u a r i o >
<th>A p e l l i d o </th><! a p e l l i d o d e l u s u a r i o
>
<th>E l i m i n a r u s u a r i o </th><! l i n k para
e l i m i n a r e l u s u a r i o >
<?php
// I n i c i a e l query o s o l i c i t u d a l a bas de
datos
$query = SELECT FROM u s u a r i o s WHERE 1
;

i f ( $ q u e r y r u n = mysql query ( $query ) ) { //


Si l a s o l i c i t u d es verdadera continue
i f ( mysql num rows ( $ q u e r y r u n )==
NULL) { // S i l a c a n t i d a d de
f i l a s con d a t o s e s n u l a
echo No hay r e s u l t a d o s ;
// I n d i c a que no hay
r e s u l t a d o s por e l
momento
} e l s e { //De o t r a manera s i hay
resultados entonces
// D e s p l a c e e l v e c t o r de
s o l i c i t u d f i l a por
f i l a indicando l o s

142

84

85

86

87

88

89

90

91

92
93
94

A Apendice
d a t o s d e n t r o de l a
tabla
while ( $query row =
mysql fetch assoc (
$query run ) ) {
$ i d = $query row [
i d ] ; // Obtenga
e l i d de cada
fila
$usuario =
$query row [
u s u a r i o ] ; //
Obtenga e l
u s u a r i o de
cada f i l a
$contrasena =
$query row [
contrasena ] ;
// Obtenga l a
c o n t r a s e n a de
cada f i l a
$contrasena hash =
md5(
$contrasena ) ;
// Obtenga l a
contrasena
e n c r i p t a d a de
cada f i l a
$nombre=
$query row [
nombre ] ; //
Obtenga e l
nombre de cada
fila
$ a p e l l i d o=
$query row [
a p e l l i d o ] ; //
Obtenga e l
a p e l l i d o de
cada f i l a
$ t a g I d= $query row
[ t a g I d ] ; //
Obtenga e l
t a g I d de cada
fila
?>
<! I n s e r t a l o s
d a t o s en l a
tabla mientras
el ciclo

A.4. C
odigo en PHP y HTML para la implementacion del sistema

encuentre
d a t o s nuevos
>
<t r a l i g n= c e n t e r
>
<td><?php echo $ i d
;?></td><!
almacena e l i d
en l a t a b l a
>
<td><?php echo
$ u s u a r i o ;?></
td><!
almacena e l
u s u a r i o en l a
t a b l a >
<td><?php echo
$ t a g I d ;?></td
><! almacena
e l t a g I d en
l a t a b l a >
<td><?php echo
$nombre;?></td
><! almacena
e l nombre en
l a t a b l a >
<td><?php echo
$ a p e l l i d o ;?></
td><!
almacena e l
a p e l l i d o en l a
t a b l a >
<td><a h r e f=
borrar usuario
. php?
borrar usuario
=<?php echo
$ i d ; ?> >
ELIMINAR</a></
td><! l i n k
para e l i m i n a r
e l u s u a r i o >
</t r >

95
96

97

98

99

100

101

102
103
104
105
106
107
108
109

143

<?php
}
}
// S i l a s o l i c i t u d e s i n c o r r e c t a e n t o n c e s
despliegue el error

144

A Apendice

110
111

} else {

112
113
114
115
116
117
118
119
120
121
122

}
?>
</ t a b l e >
</div>
</div>

123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152

echo mysql error ( ) ; // e r r o r en l a


b a s e de d a t o s

</div ><! Contenido a l f i n a l >


<br c l a s s= c l e a r >
<!D e f i n e l a imagen i n f e r i o r o banner>
<d i v c l a s s=redondo i d=bottomBanner >
<!Elementos d e n t r o d e l banner , nombre y
a p e l l i d o >
<d i v i d= i n t e g r a n t e s c l a s s=bootonbanner
>
<h2>Alumno: </h2>
<ul>
<!Nombre d e l e s t u d i a n t e en e l
fondo de l a pagina>
< l i >C h r i s t i a n Chaves B. </
li >
</ul>
</div>
<!Nombre d e l p r o f e s o r en e l fondo de l a
pagina>
<d i v i d= p r o f c l a s s=bootonbanner >
<h2>P r o f e s o r : </h2>
<ul>
< l i >Dr . Jaime Cascante </ l i
>
</ul>
</div>
<! I n s e r t a e l l o g o de e i e >
<d i v i d= l o g o c l a s s=bootonbanner >
<img s r c=images / e i e L o g o . png >
</div>
</div ><! F i n a l i z a e l banner i n f e r i o r
bottomBanner>
</div ><! F i n a l i z a wrapper >
</body>
</html>
<?php
} else {
// S i no ha i n g r e s a d o s e s i o n d e s p l i e g u e l a p a g i n a de s o l i c i t u d
include i n i c i a r s e s i o n . php ;
}
?>

A.5. C
odigo en SQL para la base de datos

A.5

145

C
odigo en SQL para la base de datos

basedatos1.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

phpMyAdmin SQL Dump


version 4.2.7.1
h t t p : / /www. phpmyadmin . n e t
Servidor : 127.0.0.1
Tiempo de g e n e r a c i o n : 15122014 a l a s 0 6 : 3 8 : 1 1
Version del s e r v i d o r : 5 . 5 . 3 9
V e r s i o n de PHP: 5 . 4 . 3 1

SET SQL MODE = NO AUTO VALUE ON ZERO ;


SET t i m e z o n e = +00:00 ;

/ ! 4 0 1 0 1
/ ! 4 0 1 0 1
;
/ ! 4 0 1 0 1
/ ! 4 0 1 0 1

SET @OLD CHARACTER SET CLIENT=@@CHARACTER SET CLIENT / ;


SET @OLD CHARACTER SET RESULTS=@@CHARACTER SET RESULTS /
SET @OLD COLLATION CONNECTION=@@COLLATION CONNECTION / ;
SET NAMES u t f 8 / ;

Base de d a t o s :

basedatos1

E s t r u c t u r a de t a b l a para l a t a b l a a c c e s o s

CREATE TABLE IF NOT EXISTS a c c e s o s (


id in t ( 1 1 ) NOT NULL,
nombre varchar ( 3 0 ) NOT NULL,
t a g I d varchar ( 3 0 ) NOT NULL,
f e c h a varchar ( 1 0 ) NOT NULL,
hora varchar ( 1 0 ) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 AUTO INCREMENT=2 ;

I n s e r c i o n de d a t o s para l a t a b l a a c c e s o s

INSERT INTO a c c e s o s ( id , nombre , t a g I d , f e c h a , hora )


VALUES
42 ( 1 , a , a , a , a ) ;
43
44
45

146
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

A Apendice

E s t r u c t u r a de t a b l a para l a t a b l a a l e r t a s

CREATE TABLE IF NOT EXISTS a l e r t a s (


id in t ( 1 1 ) NOT NULL,
Lugar varchar ( 3 0 ) NOT NULL,
t a g I d varchar ( 4 0 ) NOT NULL,
f e c h a varchar ( 4 0 ) NOT NULL,
hora varchar ( 4 0 ) NOT NULL,
check in t ( 1 ) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 AUTO INCREMENT=4 ;

I n s e r c i o n

de d a t o s para l a t a b l a a l e r t a s

INSERT INTO a l e r t a s ( id , Lugar , t a g I d , f e c h a , hora ,


check ) VALUES
64 ( 1 , a , aaa , a , a , 1 ) ,
65 ( 2 , a , a , a , a , 1 ) ,
66 ( 3 , a , a , a , a , 1 ) ;
67
68
69
70
71 E s t r u c t u r a de t a b l a para l a t a b l a c o r r e o s
72
73
74 CREATE TABLE IF NOT EXISTS c o r r e o s (
75 id in t ( 1 1 ) NOT NULL,
76
u s u a r i o varchar ( 4 0 ) NOT NULL,
77
c o r r e o varchar ( 7 0 ) NOT NULL
78 ) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 AUTO INCREMENT=3 ;
79
80
81 I n s e r c i o n de d a t o s para l a t a b l a c o r r e o s
82
83
84 INSERT INTO c o r r e o s ( id , u s u a r i o , c o r r e o ) VALUES
85 ( 1 , c h r i s , c h a v e l o 9 0 @ h o t m a i l . com ) ,
86 ( 2 , C h r i s t i a n , ChristianChavesB@gmail . com ) ;
87
88
89
90
91 E s t r u c t u r a de t a b l a para l a t a b l a u s u a r i o s
92
93
94 CREATE TABLE IF NOT EXISTS u s u a r i o s (
95 id in t ( 1 1 ) NOT NULL,

A.5. C
odigo en SQL para la base de datos
96
97
98
99
100
101
102
103
104
105
106
107

147

u s u a r i o varchar ( 3 0 ) NOT NULL,


c o n t r a s e n a varchar ( 3 2 ) NOT NULL,
nombre varchar ( 3 0 ) NOT NULL,
a p e l l i d o varchar ( 3 0 ) NOT NULL,
t a g I d varchar ( 3 0 ) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=l a t i n 1 AUTO INCREMENT=3 ;

I n s e r c i o n

de d a t o s para l a t a b l a u s u a r i o s

INSERT INTO u s u a r i o s ( id , u s u a r i o , c o n t r a s e n a , nombre ,


a p e l l i d o , t a g I d ) VALUES
108 ( 1 , p r o f e , 0 a a d c 0 e 3 2 7 9 9 e 4 7 4 b 5 0 6 b 7 4 8 a f 8 0 b d f e , Jaime ,
Cascante , 1941027985190 ) ,
109 ( 2 , l o c h i , 0 a a d c 0 e 3 2 7 9 9 e 4 7 4 b 5 0 6 b 7 4 8 a f 8 0 b d f e , L o c h i , Yu ,
1234645465 ) ;
110
111
112 I n d i c e s para t a b l a s v o l c a d a s
113
114
115
116 I n d i c e s de l a t a b l a a c c e s o s
117
118 ALTER TABLE a c c e s o s
119
ADD PRIMARY KEY ( id ) ;
120
121
122 I n d i c e s de l a t a b l a a l e r t a s
123
124 ALTER TABLE a l e r t a s
125
ADD PRIMARY KEY ( id ) ;
126
127
128 I n d i c e s de l a t a b l a c o r r e o s
129
130 ALTER TABLE c o r r e o s
131
ADD PRIMARY KEY ( id ) ;
132
133
134 I n d i c e s de l a t a b l a u s u a r i o s
135
136 ALTER TABLE u s u a r i o s
137
ADD PRIMARY KEY ( id ) ;
138
139
140 AUTO INCREMENT de l a s t a b l a s v o l c a d a s
141
142
143

148
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165

A Apendice

AUTO INCREMENT de l a t a b l a a c c e s o s

ALTER TABLE a c c e s o s
MODIFY id in t ( 1 1 ) NOT NULL AUTO INCREMENT,AUTO INCREMENT=2;

AUTO INCREMENT de l a t a b l a a l e r t a s

ALTER TABLE a l e r t a s
MODIFY id in t ( 1 1 ) NOT NULL AUTO INCREMENT,AUTO INCREMENT=4;

AUTO INCREMENT de l a t a b l a c o r r e o s

ALTER TABLE c o r r e o s
MODIFY id in t ( 1 1 ) NOT NULL AUTO INCREMENT,AUTO INCREMENT=3;

AUTO INCREMENT de l a t a b l a u s u a r i o s

ALTER TABLE u s u a r i o s
MODIFY id in t ( 1 1 ) NOT NULL AUTO INCREMENT,AUTO INCREMENT=3;
/ ! 4 0 1 0 1 SET CHARACTER SET CLIENT=@OLD CHARACTER SET CLIENT / ;
/ ! 4 0 1 0 1 SET CHARACTER SET RESULTS=@OLD CHARACTER SET RESULTS / ;
/ ! 4 0 1 0 1 SET COLLATION CONNECTION=@OLD COLLATION CONNECTION / ;

Anexos

B.1

Anexo 1. Cotizaci
on Sistema RFID Accesos
Autom
aticos CR

La empresa Accesos Autom


aticos CR vende sistemas de control de accesos en
Costa Rica haciendo uso de la marca HID descrita en el captulo 2. La siguiente cotizaci
on indica el costo de un sistema de control de accesos general
vendido por esta empresa para as brindar una idea general de los costos de este tipo de sistemas. Si bien es cierto, el sistema descrito en la cotizacion posee
componentes como cerradura electromagnetica y un panel de control no contemplados en el prototipo dise
nado, a
un as permite realizar una comparativa
general entre sistemas comerciales y educativos.

149

COTIZACION

TELFONO: 2227 4242 Fax: 2227 4200

Correo: ventas@accesos.co.cr
San Jos, Costa Rica
Cdula Jurdica: 3-101-177456

308021

No.
Fecha:

10/09/2014

SN:

Cotizado para:

Cliente contado

Instrucciones de envo:

Atencin:

COSTA RICA

Telfono:

Cant.

00

Fax:

Cel:

Cdigo

Descripcin

Precio

E941600

Cerradura electromagntica de seguridad de 600 lbs.

IRC-2000

Panel de control de dos accesos marca RBH, 2 entradas para lector protocolo Wiegand, 8

Totales

67,189.58

67,189.58

374,941.88

374,941.88

57,591.07

57,591.07

entradas y 8 salidas programables, capacidad de 5000 usuarios, con funcin de antipassback.


Incluye gabinete metlico con llave. Puerto de conexin RS232 o RS485, posible conectividad
por medio de TCP/IP o USB segn accesorio adicional. Se incluye Software Integra32 para
administracin de horarios, monitoreo de eventos en puntos de acceso en tiempo real,
generacin de alarmas al operador, realizacin de reportes y configuracin de hasta 128
accesos.

RBH-SR-2400

Lector de Proximidad para aplicaciones de control de acceso con tecnologa Multiformato


Wiegand de 26 a 50 bits, modelo Sentinel-Prox.

1
1

SD-7103

Botn de salida iluminado pequeo 2.5x10cm

23,996.28

23,996.28

BAT-12/7

Batera sellada 12 volts, 7 amph. Requiere que el cliente haga una prueba al mes para
verificar

17,997.21

17,997.21

24,596.19

24,596.19

que su equipo opere correctamente sin fluido elctrico. Garanta un mes.

ST24063A

Fuente de poder 12v a 24V 3Amp

T1640

Transformador de 16v- 40 watt Para Fuentes de Poder de 3 A

5,999.07

5,999.07

CMC-PA

Contacto Magnetico alambrado NO, normalmente Abierto, de Color Blanco

1,799.72

1,799.72

RBH-LIF-200

Convertidor RS485 a Ethernet para panel RBH IRC-2000

167,973.96

167,973.96

CIPYALE

Cierrapuertas, para puertas peatonales marca YALE

23,320.00

23,320.00

INSTALL 85

Instalacin mecnica de CIERRAPUERTAS tipo tijereta superior.

25,196.09

25,196.09

10

RBH-50BIT-PT

Tarjeta de proximidad imprimible de RBH a 50 Bit

2,852.29

28,522.85

10

RBH-50BIT

Tarjeta de proximidad standard RBH 50 Bit.

1,952.43

19,524.25

10

PROXCARDII

Tarjeta de proximidad standard, tipo PROXCARD II de HID, 26 Bit.

2,399.63

23,996.28

10

ISOPROX

Tarjeta de proximidad imprimible MOD 1386, marca HID 26 bit

2,999.54

29,995.35

www.accesosautomaticos.com
Asesor:

Z-Thais Cordero

Tiempo de Entrega:

Valido hasta:

Asesor Distribucin - Ext. 132

30 Das

10/10/2014

Revisado por:

Nuestro telfono exclusivo para instaladores y revendedores es 2227 4242

Aprobado por:

Firma:

Cdula:

*Aplican Restricciones, sujeto a disponibilidad de existencias en el momento de la compra. Todos los equipos requieren mantenimiento peridico.

Fecha:

COTIZACION

TELFONO: 2227 4242 Fax: 2227 4200

Correo: ventas@accesos.co.cr
San Jos, Costa Rica
Cdula Jurdica: 3-101-177456

308021

No.
Fecha:

10/09/2014

SN:

Cotizado para:

Cliente contado

Instrucciones de envo:

Atencin:

COSTA RICA

Telfono:

Cant.
10

00

Fax:

Cdigo
MT-PRINTC

Cel:

Descripcin

Precio

Impresin full color en tarjetas de proximidad imprimibles incluye montaje grfico. SOLO UNA

Totales

1,859.71

18,597.12

CARA.

Observaciones:

Forma de pago:

SIN DEFINIR

GARANTIA: 12 meses equipo nuevo, 6 meses repuestos, 30 das accesorios.*

SUBTOTAL

911,236.90

DESCUENTO

0.00

IMP. DE VENTAS

118,460.80

TOTAL COLONES

1,029,697.70

www.accesosautomaticos.com
Asesor:

Z-Thais Cordero

Tiempo de Entrega:

Valido hasta:

Asesor Distribucin - Ext. 132

30 Das

10/10/2014

Revisado por:

Nuestro telfono exclusivo para instaladores y revendedores es 2227 4242

Aprobado por:

Firma:

Cdula:

*Aplican Restricciones, sujeto a disponibilidad de existencias en el momento de la compra. Todos los equipos requieren mantenimiento peridico.

Fecha:

152

B.2

B Anexos

Anexo 2. Diagrama configuraci


on de pines de
un Raspberry Pi modelo B+

En la actualidad existen diferentes modelos de Raspberry Pi, como el modelo


A, modelo B y B+; incluso se esta hablando del modelo A+. Para el presente
proyecto se utiliz
o el modelo B+ que entre las principales ventajas que ofrece
respecto a otros modelos es su cantidad de GPIO. El diagrama de la figura
B.1 describe la configuraci
on de pines del Raspberry Pi modelo B+, este sirvio
como consulta para la realizaci
on del prototipo.

B.2. Anexo 2. Diagrama configuracion de pines de un Raspberry Pi modelo


B+
153

Figura B.1: Configuraci


on de pines del Raspberry Pi modelo B +. Tomada de
Raspberry-Pi-Foundation (2014)

154

B.3

B Anexos

Anexo 3. Conexi
on ilustrativa entre un
Raspberry Pi modelo B y el lector MFRC522

Para la correcta conexi


on entre el Raspberry Pi y el lector MRC522 se necesitan de siete lneas de conexi
on (incluyendo alimentacion y tierra), esto se
describi
o con m
as detalle en la seccion 3.4. En la figura B.2 muestra una conexion m
as ilustrativa entre los pines de conexion del Raspberry Pi y el modulo
MFRC522.

Figura B.2: Diagrama de conexion entre el Raspberry Pi y el modulo


MFRC522. Tomada de Raspberry-Pi-Foundation (2014)

B.4

Anexo 4. Diagrama de conexi


on completo del
prototipo

El diagrama de conexi
on del prototipo final se puede observar en la figura B.3,
este incluye: conexi
on con el lector RFID, conexion con el teclado alfanumerico
y con las salidad e indicadores. Los pines del Raspberry Pi B+ se encuentran
indicados por ubicaci
on y no por n
umero de GPIO.

B.4. Anexo 4. Diagrama de conexion completo del prototipo

Figura B.3: Diagrama de conexion completo del prototipo final

155

Anda mungkin juga menyukai