Tesis Rfid
Tesis Rfid
Tesis Rfid
Facultad de Ingeniera
Escuela de Ingeniera El
ectrica
Por:
Christian Chaves Bejarano
Por:
Christian Chaves Bejarano
IE-0499 Proyecto el
ectrico
Aprobado por el Tribunal:
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
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
5
7
8
9
9
12
15
15
16
16
17
18
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
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
57
57
58
6.1
6.2
6.3
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
F AT
GP IO
LED
M OSI
M ISO
NFC
N OOBS
RF ID
RP i
Raspberry Pi.
U SB
SD
S.O.
Sistema Operativo.
SP I
xiii
Introducci
on
1.1
Descripci
on General
1 Introduccion
1.2
Justificaci
on
1.3
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
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
2.1
Sistemas RFID
2 Marco teorico
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
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
2 Marco teorico
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
11
2.2
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
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.
13
2.3
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
15
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)
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.
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.
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
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.
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
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
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
22
3 Dise
no e implementacion de un prototipo con Raspberry Pi
(a) M
odulo RFID-RC522
Figura 3.5: M
odulo RFID-RC522 con acercamiento al componente integrado
MFRC522.
3.2
23
Microcontrolador Raspberry Pi
24
3 Dise
no e implementacion de un prototipo con Raspberry Pi
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.
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
3.3
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
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
3.5
Conexi
on Raspberry PI-Teclado Alfanum
erico
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.
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.
3.6. Dise
no y conexi
on de los demas componentes del prototipo
29
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
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
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
M
as informaci
on sobre Fritzing en http://fritzing.org/home/
31
3.7
Prototipo final
Tomados de www.amazon.com
32
3 Dise
no e implementacion de un prototipo con Raspberry Pi
Componente
Mifare RC522
Raspberry Pi
Teclado alfanumperico
Protoboard con set de cables
Buzzers
LEDs y resistencias
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.
4.1
Instalaci
on de Raspbian
34
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.
4.1. Instalaci
on de Raspbian
35
36
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
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
4.1. Instalaci
on de Raspbian
37
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
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
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/
39
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
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
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
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
Disponible en http://www.mysql.com/
42
5.1
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
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.
45
Figura 5.2: L
ogica del sistema para habilitar o deshabilitar el sistema a traves
del teclado del prototipo.
46
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
47
Terminal 2
sudo python Teclado.py
48
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).
50
5.2
51
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.
52
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.
53
54
55
56
57
58
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.
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
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.
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
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
A.2. Instalaci
on del software phpMyAdmin
71
72
A Apendice
A.3
C
odigo en Python para la implementaci
on del
sistema
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
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
A.3. C
odigo en Python para la implementacion del sistema
42
43
44
45
46
75
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
A.3. C
odigo en Python para la implementacion del sistema
208
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
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
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ámara </
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>  ; </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
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
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ámara </
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>  ; </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 >
A.4. C
odigo en PHP y HTML para la implementacion del sistema
span>Cámara </
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>  ; </p>
<p>  ; </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
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
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ámara </
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>  ; </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>  ; </p>
ralo
c
<h2>Esp A
muy p r o n t o ! </h2>
<p>  ; </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
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
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ámara </
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>  ; </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>  ; </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
// 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
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
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
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>  ; </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>  ; </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
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>  ; </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
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ámara </
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
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 >
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ámara </
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>  ; </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>  ; </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
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>  ; </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ámara </
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>  ; </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
;
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
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
/ ! 4 0 1 0 1
/ ! 4 0 1 0 1
;
/ ! 4 0 1 0 1
/ ! 4 0 1 0 1
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
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
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
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
A.5. C
odigo en SQL para la base de datos
96
97
98
99
100
101
102
103
104
105
106
107
147
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
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
149
COTIZACION
Correo: [email protected]
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
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
RBH-SR-2400
1
1
SD-7103
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
ST24063A
T1640
5,999.07
5,999.07
CMC-PA
1,799.72
1,799.72
RBH-LIF-200
167,973.96
167,973.96
CIPYALE
23,320.00
23,320.00
INSTALL 85
25,196.09
25,196.09
10
RBH-50BIT-PT
2,852.29
28,522.85
10
RBH-50BIT
1,952.43
19,524.25
10
PROXCARDII
2,399.63
23,996.28
10
ISOPROX
2,999.54
29,995.35
www.accesosautomaticos.com
Asesor:
Z-Thais Cordero
Tiempo de Entrega:
Valido hasta:
30 Das
10/10/2014
Revisado por:
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
Correo: [email protected]
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
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:
30 Das
10/10/2014
Revisado por:
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
154
B.3
B Anexos
Anexo 3. Conexi
on ilustrativa entre un
Raspberry Pi modelo B y el lector MFRC522
B.4
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.
155