Adios
Adios
Adios
Se observa que hoy en día las calles se vuelven más peligrosas y esto
influye a que se contrate el servicio de guardias, pero este servicio posee un
alto costo, o muchas veces las empresas que manejan roles monetarios o
instituciones privadas son las que gozan de un sistema de seguridad completo
y sumamente bueno, sin embargo porque no se puede pedir un sistema de
vigilancia de igual excelencia o mejor, para que brinde la protección a
instituciones educativas, hogares o fundaciones.
1.4 Justificación
1.5 Variables
Tiempo de monitoreo: los sensores estarán en activación las 24horas
del día y podrán ser monitoreadas por medio de la aplicación Blynk.
Notificación: si el sensor ultrasónico es interrumpido por medio de la
aplicación llegaran notificaciones
Armado del sistema de alarmas: Diversas configuraciones a realizarse
en el menú de la central de alarma: armado parcial y armado global.
1.6 Metodología
Para el desarrollo de este proyecto se aplicaron los siguientes métodos, técnicas y
procedimientos de investigación los cuales fueron de gran ayuda en el momento de su
ejecución.
1.6.1 Métodos:
Método deductivo: Aportó en la evaluación de distintos aspectos de gran
importancia en la investigación, debido a que se analizó los inconvenientes
presentados, además se recolecto información y se utilizó un desarrollo con soporte en
fundamentos teóricos y científicos para tener resultados positivos, obteniendo de esta
manera conclusiones válidas que nos posibiliten una elaboración detallada y
organizada a partir de los datos concretos.
Instrumentos de investigación
1.7.2 Muestra
El sistema de alarma está ubicado en la vivienda de uno de los
creadores.
1.8 Descripción de la propuesta
El presente Proyecto pretende desarrollar e implementar un sistema de
seguridad en la Mexicali y sus alrededores.
El sistema de seguridad constará de un sensor ultrasónico Hc-sr04, que serán
distribuidas una en cada esquina y una en la zona central, estos sensores poseen
una larga distancia de detectar movilidad y dificulta que los residentes lo muevan o
manipulen. A su vez se colocará sensor Pir, el cual posee un sencillo
funcionamiento pero eficaz ya que miden la radiación infrarroja cuando un cuerpo
intercede con el sensor.
Se consideró a su vez un modulo de Wifi iot mcu 8266
Además, el proyecto constará de una central de alarma diseñada y construida
por los autores, que tendrá como funcionalidad de acuerdo a la programación del
microprocesador 18F4550 de recibir las señales de los diferentes equipos y tomar
acciones como activar una sirena y enviar un mensaje a un dispositivo móvil, el
teclado permitirá realizar a los usuarios autorizados las programaciones de la
central de alarma así como también realizar el control del sistema como activación
y desactivación.
1.8.1 Beneficiarios
Antecedentes
Los sistemas de seguridad se han venido planteando desde hace algún tiempo
atrás debido a la gran necesidad de las personas por proteger su integridad física
o simplemente sus objetos de valor; para ciertos establecimientos se ha
presentado el requerimiento de contar con circuitos cerrados de televisión (video-
cámaras) y sistemas de alarmas (sensores, alarmas, entre otros), sin embargo, lo
más empleado son las cámaras de video vigilancia debido a su gran eficacia en
tener un registro de almacenamiento de las actividades realizadas y pasadas por
alto del ojo humano.
Aplicaciones de telemetría.
2.1.2 Blynk
Tabla 2.1
Medios de transmisión
Blindado (STP)
Par trenzado
No blindado (UTP)
Alámbricos
Delgado
Cable coaxial
Grueso
Ópticos Fibra óptica
Electromagnéticos Espacio atmosférico
Nota: Tabla que indica los distintos medios de transmisión en los CCTV. Pérez
(2003)
El cable PTSB (UTP, sin blindaje), es el más popular de los cables de par
trenzados y se está convirtiendo rápidamente en el más utilizado para el
cableado de área local. La longitud máxima por segmento es de 100 metros.
Los cables UTP son económicos, flexibles y permiten manipular una señal a
la distancia máxima de 110 metros sin repetidor. (Pérez, 2003)
Figura 2.4 Par trenzado sin blindaje (UTP). Par trenzado cable UTP categoría 6
usado para la comunicación de las cámaras. Por Pérez (2003)
2.3 Monitoreo
El monitoreo se lo puede implementar de dos formas:
Figura 2.5 Monitoreo local, celular ubicado en la residencia. Visualización local del
monitor instalado en la recidencia. Por Hikvision (2014).
Remoto: Luego de poder configurar una salida a internet, podemos
tener una página en la cual podamos visualizar el movimiento de los sensores
y así tener acceso en donde quiera que estemos atravez de nuestro correo
electronico. Podemos monitoreas en nuestros celulares, siempre y cuando
esté disponible el software dependiendo de las características de nuestro
grabador, y las características de nuestros teléfonos celulares, en una tablet,
laptop, etc.
Central de alarma
Teclado
Sensores
Mensajes de Texto
Todos los sistemas de alarmas traen conexiones de entrada para los distintos
tipos de detectores y por lo menos una de salida para activar otros
dispositivos, si no hay más conexiones de salida, la operación de llamar a un
número, mandar un aviso por correo electronico, sonar una sirena, abrir el
rociador o cerrar las puertas deberá ser realizada en forma manual por un
operador.
Los equipos de alarma pueden estar conectados con una Central Receptora,
para esto, se necesita de un medio de comunicación, como pueden serlo: una
línea telefónica RTB o una línea GSM, un transmisor por radiofrecuencia
llamado Trunking o mediante transmisión TCP/IP que utiliza una conexión
de banda ancha ADSL y últimamente servicios de Internet por cable, Cable
Módem y nuestra inovacion Un correo electrónico a gmail.
Tabla 2.3
Puertos del Microcontrolador PIC 18F4550
PUERTO LINEAS DE ENTRADA/SALIDA
PUERTO 7 LINEAS DE E/S
A
PUERTO 8 LINEAS DE E/S
B
PUERTO 6 LINEAS DE E/S + 2 LINEAS DE
C ENTRADA
PUERTO 8 LINEAS DE E/S
D
PUERTO 3 LINEAS DE E/S + 1 LINEA DE
E ENTRADA
Nota: Esta tabla posee los puertos respectivos del Microcontrolador PIC
18F4550. Reyes (2008)
Los módulos LCD (Display de cristal líquido), son utilizados para mostrar
mensajes que indican al operario el estado de la máquina, o para dar
instrucciones de manejo, mostrar valores, etc. El LCD permite la comunicación
entre las máquinas y los humanos, este puede mostrar cualquier carácter
ASCII. (Reyes, 2008)
- 128x64 puntos
- Modo de visualización (azul y amarillo)
- Visualización de la dirección o columna de la GLCD en 6 tiempos de reloj.
- 8 líneas de datos paralelos
Tabla 2.4
Descripción de las terminales de la GLCD.
Para explorar un teclado matricial se envían señales hacia las filas de la matriz
por las líneas de exploración y se recoge información por las columnas, que
entonces constituyen las líneas de retorno. Básicamente se parte de que si no
hay ninguna tecla pulsada, todas las líneas de retorno están en el nivel lógico
“1”. Las líneas de exploración son puestas a “0”. Este valor lógico sólo aparece
en la línea de retorno mantienen el valor “1”. Con la información enviada hacia
la matriz y la que retorna, se conforma un código único para cada tecla,
llamado código de exploración. (Valdés & Pallás, 2007)
2.9 Sensores
Los sensores son aquellos que pueden trabajar de forma autónoma para
automatizar aisladamente determinados circuitos de la vivienda o de forma
integrada en el sistema remoto. Existen numerosos tipos de sensores. Desde
los más simples, tipo interruptor y pulsador, que envían señales de acciones
manuales del usuario
hacia la instalación, hasta los más complejos que son capaces de detectar
magnitudes físicas (temperatura, humedad, velocidad del viento, humos, etc).
A estos últimos también se les denomina detectores. (Martín, 2010)
Detectores de gas
Si se desea aprovechar una entrada del nodo para realizar una función
con varias ventanas y puertas a la vez, es necesario utilizar una conexión en
serie de esta forma cuando las puertas y ventanas están cerradas, los
contactos permanecen cerrados, así si una de ellas se abre, el contacto lo hace
también de forma inmediata y la falta de señal puede ser detectada por el nodo
para producir una acción. Para que el dispositivo sea
eficaz no se debe superar la distancia recomendada por el fabricante
entre el contacto y el imán.
Figura 2.13 Detector de movimiento zona de captación. Estas son las distintas
captaciones que posee el detector de movimiento. Por Valentín (2012).
2.10 Sistema GSM
Un terminal GSM no tiene acceso a la red salvo si dispone de todos los datos
específicos del abonado. Estos datos están incluidos en una tarjeta inteligente
llamada SIM (Subscritber Identity Module) que debe introducirse en el
terminal. La tarjeta SIM, cuyo acceso se protege con un número de
identificación personal, contiene no sólo los datos del abonado (número en la
RDSI, clave personal, etc...) sino también determinada información personal,
como marcación abreviada de números, lista de redes preferentes e
información de tarifación. En la tarjeta SIM también se almacena los mensajes
cortos. (Martínez, 2002)
El SIM está protegido por cuatro dígitos que reciben el nombre de PIN,
una vez que se introduce el PIN en el terminal se empieza a buscar redes
GSM que estén disponibles y va a tratar de validarse en ellas, una vez que la
red ha validado el terminal, el teléfono queda registrado.
Figura 2.16 Tarjeta SIM. Elemento que nos dará un número de
identificación personal. Recuperado de
http://www.claro.com.ec/
2.10.2 Servicio de mensajes cortos (SMS)
Los modem GSM actúan como teléfonos móviles, se les debe de proporcionar
una tarjeta SIM para que estos comiencen a ejecutar el envío y recepción de
mensajes, gestionar la base de datos, la configuración de diversos
parámetros. El estándar para controlar los módems se basa en los comandos
AT HAYES.
Tabla 2.5
Especificación del puerto serial DB9.
Puerto Serial DB9
Nombr Pin Función
e
CTS 8 Listo para enviar
RTS 7 Solicitud de envío
TXD 2 Transmite datos
RXD 3 Recepción de
datos
Nota: Especificación del puerto serial DB9.
SENSOR
DE
PROXIMIDAD
Figura 3.2 Diagrama de bloques del sistema de CCS. Indica los elementos
utilizados en el sistema de CCS
Figura 3.3 Diagrama de bloques del sistema de alarmas. Indica los elementos
utilizados en el sistema de alarmas.
Posteriormente se muestra en la figura 3.4 el diagrama físico de las conexiones del
sistema de seguridad.
34
Figura 3.4 Diagrama de bloques físico del sistema de seguridad. Indica los equipos
físicos utilizados en el sistema de seguridad.
3.1.1 Placa
Maestro
Componente
s
Para el diseño de la placa maestro procedimos con anterioridad a realizarlo
en un protoboard con la finalidad de comprobar el correcto funcionamiento de
los componentes y así corregir errores que pudieren presentarse.
36
pruebas de transmisión de datos usando un módulo wifi y un dispositivo
móvil.
Tabla 3.1
Elementos de la PCB para la placa maestro
Elemento Cantida
s d
Microcontrolador 18F4550 1
Módulo Wifi 1
Tarjeta Proto 1
App 1
37
Funcionalidad
Es por este motivo que la placa maestro contiene un bloque de borneras, las
cuales contienen en cada entrada una resistencia en serie de 10K, una
resistencia pull-down de 100k y un diodo zener de 5.1 V. Se usa esta
configuración para proporcionar al cable de los contactos 9 voltios, debido a
que la longitud del cable es
38
tan largo que podría haber una caída de voltaje de 4 voltios pero aun así
detectaría un nivel lógico alto, el zener asegura de que no sobrepase el voltaje
máximo de 5v en la entrada del PIC y la resistencia pull-down de 100k que se
coloca siempre al final del recorrido nos permite mantener un estado lógico
bajo cuando se haya abierto el circuito del sensor.
39
A continuación en la figura 3.14 se detalla los elementos necesarios para
proceder a la activación de la alarma sonora.
Programación
40
XMIT=pin: Setea el pin de transmisión.
RCV=pin: Setea el pin de recepción.
PARITY=X: puede ser N, E u O.
TIMEOUT=X: Setea el tiempo que getc( ) espera por una entrada en
ms, si ningún carácter ingresa dentro de este tiempo el
RS232_ERRORS es seteado 0.
41
comunicación con el módulo GSM y otro por software usado para la
comunicación con el esclavo.
Los que contienen la letra ‘t’ significa que el registro se configura como
entrada o salida, por este motivo están asignados los TRISX. Los nombres
que no contienen la letra ‘t’ son los que contienen la información de los pines
y es lo q se usa más adelante en la programación.
42
Luego se procede a pedirle la información al esclavo de los teléfonos
almacenados, claves almacenadas, sensores activos.
43
Figura 3.16 Diagrama de flujo del funcionamiento detallado del maestro. Configuraciones realizadas en las entradas y salidas del
pic 18f4550 y encendido del modem GSM sim 900.
47
Como se puede observar en el diagrama de flujo al inicio se cuenta con una
configuración de las entradas y salidas del microcontrolador, seguido por el proceso
de encendido del modem GSM y luego su configuración que toma
aproximadamente 13 segundos. Este proceso se ejecuta solo una vez al
energizarse el sistema seguido de esto se queda encerrado en dos FOR, el primero
de una variable ‘j’ que va desde 0 a 4 y el segundo for que está dentro del for
anterior controlado por la variable cont, que va desde 0 a 99.Dentro de este for se
realiza la verificación de los puertos, la verificación de la alarma activada por el
usuario y la notificación por mensaje SMS.
La verificación de los puertos se realiza cada 1ms, es decir que si un intruso quiere
abrir las puertas debería hacerlo en menos de 1ms.
Después de 100 verificaciones de las puertas, es decir 100ms sale del segundo for
y continúa haciendo la tarea del primer for, la cual es pedir informaciones al esclavo
de 1 vez cada 100ms. Esto quiere decir que después de los primeros 100 ms de
verificar los sensores continuamente se le hace una petición al esclavo para que le
envíe el teléfono 1, luego de esto espera otros 100ms más para pedir el teléfono 2
y así sucesivamente. De este modo la información en el maestro queda actualizada
completamente después de 500 ms.
- AT+CMGF
- AT+CNMI
- AT+CMGS
48
Sintaxis de los comandos AT.
Los comandos son usualmente seguidos por una respuesta que incluye
<CR><LF><respuesta><CR><LF>.
Sintaxis Básica
49
Donde: < mode > puede tener los siguientes valores:
Parámetros de <mode>
0 El adaptador terminal (TA) almacena los sms no
solicitados en un buffer, si este se llena los nuevos
mensajes reemplazan los
antiguos mensajes.
1 Descarta las indicaciones y rechaza los nuevos mensajes
no
solicitados. De lo contario transmitirá al equipo terminal
(TE).
2 Indica al terminal que envíe el contenido de cualquier
mensaje
sms a través del puerto serial.
3 Muestra directamente el código en el terminal.
Nota: Puede tomar el valor de 0, 1, 2, 3 deacuerdo a la programación
requerida.
Mt, establece el formato del código del mensaje el valor por default es 1 puede
tomar los siguientes valores.
50
Ds, indica el estado del mensaje que está siendo enviado, puede tomar
los siguientes valores:
Parámetros de <Bfr>
0 El código de este comando almacenado en TA será enviado al
TE
1 El código de este comando almacenado en TA será borrado.
Nota: valores que puede tomar Bfr son 0 y 1.
53
Diagrama de flujos de la interrupción por datos de entrada en el puerto serial. Primero se
recibe información del número telefónico y luego información acerca del mensaje
que envía el usuario.
54
La recepción de información se produce por interrupciones y la secuencia lógica
del funcionamiento viene dada por la información que se recibe por parte del módulo
GSM, es decir, primero se recibe información del número telefónico y luego
información acerca del mensaje que envía el usuario, este orden está controlado por la
variable “número comprobado”.
55
3.1.2 Placa Esclavo
Componentes
Para la elaboración del módulo esclavo designada para ingreso y visualización
de datos se realizó con el programa Isis el diseño de una PCB acorde a las necesidades
presentadas por el microcontrolador 18f4550 para poder procesar las diversas señales
provenientes de la placa maestro.
56
Funcionalidad
Debido a que la transmisión es asíncrona, es posible enviar datos por una línea mientras
se recibe datos por otra. Además se muestra R2 (100k), la cual es una resistencia
PULL-UP para que en caso de que no esté conectado el maestro no haya ruido
electrónico o variaciones en la fuente de alimentación cayendo en un bajo y así pase a
un estado lógico alto.
Cuando el módulo maestro envía los bytes de datos el modulo esclavo almacena y
ejecuta las acciones correspondientes a las tareas programadas entre las que podemos
mencionar:
- Ingreso de clave de acceso al menú de alarma.
- Activar/desactivar alarma general.
- Habitar /deshabilitar los contactos magnéticos y el sensor de movimiento.
- Grabar un nuevo número telefónico de los usuarios designados.
- Grabar una nueva clave de acceso.
58
Diagrama del circuito del teclado. Pines utilizados para conectar el teclado.
Para la visualización del menú del sistema de alarma se utiliza un LCD gráfico
de 128x64 de marca JHD12864E.
LCD
SIL-100-20
C6
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
VDD
470uF
b5
b4
b3
d0
d1
d2
d3
d4
d5
d6
d7
b0
b1
b2
R3
VOUT
VSS
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
CS1
CS2
R/W
BLK
RST
4.7k
`D/I
VO
Blight
E
Figura. 3.26 Diagrama del circuito del LCD gráfico. Pines utilizados para conectar
la GLCD.
59
y el texto pueda ser percibido de una manera legible. También se coloca un capacitor
de 470 Uf/16v para mantener un voltaje fijo sin muchas variaciones
Programación
Así como el maestro usa funciones del IDE para las configuraciones del
hardware, el esclavo también usa para la comunicación serial con el maestro.
Se definen en que pines se encuentran conectadas las columnas y las filas del
teclado matricial
60
Se configura el módulo PWM (modulación por ancho de pulso) para poder
controlar la luminosidad de la pantalla para esto es necesario habilitar el TIMER2 y
el módulo CCP1.
- Clave:12345
- Teléfono 1: 0983918659
- Teléfono 2: 0959210710
61
Diagrama de flujo del funcionamiento general del esclavo. Proceso lógico si
detecta alguna alarma.
62
Diagrama de flujos del menú de opciones. Proceso lógico del recorrido en menú de
la central de alarma.
63
Como se muestra en el diagrama para desplazarse en el menú de opciones se lo
realiza con las teclas A Y B para subir y bajar respectivamente, para modificar el
parámetro seleccionado, se lo realiza con la tecla C, para guardar y salir del menú de
opciones se presiona la tecla D.
64
‘S’ El maestro pide que sensores El esclavo responde 10bytes de los
están habilitados para que cuales 7 corresponden a los
suenen con la alarma. sensores habilitados y 3 de reserva.
‘C’ El maestro solicita la clave. El esclavo responde con el primer
byte que indica la cantidad de
dígitos de la clave seguidos por
todos los dígitos de la clave.
‘U’ El maestro indica que a El esclavo solo recibe la
enviar que puertas están información que envió el maestro.
abiertas o cerradas.
‘R’ El maestro pregunta si está ‘r’
listo para una nueva
recepción de datos.
‘K’ El maestro indica que se debe ‘k’
habilitar el sistema para que
suene la alarma en caso de
haber intrusos.
‘Q’ El maestro indica que se ‘q’
deshabilita el sistema.
65
cajas de paso las cuales nos servirán para tener los empalmes y halar o mantener
reserva del cable.
para comunicar las cámaras se poncharon y se le adaptó los conectores RJ45; en cambio para
comunicar los contactos magnéticos con la central de alarma se usaron dos hilos estos fueron
empalmados.
66
Instalación de los equipos del sistema de CCTV. Se instalaron los respectivos
equipos para el funcionamiento del CCTV en cada ubicación designada.
67
Montaje de equipos perteneciente a la central de alarma.
Instalación de contactos magnéticos y sensor de movimiento a la central de alarma.
68
Instalación de breaker y alimentación de los equipos al UPS. Las instalaciones
se realizaron de forma independiente con un breaker de 15A -1P.
69
Una vez culminado el montaje de todo el sistema de seguridad y la instalación
de los respectivo programas se procede a realizar las pruebas; comprobamos que las
cámaras se encuentran grabando de forma óptima y que se puede realizar el monitoreo
telemétrico a través de la aplicación instalada, a la vez se comprobó el funcionamiento
de la central de alarma verificando que el modem GSM envíe y reciba los mensajes de
alarma en caso de que los contactos magnéticos y el sensor de movimiento envíen
algún pulsos de alarma hacia la central.
Asegurándose que todo esté en óptimo funcionamiento avanzamos con la
capacitación hacia el personal que se encargará de la fundación.
1.- Presionar cualquier tecla para encender la pantalla. A continuación se indica las
funciones de cada tecla.
Funciones del teclado matricial. Cada tecla fue programada con su respectiva
función.
2.- Ingresar clave para acceder al menú de alarma, utilice la tecla * si desea borrar un
digito mal ingresado.
70
Figura 3.38 Pantalla 1. Muestra al presionar cualquier tecla.
3.- Acceso a la pantalla de menú principal donde tenemos dos opciones para la
activación general de la alarma.
71
3.1 Activación manual del sistema.
En caso de no querer esperar este tiempo establecido que se muestra en pantalla, puede
presionar cualquier tecla e inmediatamente se activará el sistema.
72
3.3 Activación/Desactivación por mensaje de texto.
Enviamos un mensaje de texto con el siguiente formato < #(contraseña)on > para la
activación del armado completo del sistema y < #(contraseña)off > para la
desactivación del mismo.
4.- Luego tendremos la opción para realizar un armado parcial del sistema, es decir la
activación y desactivación individual de los contactos magnéticos y el sensor de
movimiento, presionando las teclas A y B se puede ascender y descender en este menú.
73
Pantalla 4. Muestra identificación, ubicación y estado de los contactos magnéticos.
Pantalla 5. Muestra opción a un armado parcial del sistema con los contactos
magnéticos.
74
Cuando el sensor de movimiento detecte una alarma, esperará un tiempo programado
de 80 segundos. Este tiempo de igual manera se programó para el contacto magnético
de la puerta de ingreso.
Durante ese tiempo se tendrá la opción de digitar la clave para que no se accione la
sirena.
75
6.-Luego aparece el menú “cambiar número de teléfono 1 “y “cambiar número de
teléfono 2” para ejecutar esta opción se debe presionar la tecla C y a su vez solicitará
el nuevo número.
76
7.- A continuación tendremos el menú “nueva contraseña “si desea crear una nueva
clave presionar la tecla C.
Ingresar la nueva clave y seguido presionar la tecla D para que se quede guardado
el cambio.
Mensaje para detener alarma. Este formato solo detendrá la alarma producida que
indique el mensaje de texto más no todo el sistema.
78
Procedimiento a seguir en caso de olvidar contraseña:
Realizar con un cable un puente en los extremos de los pines del bloque de
programación de la placa esclavo.
79
BOTON
RESET
Pantalla de sistema reseteado. Para acceder al menú se debe ingresar la nueva clave
reseteada.
80
CONCLUSIONES
81
PRESUPUESTO
VALOR
ITEM DESCRIPCIÓN CANT. TOTAL
UNITARIO
1 SERVICIOS TÉCNICOS
1.1 Fabricación de circuito impreso en PCB 1 $ 94,65 $ 94,65
1.2 Elaboración de caja para la central de alarma 1 $ 30,00 $ 30,00
Elaboración de rejas de protección para las
1.3 1 $ 35,00 $ 35,00
cámaras y el sensor de movimiento
2 ACTIVOS DEL PROYECTO
2.1 Equipos
2.1.1 Cámara Hikvisión DS-2CD2012-I 1 $ 300,00 $ 300,00
2.1.2 Cámara Hikvisión DS-2CD2112-I 3 $ 310,00 $ 930,00
2.1.3 Sensores magnéticos Seco-Larm SM-226R- 6 $ 25,00 $ 150,00
3Q
2.1.4 Sensor de movimiento WatchOUT 1 $ 240,00 $ 240,00
2.1.5 CPU Core i3 3,0 GHZ/ 4GB / 1 TB 1 $ 400,00 $ 400,00
2.1.6 Monitor / tarjeta de video 1Giga 1 $ 100,00 $ 100,00
2.1.7 Mouse inalámbrico 1 $ 10,00 $ 10,00
2.1.8 Teclado 1 $ 12,50 $ 12,50
2.1.9 UPS 1000va 1 $ 100,00 $ 100,00
2.1.10 Switch TP-LINK 8 puertos 1 $ 25,00 $ 25,00
2.1.11 Programador Pickit 3 1 $ 90,00 $ 90,00
2.1.12 Multímetro 1 $ 26,00 $ 26,00
2.2 Construcción de placas
2.2.1 Placa esclavo
Microcontrolador 18F4550 1 $ 12,50 $ 12,50
LCD gráfico 1 $ 15,00 $ 15,00
Teclado 4x4 1 $ 7,00 $ 7,00
Puente rectificador de diodos w04 1 $ 0,25 $ 0,25
Regulador LM7805 1 $ 0,35 $ 0,35
Capacitor 470 uf 3 $ 0,07 $ 0,21
Capacitor 100 nf 2 $ 0,05 $ 0,10
Resistencia 100k 4 $ 0,04 $ 0,16
Resistencia 10k 4 $ 0,02 $ 0,08
Resistencia 4,7k 1 $ 0,01 $ 0,01
Resistencia 220 2 $ 0,01 $ 0,02
Transistor 2N3904 2 $ 0,03 $ 0,06
Pin header 3 $ 0,40 $ 1,20
Botonera 1 $ 0,20 $ 0,20
Borneras 2 pines 1 $ 0,20 $ 0,20
Borneras 3 pines 1 $ 0,25 $ 0,25
Diodo led 1 $ 0,07 $ 0,07
Cables con conector 5 $ 1,20 $ 6,00
Zócalo de 16 pines 1 $ 0,50 $ 0,50
2.2.2 Placa maestro
82
Microcontrolador 18F4550 1 $ 12,50 $ 12,50
Módulo GSM 1 $ 80,00 $ 80,00
Tarjeta
1 $ 5,00 $ 5,00
SIM
Sirena a 12 v y repuestos varios 1 $ 17,25 $ 17,25
Transformador 110V - 6v / 1A 1 $ 5,39 $ 5,39
Puente rectificador de diodos w04 1 $ 0,25 $ 0,25
Regulador LM7805 1 $ 0,35 $ 0,35
Capacitor 1000uf 1 $ 0,04 $ 0,04
Capacitor 470 uf 4 $ 0,07 $ 0,28
Capacitor 100 uf 1 $ 0,05 $ 0,05
Capacitor 100 nf 3 $ 0,05 $ 0,15
Resistencia 100k 10 $ 0,04 $ 0,40
Resistencia 10k 7 $ 0,02 $ 0,14
Resistencia 1k 1 $ 0,01 $ 0,01
Resistencia 300 1 $ 0,01 $ 0,01
Transistor 2N3904 1 $ 0,03 $ 0,03
Relé JZC-4123 /5VDC 1 $ 5,00 $ 5,00
Pin header 3 $ 0,40 $ 1,20
Botonera 1 $ 0,20 $ 0,20
Borneras 2 pines 9 $ 0,20 $ 1,80
Borneras 3 pines 2 $ 0,25 $ 0,50
Diodo 1N4001 1 $ 0,10 $ 0,10
Diodo zener 1N4733A 7 $ 0,10 $ 0,70
Diodo led 1 $ 0,07 $ 0,07
Cables con conector 5 $ 1,20 $ 6,00
Zócalo de 16 pines 1 $ 0,50 $ 0,50
2.3 Instalación
2.3.1 Cables
Cable UTP Categoría 6 160 $ 0,60 $ 96,00
Cable UTP Categoría 5 40 $ 0,48 $ 19,20
Cable 2x18 120 $ 0,38 $ 45,60
Cable 2x16 70 $ 0,60 $ 42,00
Cable 2x12 86 $ 0,65 $ 55,90
Cables 5,5x2,5 4 $ 4,35 $ 17,40
Cable DC 1,8mt 1 $ 1,05 $ 1,05
Cable Ribbon macho -hembra 1 $ 3,13 $ 3,13
Bus de datos 1 $ 2,40 $ 2,40
Kit cables para arduino 1 $ 4,46 $ 4,46
2.3.2 Tubos y canaletas
Tubería 3/4" 16 $ 1,80 $ 28,80
Tubo anillado flex 3/4 1 $ 0,26 $ 0,26
Conector de tubo metal 3/4" 16 $ 0,49 $ 7,86
Derivación en T 20x12 1 $ 0,46 $ 0,46
Canaletas 35 $ 2,00 $ 70,00
Angulo interno 20x20 6 $ 0,56 $ 3,38
83
Angulo Externo 20x12 6 $ 0,43 $ 2,57
Tapa 4x4 11 $ 0,70 $ 7,70
Cajetin PVC rectangular 11 $ 2,00 $ 22,00
Codo PVC para tubo 3/4 in 5 $ 0,35 $ 1,74
2.3.3 Accesorios
Enchufe 15A 125V 4 $ 0,41 $ 1,64
Enchufe 2 patas 1 $ 0,91 $ 0,91
Taco Fisher 3 $ 0,65 $ 1,95
Conector RJ45 20 $ 0,40 $ 8,00
Amarras 2,5mm 3 $ 0,87 $ 2,61
Tornillos 1" x 10 200 $ 0,03 $ 6,00
Tornillos 1" x 8 200 $ 0,03 $ 6,00
Rodelas de presión 1/4 100 $ 0,02 $ 2,00
Rodelas de presión N10 100 $ 0,02 $ 2,00
Broca cemento 1/4 6 $ 0,81 $ 4,86
Toma doble empotrado 1 $ 1,12 $ 1,12
Placa para tomacorriente 1 $ 0,07 $ 0,07
Adaptador de voltaje 12v 1000mA 2 $ 5,36 $ 10,72
Broca para concreto 1/2" 1 $ 15,14 $ 15,14
Letrero para central de alarma 1 $ 6,00 $ 6,00
Candados 2 $ 3,27 $ 6,54
Pintura spray negro 2 $ 2,59 $ 5,18
Alambre galvanizado 44 Lbs 2 $ 0,93 $ 1,86
Organizador de cable 1 $ 2,58 $ 2,58
Kit receptor y transmisor Seco-Larm 1 $ 50,74 $ 50,74
3 SERVICIOS VARIOS
3.1 Insumos 1 $ 918,20 $ 918,20
3.2 Impresos y material audio visual 1 $ 339,95 $ 339,95
TOTAL DEL PRESUPUESTO $ 4.551,21
84
BIBLIOGRAFIA
Cornejo, A., & Tintin, J. (2010). Diseño, construcción e implementación de un sistema de
telemetrá utilizando tecnología GSM; para el monitoreo de los parámetros de
temperatura, presíon de aceite, velocidad de giro del motor y velocidad de
desplazamiento de un vehiculo chevrolet optra 200. Tesis, Universidad Politecnica
Salesiana, Cuenca. Obtenido de
http://dspace.ups.edu.ec/bitstream/123456789/1114/23/UPS-CT001987.pdf
Flores, M., & Rosero, R. (2014). Diseño e implementación de un sistema de seguridad con
comunicación inalambrica utilizando tecnología zigbee y control de eventos por
medio de sms para la empresa de calzado Docceti shoes. Quito.
Menéndez, L., Fernández, L., López, E., & Mandado, E. (2007). Microcontroladores PIC.
Sistema integrado para el autoaprendizaje. Barcelona: marcombo.
Pérez, E. H. (2003). Tecnologías y redes de transmisión de datos. México D.F.: LIMUSA S.A.
GRUPO NORIEGA.
85
Reyes, C. A. (2008). Microcontroladores Pic Programacion en BASIC. Quito: RISPERGRAF.
Valdés, F., & Pallás, R. (2007). Microcontroladores: Fundamentos y aplicaciones con PIC.
España: Marcombo S.A.
86
ANEXOS
#include <stdlib.h>
#include "PIC18F4550_registers.h"
#bit ON=_PORTD.4
#bit princ=_PORTB.0
#bit S1=_PORTB.1
#bit S2=_PORTB.2
#bit S3=_PORTB.3
#bit S4=_PORTB.4
#bit S5=_PORTB.5
#bit mov=_PORTD.7
#bit RELE=_PORTD.6
#bit tON=_TRISD.4
#bit tPrinc=_TRISB.0
#bit tS1=_TRISB.1
#bit tS2=_TRISB.2
#bit tS3=_TRISB.3
#bit tS4=_TRISB.4
#bit tS5=_TRISB.5
#bit tMov=_TRISD.7
#bit tRele=_TRISD.6
char clave[15]={0};
char telefono[15]={0};
char telefono2[15]={0};
char sensActivo[10]={0};
char sensActual[10]={0};
char sensHaSidoActivado[10]={0};
char claveRecibida=0;
char recibido[50];
char mensaje[200];
char hab;
char SensMovimientoAct=0;
char SensIngresoAct=0;
char pedirClave();
char pedirTelefono();
char pedirTelefono2();
char pedirSenActivo();
char enviarSenActual();
void fn();
void llamar();
87
void enviarMensaje(char queTelefono);
void encender();
void configurar();
void ActSensActual();
char ComprobarAlarma();
#define SEGUNDOS_PARA_QUE_ACTIVE_ALARMA 80
char contadorSeg2=0;
char contadorSeg3=0;
char numeroSMS[20];
char numeroSMScomprobado=0;
int notificarON=0,notificarOFF=0;
#INT_RDA
void RDA_isr()
{
char t[]="+CMT: \"+593";
char i;
if(contadorSeg2>1)
{
numeroSMScomprobado=0;
}
contadorSeg2=0;
if(numeroSMScomprobado==0)
{
if(Comprobar(t)==1)
{
numeroSMS[0]='0';
i=1;
do{
numeroSMS[i]=getc(GSM);
i++;
}while(i<19 && numeroSMS[i-1]!='\"');
numeroSMS[i-1]='\0';
if(strcmp(numeroSMS,telefono+1)==0)
{
numeroSMScomprobado = 1;
}
else if(strcmp(numeroSMS,telefono2+1)==0)
{
numeroSMScomprobado = 1;
}
}
}
88
else
{
Recibido [ 0 ] = getc ( GSM );
If ( recibido [ 0 ] == ' # ' )
{
char len;
fgets ( recibido+1,GSM );
len=strlen(recibido+1);
for ( i=len+1;i<50;i++ ) recibido [i] = ' \0 ' ;
recibido[len]='\0';
recibido[45]='\0';
notificarOFF=0;
notificarON=0;
if(recibido[len-1]=='f')
{
if(recibido[len-2]=='f')
{
if(recibido[len-3]=='o')
{
notificarOFF=10;
recibido[len-3]='\0';
}
}
}
else if(recibido[len-1]=='n')
{
if(recibido[len-2]=='o')
{
notificarON=10;
recibido[len-2]='\0';
}
}
if(strcmp(clave+1,recibido+1)==0)
{
claveRecibida=1;
}
else
{
notificarON=0;
notificarOFF=0;
}
numeroSMScomprobado=0;
}
}
}
int16 contadorSeg=0;
char contadorCuartoSeg=0;
#INT_TIMER1
void ISR_TIMER1()
{
SET_TIMER1(3036);
contadorCuartoSeg++;
if(contadorCuartoSeg>=4)
{
contadorSeg++;
contadorCuartoSeg=0;
contadorSeg2++;
89
contadorSeg3++;
}
}
void main()
{
char text[10],i,j,k,est,alarma;
int16 cont;
SETUP_CCP1(CCP_OFF);
SETUP_CCP2(CCP_OFF);
_PORTA=0;
_PORTB=0;
_PORTD=0
ON=1;
rele=0;
tON=1;
tPrinc=1;
tS1=1;
tS2=1;
tS3=1;
tS4=1;
tS5=1;
tMov=1;
tRele=0;
encender();
configurar();
pedirTelefono ( );
pedirTelefono2 ( );
pedirClave();
pedirSenActivo ( );
claveRecibida=0;
SET_TIMER1 (0);
SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8);
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(PERIPH);
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(INT_TIMER1);
notificarON=0;
notificarOFF=0;
putc('D',PAD);
while(1)
{
for(j=0;j<5;j++)
90
{
for(cont=0;cont<100;cont++)
{
if(notificarOFF>0)
{
putc('K',PAD);
if(getc(PAD)=='k')
{
notificarOFF=0;
sprintf(mensaje, "Sistema Desactivado");
enviarMensaje (1);
enviarMensaje (2);
pedirSenActivo ( );
}
}
if(notificarON>0)
{
putc('Q',PAD);
if(getc(PAD)=='q')
{
notificarON=0;
sprintf(mensaje,"Sistema Activado");
enviarMensaje (1);
enviarMensaje (2);
pedirSenActivo ();
}
}
ActSensActual ( );
est=ComprobarAlarma ( );
if(est>0)
{
alarma=1;
}
if(alarma==1)
{
rele=1;
pedirClave ( );
for(i=0;i<10;i++)
sensHaSidoActivado[i]=0;
claveRecibida=0;
enviarMensaje (1);
enviarMensaje (2);
mensaje[0]='\0';
putc('A',PAD);
if(getc(PAD)=='a')
{
do{
delay_ms(100);
putc('B',PAD);
i=getc(PAD);
}
91
while((claveRecibida==0) && (i!='s'));
delay_ms(100);
putc('D',PAD);
delay_ms (100);
pedirSenActivo ();
rele=0;
alarma=0;
SensMovimientoAct=0;
SensIngresoAct=0;
if(notificarOFF==0)
{
sprintf(mensaje,"Alarma Desactivada");
enviarMensaje(1);
enviarMensaje(2);
}
}
}
delay_ms(1);
}
switch(j)
{
case 0:
pedirTelefono ( );
break;
case 1:
pedirTelefono2( );
break;
case 2:
pedirSenActivo ();
break;
case 3:
pedirClave ( );
break;
case 4:
ActSensActual ( );
enviarSenActual ( );
break;
}
}
};
}
char pedirClave z( )
char i;
putc('R',PAD);
if(getc(PAD)=='r')
{
putc('C',PAD);
clave[0]=getc(PAD);
if(clave[0]<15)
92
{
for(i=1;i<=clave[0];i++)
clave[i]=getc(PAD);
clave[clave[0]+1]='\0';
return 1;
}
}
return 0;
}
char pedirTelefono ( )
{
char i;
putc('R',PAD);
if(getc(PAD)=='r')
{
putc('T',PAD);
telefono[0]=getc(PAD);
if(telefono[0]<15)
{
for(i=1;i<=telefono[0];i++)
telefono[i]=getc(PAD);
telefono[telefono[0]+1]='\0';
}
}
}
char pedirTelefono2 ( )
{
char i;
putc('R',PAD);
if(getc(PAD)=='r')
{
putc('V',PAD);
telefono2[0]=getc(PAD);
if(telefono2[0]<15)
{
for(i=1;i<=telefono2[0];i++)
telefono2[i]=getc(PAD);
telefono2[telefono2[0]+1]='\0';
}
}
}
char pedirSenActivo()
{
putc('R',PAD);
if(getc(PAD)=='r')
{
char i;
putc('S',PAD);
for(i=0;i<10;i++)
sensActivo[i]=getc(PAD);
93
}
char enviarSenActual()
{
char i;//
putc('R',PAD);//
if(getc(PAD)=='r')//
{
putc('U',PAD);
delay_us(10);
for(i=0;i<10;i++)
putc(sensActual[i],PAD);
}
}
void fn()
{
fprintf(GSM,"%c%c",13,10);
delay_ms(100);
putc(26,GSM);fn();
delay_ms (100);
fn();
delay_ms (5000);
}
void encender ( )
{
delay_ms (1000);
ON=1;
delay_ms (1000);
ON=0;
delay_ms(10000);
94
void configurar()
{
fprintf(GSM,"AT+CMGF=1\r");fn ( );
delay_ms(100);
fprintf(GSM,"AT+CNMI=2,2,0,0,0\r");fn ( );
delay_ms (100);
}
void ActSensActual ( )
{
sensActual[0]=princ+'0';
sensActual[1]=S1+'0';
sensActual[2]=S2+'0';
sensActual[3]=S3+'0';
sensActual[4]=S4+'0';
sensActual[5]=S5+'0';
sensActual[6]=mov+'0';
}
char OK[5];
char ComprobarAlarma ( )
{
char buff[150]={0};
char i;
i=0;
if(sensActivo[7]=='1')
{
sprintf(mensaje,"Se ha activado:\n");
if(sensActivo[0]=='1' && sensActual[0]=='0' && sensHaSidoActivado[0]==0)
{
sensHaSidoActivado[0]=1;
i++;
sprintf(buff,"%sP. Principal\n",mensaje);
strcpy(mensaje,buff);
}
if(OK[1]==0)
{
char c;
putc('A',PAD);
c=getc(PAD);
if(c=='a')
OK[1]=1;
95
}
if(contadorSeg3>SEGUNDOS_PARA_QUE_ACTIVE_ALARMA)//mayor que 1 minutos
{
i++;
sprintf(buff,"%sP. Ingreso\n",mensaje);
strcpy(mensaje,buff);
sensHaSidoActivado[1] = 1;
OK[1]=0;
}
}
else
{
OK[1] = 0;
contadorSeg3 = 0;
}
96
if(OK[0]==0)
{
char c;
putc('A',PAD);
c=getc(PAD);
if(c=='a')
OK[0]=1;
}
if(contadorSeg>SEGUNDOS_PARA_QUE_ACTIVE_ALARMA)
{
i++;
sprintf(buff,"%sS. Movimiento\n",mensaje);
strcpy(mensaje,buff);
sensHaSidoActivado[6] = 1;
OK[0]=0;
}
}
else
{
OK[0]=0;
contadorSeg = 0;
}
SensMovimientoAct = 0;
SensIngresoAct = 0;
contadorSeg3 = 0;
contadorSeg = 0;
OK[0] = 0;
OK[1] = 0;
}
return 0;
}
97
ANEXO B: Programación del microcontrolador de la placa esclavo.
#include <main.h>
#use rs232(stream=PAD,baud=9600,xmit=PIN_C6,rcv=PIN_C7,PARITY=N,BITS
=8,TIMEOUT=10)
#include "PIC18F4550_registers.h"
#define FAST_GLCD
#include "HDM64GS12.c"
#include "graphics.c"
#include <stdlib.h>
#bit Blight=_PORTC.2
#bit tBlight=_TRISC.2
98
227, 227, 227, 247, 255, 127, 62, 0, 0, 0, 30, 63, 127, 115, 227, 227, 227, 199, 207, 207, 12, 0,
0, 248, 252, 254, 15, 7, 3, 3, 195, 195, 195, 199, 207, 206, 196, 0, 0, 0, 0, 0,
0, 255, 243, 31, 31, 31, 31, 207, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 63, 127,
255, 159, 31, 15, 7, 3, 3, 3, 3, 3, 3, 255, 255, 255, 240, 224, 240, 240, 17, 195, 128, 128,
128, 0, 0, 33, 97, 193, 129, 1, 0, 0, 0, 0, 1, 129, 143, 231, 252, 255, 255, 255, 255, 0, 0,
0, 7, 31, 31, 60, 56, 56, 56, 56, 60, 31, 31, 7, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 6, 30, 30, 60, 56, 56, 56, 56, 61, 31, 31, 15, 0, 0, 1, 7, 15, 30, 28, 56, 56,
57, 57, 57, 29, 31, 31, 15, 0, 0, 0, 0, 0,
0, 1, 7, 63, 240, 248, 30, 63, 191, 255, 255, 255, 255, 255, 199, 65, 96, 96, 96, 96, 96, 127,
255, 240, 48, 48, 48, 48, 48, 48, 48, 48, 255, 255, 255, 255, 255, 255, 255, 231, 223, 159, 31, 5,
4, 4, 4, 134, 207, 255, 192, 64, 0, 0, 128, 254, 255, 255, 255, 255, 127, 63, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3, 7, 15, 29, 121, 225, 224, 129, 135, 30, 120, 240, 192, 128, 0, 0, 0, 3, 15,
126, 240, 192, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 254, 254, 254, 255, 127, 63, 31, 15, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 6, 12, 13, 27, 63, 62, 60, 120, 120, 124,
109, 199, 199, 198, 194, 195, 195, 255, 255, 255, 255, 255, 255, 255, 127, 127, 127, 127, 63, 63, 31,
31, 15, 15, 7, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
char posX=0,posY=0;
char tecla;
char mSeg,Seg,Seg2,Min;
char clave[20]={0};
char telefono[20]={0};
char telefono2[20]={0};
char sensActivo[10]={0};
char sensActual[10]={0};
char alarmaActiva=0;
char alarmaRespondida=0;
99
void modLuz(char delay,char final);
void menú ( char segMax, char minMax);
char medio ( char len);
void guardarEepromClave ( );
void guardarEepromNumero ( );
void guardarEepromNumero2 ( );
void guardarEepromSensActivo ( );
void apagarPantalla ( );
void mostrarContrasenaIncorrecta ( );
void leerEepromClave ( );
void leerEepromNumero ( );
void leerEepromNumero2 ( );
void leerEepromSensActivo();
#INT_TIMER0
void timer0_isr()
{
SET_TIMER0(cargaTMR0);
mSeg++;
if(mSeg>=100)
{
mSeg=0;
Seg++;
Seg2++;
if(Seg>=60)
{
Seg=0;
Min++;
}
}
}
#INT_RDA
void RX_isr ( )
{
char buffer [ 10 ],i;
buffer[0]=getc ( PAD );
switch(buffer [ 0 ] )
{
case 'A':
putc ( 'a',PAD );
alarmaActiva=1;
alarmaRespondida=0;
break;
case 'D':
putc ( 'd',PAD );
alarmaActiva=0;
break;
case 'B':
if ( alarmaRespondida==1)
{
putc ( 's',PAD );
alarmaRespondida=0;
100
}
else
{
putc ( 'n',PAD );
}
break;
case 'T':
putc ( teléfono [ 0 ], PAD );
delay_us ( 50 );
for(i=1;i<=telefono[0];i++)
{
putc ( telefono [ i ],PAD );
delay_us(10);
}
case 'V':
putc(telefono2[0],PAD);
delay_us(50);
for(i=1;i<=telefono2[0];i++)
{
putc(telefono2[i],PAD);
delay_us(10);
}
break;
case 'S':
for(i=0;i<10;i++)
{
putc ( sensActivo [ i ], PAD );
delay_us (10);
}
break;
case 'C':
putc(clave[0],PAD);
delay_us (50);
for (i=1;i<=clave[0];i++)
{
putc (clave[i],PAD);
delay_us (10);
}
break;
case 'U':
for(i=0;i<10;i++)
sensActual [i]=getc (PAD);
break;
case 'R':
putc ('r',PAD);
break;
case 'K':
putc ( 'k',PAD );
sensActivo [7]='0';
break;
case 'Q':
putc ( 'q',PAD );
101
sensActivo[7]='1';
break;
}
}
void main()
{
char textos[5][20]={0};
char tecla,i,estado;
setup_comparator(NC_NC_NC_NC);
SETUP_ADC_PORTS(NO_ANALOGS);
SETUP_TIMER_0(T0_INTERNAL|T0_DIV_16);
SET_TIMER0(cargaTMR0);
SETUP_TIMER_2( T2_DIV_BY_16,255,1);
SETUP_CCP1(CCP_PWM);
SET_PWM1_DUTY(0);
tBlight=0;
mSeg=0;
Seg=0;
Min=0;
Blight=0;
alarmaActiva=0;
alarmaRespondida=0;
strcpy(sensActual,"1111111");
_TRISB=0xFF;
_RBPU=0;
clave[0]=5;
strcpy(clave+1,"12345");
telefono[0]=10;
strcpy(telefono+1,"0983918659");
telefono2[0]=10;
strcpy(telefono2+1,"0959210710");
strcpy(sensActivo,"111111111");
guardarEepromClave ();
guardarEepromNumero ();
guardarEepromNumero2 ();
guardarEepromSensActivo ();
102
}
else
{
leerEepromClave();
leerEepromNumero();
leerEepromNumero2();
leerEepromSensActivo();
}
_RBPU=1;
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(PERIPH);
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(INT_TIMER0);
glcd_init(1);
modLuz(1,255);
imprimirLogo();
actPantalla();
delay_ms(500);
while(1)
{
modLuz (1,255);
sprintf(textos[0],"Ingrese contrase%ca\n"
" para ir a opciones",131);
estado=getEntero(textos[0],20,textos[1],10,0,1);
if(estado==1)
{
if(strcmp(textos[1],clave+1)==0)
{
menu(20,0);
apagarPantalla();
}
else
{
mostrarContrasenaIncorrecta();
}
}
else if(estado==0)
{
apagarPantalla();
}
if(alarmaActiva==1)
while(AlarmaActiva==1)
{
modLuz(1,255);
sprintf(textos[0],"Ingrese contrase%ca\n"
" para apagar alarma",131);
estado=getEntero(textos[0],20,textos[1],10,0,0);
103
if(estado==1)
{
if(strcmp(textos[1],clave+1)==0)
{
alarmaActiva=0;
alarmaRespondida=1;
sensActivo[7]='0';
glcd_fillscreen(0);
posY=15;
posX=medio(6);
printf(putc,"ALARMA\n\n");
posX=medio(7);
printf(putc,"APAGADA");
dibujarMarco();
actPantalla();
delay_ms(1000);
}
else
{
mostrarContrasenaIncorrecta();
}
}
}
}
}
void imprimirLogo()
{
int16 i,j;
for(i=0;i<8;i++)
for(j=0;j<64;j++)
{
displayData.left[j+i*64]=logo1[128*i+j];
displayData.right[j+i*64]=logo1[128*i+j+64];
}
posX=110;posY=56;
printf(putc,"1.0");
}
void putc(char c)
{
char buff[]={'\0','\0'};/
if(posY>=57)
return;
buff[0]=c;
if(posX >=128)
{
posX=0;
posY+=8;
}
glcd_text57(posX,posY,buff,1,1);
posX+=6;
104
if(c=='\n')
{
if(posy<55)posY+=8;
posX=0;
}
}
char getDown()
{
const int16 COLUMNAS[]={pad_C0,pad_C1,pad_C2,pad_C3};
char i;
_TRISA=0x0F;
_TRISE=0x00;
output_low(pad_C0);
output_low(pad_C1);
output_low(pad_C2);
output_low(pad_C3);
for(i=0;i<4;i++)
{
output_high(COLUMNAS[i]);
if(input(pad_F0))
return teclado[0][i];
if(input(pad_F1))
return teclado[1][i];
if(input(pad_F2))
return teclado[2][i];
if(input(pad_F3))
return teclado[3][i];
output_low(COLUMNAS[i]);
}
return 0;
}
105
if(tecla>='0' && tecla <='9' && i<10)
{
text[i++]=tecla;
text[i]='\0';
}
else if(tecla=='*' && i>0)
{
text[--i]='\0';
}
}
glcd_fillscreen(0);
//glcd_text57(63-(len+1)*5/2,10,Titulo,1,1);
posX=(63-(len+1)*5/2);
posY=10;
printf(putc,Titulo);
posX=63-(i+1)*5/2;
posY+=15;
printf(putc,"%s",text);
dibujarMarco();
actPantalla();
if(tecla)
{
delay_ms(250);
while(getDown());
}
if(segMax>0 || minMax>0)
{
if(min>=minMax)
{
if(seg>=segMax)
return 0;
}
}
if(habExit)
{
if(alarmaActiva==1)
return 2;
}
}while(tecla!='D');
while(getDown());
strcpy(resultado,text);
return 1;
}
void actPantalla()
{
#ifdef FAST_GLCD
glcd_update();
#endif
}
void dibujarMarco()
106
{
glcd_line(0,1,127,1,1);
glcd_line(0,3,127,3,1);
glcd_line(0,62,127,62,1);
glcd_line(0,60,127,60,1);
glcd_line(1,0,1,63,1);
glcd_line(3,0,3,63,1);
glcd_line(126,0,126,63,1);
glcd_line(124,0,124,63,1);
}
void modLuz (char delay,char final)
{
char i;
if(final>(unsigned char)CCP_1)
for(i=(unsigned char)CCP_1;i<final;i++)
{
SET_PWM1_DUTY(i);
delay_ms(delay);
}
else if(final<CCP_1)
for(i=(unsigned char)CCP_1;i>final;i--)
{
SET_PWM1_DUTY(i);
delay_ms(delay);
}
}
114
char medio(char len)
{
return 63-(len+1)*5/2;
}
void mostrarMenuPuertas(char *nombrePuerta,char senActivo,char senActual)
{
glcd_fillscreen(0);
posY=5;
posX=5;
printf ( putc,"%s\n",nombrePuerta);
posX=medio(11);
imprActivo ( senActivo );
posY+=13;
posX=medio(13);
printf(putc,"Estado actual\n");
posX=medio(12);
printf(putc,"del sensor\n");
posX=medio(7);
imprAbierto(senActual);
dibujarMarco();
}
char mostrarCuentaRegresiva()
{
Seg2=0;
while(getDown());
while(seg2<tiempoMax)
{
if(getDown())
{
while(getDown());
return 0;
}
glcd_fillscreen(0);
posY=6;
posX=medio(13);
printf(putc,"Tiene %d seg",tiempoMax);
posY+=12;
posX=medio(19);
printf(putc,"para que se active");
posY+=12;
posX=medio(9);
printf(putc,"la alarma");
posX=medio(7);
posY=40;
printf(putc,"%3d seg",(int)tiempoMax-Seg2);
dibujarMarco();
actPantalla();
delay_ms(200);
}
return 1;
}
115
void menu(char segMax,char minMax)
{
char sel,tecla,salir,resp;
char strings[50];
sel=0;
salir=0;
do{
min=0;
seg=0;
if(tecla=='A')
{
if(sel>0)sel--;
}
else if(tecla=='B')
{
if(sel<10)
sel++;
}
switch(sel)
{
case 0:
if(tecla=='C')
{
resp=negChar(sensActivo[7]);
if(resp=='1')
{
mostrarCuentaRegresiva();
salir=1;
}
sensActivo[7]=resp;
guardarEepromSensActivo();
}
glcd_fillscreen(0);
posY=12;
posX=medio(19);
printf(putc,"ACTIVACION GENERAL\n");
posX=medio(12);
printf(putc,"DE LA ALARMA\n\n");
posX=medio(11);
imprActivo(sensActivo[7]);
dibujarMarco();
break;
case 1:
if(tecla=='C')
{
sensActivo[0]=negChar(sensActivo[0]);
guardarEepromSensActivo();
}
strcpy(strings," K1: Puerta\n"
" Principal");
mostrarMenuPuertas(strings,sensActivo[0],sensActual[0]);
break;
case 2:
116
if(tecla=='C')
{
sensActivo[1]=negChar(sensActivo[1]);
guardarEepromSensActivo();
}
strcpy(strings," K2: Puerta de\n"
" Ingreso");
mostrarMenuPuertas(strings,sensActivo[1],sensActual[1]);
break;
case 3:
if(tecla=='C')
{
sensActivo[2]=negChar(sensActivo[2]);
guardarEepromSensActivo();
}
strcpy(strings," K3: Puerta acceso \n"
" de patio trasero");
mostrarMenuPuertas(strings,sensActivo[2],sensActual[2]);
break;
case 4:
if(tecla=='C')
{
sensActivo[3]=negChar(sensActivo[3]);
guardarEepromSensActivo();
}
strcpy(strings," K4: Puerta \n"
" posterior");
mostrarMenuPuertas(strings,sensActivo[3],sensActual[3]);
break;
case 5:
if(tecla=='C')
{
sensActivo[4]=negChar(sensActivo[4]);
guardarEepromSensActivo();
}
strcpy(strings,"K5: Puerta corrediza\n"
" posterior 1");
mostrarMenuPuertas(strings,sensActivo[4],sensActual[4]);
break;
case 6:
if(tecla=='C')
{
sensActivo[5]=negChar(sensActivo[5]);
guardarEepromSensActivo();
}
strcpy(strings,"K6: Puerta corrediza\n"
" posterior 2");
mostrarMenuPuertas(strings,sensActivo[5],sensActual[5]);
break;
case 7:
if(tecla=='C')
{
sensActivo[6]=negChar(sensActivo[6]);
117
guardarEepromSensActivo();
}
strcpy(strings," Sensor de\n"
" movimiento");
mostrarMenuPuertas(strings,sensActivo[6],sensActual[6]);
break;
case 8:
if(tecla=='C')
{
strcpy(strings,"Nuevo telefono 1");
if(getEntero(strings,0,strings,0,1,0))
{
strcpy(telefono+1,strings);
telefono[0]=strlen(telefono+1);
guardarEepromNumero();
}
}
glcd_fillscreen(0);
posY=12;
posX=medio(14);
printf(putc,"Cambiar numero\n");
posX=medio(11);
printf(putc,"de telefono 1\n\n");
posX=medio(telefono[0]);
printf(putc,"%s",telefono+1);
dibujarMarco();
break;
case 9:
if(tecla=='C')
{
strcpy(strings,"Nuevo telefono 2");
if(getEntero(strings,0,strings,0,1,0))
{
strcpy(telefono2+1,strings);
telefono2[0]=strlen(telefono2+1);
guardarEepromNumero2();
}
}
glcd_fillscreen(0);
posY=12;
posX=medio(14);
printf(putc,"Cambiar numero\n");
posX=medio(11);
printf(putc,"de telefono 2\n\n");
posX=medio(telefono[0]);
printf(putc,"%s",telefono2+1);
dibujarMarco();
break;
case 10:
if(tecla=='C')
{
sprintf(strings,"Nueva contrase%ca",131);
if(getEntero(strings,0,strings,0,1,0))
118
{
strcpy(clave+1,strings);
clave[0]=strlen(clave+1);
guardarEepromClave();
}
}
glcd_fillscreen(0);
posY=12;
posX=medio(7);
printf(putc,"Cambiar\n");
posX=medio(10);
printf(putc,"contrase%ca\n\n",131);
posX=medio(clave[0]);
printf(putc,"%s",clave+1);
dibujarMarco();
break;
break;
}
actPantalla();
delay_ms(100);
tecla=getDown();
if(segMax>0 || minMax>0)
{
if(min>=minMax)
{
if(seg>=segMax)
return ;
}
}
if(alarmaActiva==1)
{
return ;
}
glcd_fillscreen(0);
posY=15;
posX=medio(7);
printf(putc,"CAMBIOS\n\n");
posX=medio(9);
printf(putc,"GUARDADOS");
dibujarMarco();
actPantalla();
delay_ms(1000);
}
void guardarEepromClave()
{
char i;
119
if(clave[0]<15)
for(i=0;i<=clave[0];i++)
write_eeprom(dirClave+i,clave[i]);
}
void guardarEepromNumero ( )
{
char i;
if(telefono[0]<15)
for(i=0;i<=telefono[0];i++)
write_eeprom(dirTelefono+i,Telefono[i]);
}
void guardarEepromNumero2 ( )
{
char i;
if(telefono2[0]<15)
for(i=0;i<=telefono2[0];i++)
write_eeprom(dirTelefono2+i,Telefono2[i]);
}
void guardarEepromSensActivo()
{
char i;
for(i=0;i<10;i++)
write_eeprom(dirActivos+i,sensActivo[i]);
}
void leerEepromClave()
{
char i;
clave[0]=read_eeprom(dirClave);
if(clave[0]<15)
{
for(i=1;i<=clave[0];i++)
clave[i]=read_eeprom(dirClave+i);
clave[clave[0]+1]='\0';
}
}
void leerEepromNumero()
{
char i;
telefono[0]=read_eeprom(dirTelefono);
if(telefono[0]<15)
{
for(i=1;i<=telefono[0];i++)
telefono[i]=read_eeprom(dirTelefono+i);
telefono[telefono[0]+1]='\0';
}
}
void leerEepromNumero2()
{
char i;
telefono2[0]=read_eeprom(dirTelefono2);
if(telefono2[0]<15)
{
120
for(i=1;i<=telefono2[0];i++)
telefono2[i]=read_eeprom(dirTelefono2+i);
telefono2[telefono2[0]+1]='\0';
}
}
void leerEepromSensActivo()
{
char i;
for(i=0;i<10;i++)
sensActivo[i]=read_eeprom(dirActivos+i);
}
void apagarPantalla()
{
glcd_fillscreen(0);
actPantalla();
modLuz(1,0);
SETUP_TIMER_2(T2_DISABLED,255,1);
while(!getDown ( ));
delay_ms (250);
while(getDown ( ) ) ;
SETUP_TIMER_2( T2_DIV_BY_16,255,1);
}
void mostrarContrasenaIncorrecta()
{
glcd_fillscreen(0);
posX=20;
posY=20;
printf(putc,"Contrase%ca\n Incorrecta",131);
dibujarMarco();
actPantalla();
delay_ms(5000);
}
121
ANEXO C: Diagrama de comunicación y ubicación de los equipos.
122
ANEXO D: Diagrama de conexiones eléctricas panel de distribución.
123
ANEXO E: Diagrama de conexiones eléctricas panel de distribución interna.
124
ANEXO F: Diagrama de conexiones eléctricas.
125
ANEXO G: Diagrama de conexiones eléctricas breaker del panel.
126
ANEXO H: Diagrama de conexiones eléctricas repartición del UPS.
127
ANEXO I: Diagrama de conexiones eléctricas cámaras IP.
128
ANEXO J: Diagrama de conexiones eléctricas de la central de alarma.
129
ANEXO K: Diagrama de conexiones eléctricas central de alarma 2.
130
ANEXO L: Diagrama de conexiones eléctricas central de alarma 3.
131
ANEXO M: Hoja técnica de la cámara DS-2CD2012-I.
132
ANEXO N: Hoja técnica de la cámara DS-2CD2112-I.
133
ANEXO O: Hoja técnica del contacto magnético Seco-Larm
134
ANEXO P: Hoja técnica del detector de movimiento watchout
135