PROYECTO INTEGRADO
CES SAN JOSÉ
SISTEMA DE ALARMA INTELIGENTE “SMART ALARM”
2º.CFGS. D. Productos Electrónicos | Gustavo Reina García
1
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Índice 1. Estudios de viabilidad comercial, tecnológica y económica ......................... 5 2. Planificación del desarrollo del proyecto en sus distintas fases ................... 6 3. Memoria descriptiva del proyecto ................................................................ 8 3.1.
Descripción ........................................................................................... 8
3.2
Diagrama de bloques .......................................................................... 10
3.2.1. Elementos y funcionamiento del sistema de alarma ........................ 11 3.3
Esquema eléctrico en Eagle ................................................................... 13 3.3.1 Explicación del esquema eléctrico ................................................... 14
3.4
Asignación de las entradas y las salidas al microcontrolador Arduino 18
3.5
Simulación........................................................................................... 19
3.5.1. Explicación de las simplificaciones realizadas en relación al esquema real ............................................................................................................. 20
4
3.6
Cálculos realizados para la elección de componentes ........................ 20
3.7
Interfaces de la aplicación de C# ........................................................ 22
Programas de control en C_Arduino y C# ................................................. 26 4.2
Diagrama de Estados .......................................................................... 26
4.1.1.
Subrutinas .................................................................................... 27
4.2.
Código Fuente C_Arduino ................................................................... 28
4.3.
Código fuente C# ................................................................................ 42
4.3.1.
Código asociado al formulario Splash .......................................... 42
4.3.2.
Código asociado al formulario principal ........................................ 43
4.3.3. Código asociado al formulario con el que se abren los archivos .txt existentes (frmRegistroBaseDatos). .......................................................... 65 5. Esquemas y planos ................................................................................... 68 5.1.
Esquema en bloque ............................................................................ 68
5.2.
Esquema eléctrico ............................................................................... 69
5.3.
Diseño de la PCB ................................................................................ 70
2
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
5.3.1.
Placa Principal .............................................................................. 70
5.3.2.
Placa secundaria .......................................................................... 70
5.3.3.
Componentes Placa Principal ....................................................... 71
5.3.4.
Componentes Placa Secundaria .................................................. 71
5.4.
3.2
Imagen en 3D ...................................................................................... 72
5.4.1.
Placa principal .............................................................................. 72
5.4.2.
Placa secundaria .......................................................................... 72
Diseño Case Project ............................................................................... 73
6. Listado de materiales y presupuesto ......................................................... 74 7. Manual de usuario ........................................................................................ 75 7.1. Introducción............................................................................................ 75 7.2. Características del diseño ...................................................................... 75 7.3. Capacidad de detección ......................................................................... 76 7.4. Sistemas de visualización ...................................................................... 77 7.5. Entradas y salidas del microcontrolador utilizadas ................................. 79 7.6. Procedimiento de puesta en marcha...................................................... 80 7.7. Procedimiento de operación del sistema de alarma............................... 82 8. Manual de Servicio Técnico/Preguntas Frecuentes ................................... 87 8.1. Introducción............................................................................................ 87 8.2. Recomendaciones ................................................................................. 87 8.3. Posibles fallos en el sistema .................................................................. 88 8.4. Preguntas frecuentes ............................................................................. 89 Anexo I. Página web ........................................................................................ 91 1. Idea ........................................................................................................ 91 2. Elaboración de la página ........................................................................ 91 3. Descripción general ................................................................................ 92 4. Estructura de la página ........................................................................... 92 5. Recursos utilizados ................................................................................ 93
3
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Anexo II. Control remoto .................................................................................. 94 1. Introducción ............................................................................................ 94 2. Aplicación ............................................................................................... 94 Bibliografía ....................................................................................................... 95
4
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
1. Estudios de económica
viabilidad
comercial,
tecnológica
y
El hecho de tener una vivienda segura ha pasado de ser un lujo asequible por una parte de la sociedad a ser actualmente una necesidad ineludible para cualquier persona que quiera sentir su hogar protegido. En dicho sentido, este producto es una solución eficaz que responde a una determinada demanda comercial propia de nuestro día a día. Además de cumplir con la condición de viabilidad comercial, el sistema de alarma “Smart Alarm” resulta competitivo como producto en el mercado ya que los componentes utilizados están de acuerdo con la normativa vigente sin que esto suponga el encarecimiento de los costes de producción. Véase que el presupuesto de partida se sitúa en torno a los cuarenta euros, mientras que en el mercado el precio de sistemas de alarma similares, oscila en torno a los sesenta y ciento veinte euros (Fuente: Ebay).
5
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
2. Planificación del desarrollo del proyecto en sus distintas fases
Primera Evaluación Semana 1 Semana 2 Semana 3 Semana 4 Semana 5 Semana 6 Semana 7 Semana 8 Semana 9 Semana 10 Semana 11
Decisión del proyecto a realizar y búsqueda de información. Búsqueda de información relacionada con el proyecto. Ejecución de esquemas a sucio y primeros borradores del proyecto. Diseño del esquema en bloque en Visio. Diseño de squematic en Eagle. Diseño de board en Eagle. Simulación del proyecto en Proteus. Revelado, taladrado y soldadura de placas. Revelado, taladrado y soldadura de placas. Elaboración de los documentos a entregar en el primer trimestre. Elaboración de los documentos a entregar en el primer trimestre.
Segunda Evaluación Pruebas de programación del proyecto (C_Arduino) e identificación de errores. Pruebas de programación del proyecto (C_Arduino) e identificación de Semana 2 errores. Semana 3 Pruebas de programación del proyecto (C#) e identificación de errores. Semana 4 Pruebas de programación del proyecto (C#) e identificación de errores. Semana 5 Pruebas de programación del proyecto (C#) e identificación de errores. Semana 6 Corrección de errores observados en el proyecto. Semana 7 Verificación del funcionamiento con aparatos de medida específicos. Semana 8 Búsqueda de información para la elaboración de la documentación. Semana 9 Elaboración de la documentación a entregar en el segundo trimestre. Semana 10 Elaboración de la documentación a entregar en el segundo trimestre. Semana 11 Exposición y entrega del proyecto. Semana 1
6
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Tercera Evaluación Semana 1 Semana 2 Semana 3 Semana 4
Maquetado del proyecto. Maquetado del proyecto. Localización de páginas web para el diseño de una web gratuita. Prueba de las distintas páginas para la creación de webs. Localización de páginas para la publicación de documentos y búsqueda de Semana 5 programa capturador de pantalla y editor de vídeos Semana 6 Diseño de la página web explicando el proyecto paso a paso. Semana 7 Diseño de la página web explicando el proyecto paso a paso. Semana 8 Diseño de la página web explicando el proyecto paso a paso. Semana 9 Diseño de la página web explicando el proyecto paso a paso. Semana 10 Elaboración de la documentación del proyecto integrado. Semana 11 Exposición y entrega del proyecto.
Fecha de inicio del presente proyecto: 17/Septiembre/2013. Fecha de finalización del proyecto: 18/Junio/2014.
7
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3. Memoria descriptiva del proyecto 3.1.
Descripción
El proyecto que he desarrollado a lo largo del curso en esta asignatura consiste en un sistema de alarma inteligente para una vivienda “SMART ALARM”. Este sistema de alarma se compone de tres partes bien diferenciadas: a) Diseño hardware y software C_Arduino. b) Diseño Windows forms y software C#. c) Diseño de página web.
Diseño hardware y software C_Arduino, características: 1. Activación y desactivación de la alarma mediante clave (Pin o Puk), utilizando para ello un teclado (3x4). 2. Control de estado de la alarma por medio de leds (rojo-verde) y altavoz. 3. Visualización de textos a través de display LCD. 4. Aviso acústico y luminoso en caso de detectar un intruso. 5. Control de presencia y apertura de puertas vía PIR e interruptores ‘NC’. Diseño Windows forms y software C#, características: 1. 2. 3. 4. 5.
6. 7. 8. 9.
Activación y desactivación del sistema de alarma mediante clave Pin. Control de estado de la alarma a través de una caja de texto. Envío de un e-mail en el caso de detectar a un intruso. Dispone de una opción para configurar los parámetros del puerto serie. Cuenta con un enlace a una carpeta del disco duro para memorizar los estados de la alarma con fecha y hora en un archivo .txt (C:\tmp\SmartAlarm). Puede abrir un archivo.txt ya existente en la memoria del PC. Cuenta con opciones de guardar, imprimir, cortar, copiar y pegar. Permite el control de la aplicación a través de teclas rápidas. Posee una opción que presenta un texto de ayuda para el manejo de esta aplicación. En el mismo sentido, también cuenta con cuadro “acerca de” donde se detallan las especificaciones de “SMART ALARM”.
8
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
10. Antes de que cargue el formulario principal, esta aplicación muestra un Splash durante 5 segundos. Diseño de página web, características: 1. Cuenta con todo tipo de explicaciones para la elaboración de una alarma de forma autónoma. 2. La página tiene a disposición de cualquier persona videotutoriales, enlaces a páginas de interés y archivos para descargar. 3. El apartado “contacto” ofrece a los usuarios la posibilidad de contactar conmigo, con el propósito de resolver dudas.
9
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.2
Diagrama de bloques
10
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.2.1. Elementos y funcionamiento del sistema de alarma
a) Placa micro controladora Arduino. Esta placa es la encargada de implementar en el sistema de alarma las acciones o funciones que previamente hemos programado en su memoria. El micro controlador ejecutará unas acciones u otras en base a la información recibida de los sensores. b) Sensores (NC) La misión de estos sensores es indicar a Arduino si una puerta ha sido abierta. c) Sensor PIR El sensor PIR, identifica la presencia de un intruso y envía una señal a Arduino. d) Botonera o keypad Es el interfaz que permite al usuario activar y desactivar alarma a través del envío de señales a Arduino. e) Display LCD El display muestra mensajes sobre el estado de la alarma. El micro controlador es el encargado de cargar estos mensajes en la pantalla. f) Led verde La placa micro controladora activará este led si la alarma está en estado activo. g) Led rojo La placa micro controladora activará este led si la alarma está en estado inactivo. h) Altavoz El altavoz será activado por el Arduino para informar al usuario sobre un determinado estado del sistema.
11
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
i) Relé Es el elemento que va a permitir conmutar con la red eléctrica para que sirena y luces sean activadas. j) Ordenador (aplicación C#) Está en contacto permanente con la placa microcontroladora a través del cable USB. El ordenador realizará una acción u otra en base al estado en el que se encuentre la alarma.
12
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.3
Esquema eléctrico en Eagle
13
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.3.1 Explicación del esquema eléctrico
El sistema de alarma se compone de dos placas. La placa principal es la mayor donde se encuentra el micro controlador y la mayor parte de los componentes del circuito. La placa secundaria es mucho más pequeña que la principal porque sólo se va a utilizar para albergar el potenciómetro que regula la intensidad del LCD y para colocar los leds de información de estado de la alarma. El circuito principal y el secundario serán alimentados a través del conector jack de la placa Arduino, tal como indica la imagen del esquema. Por lo tanto, el pin 5v del controlador es el encargado de repartir la corriente entre todos los elementos del sistema. Así pues, en el esquema de arriba se puede apreciar como todos los componentes reciben tensión de 5v tal como muestran las etiquetas (+5v) de unión. La placa principal presenta varios conectores de salida/entrada hacia los periféricos del proyecto. Dichos conectores presentan las siguientes características: a) Conectores PIR PIR-1 / GND: Conecta la masa del sensor PIR con la masa del circuito. PIR-2 / +5V: Es el encargado de llevar la tensión (+5v) al sensor PIR. PIR-3 / PIR: Es la vía de entrada de la señal PIR hacia el pin A3 de Arduino. b) Altavoz - ALTAVOZ / GND: Conecta la masa del altavoz con la masa del circuito. + ALTAVOZ / ALTAVOZ: Es la vía de salida del pin D13 de Arduino hacia altavoz. c) Leds LEDS-1 / GND: Conecta la masa de los leds y la del potenciómetro que están en la placa número 2 con la masa del circuito.
14
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
LEDS-2 / +5V: Es el encargado de llevar la tensión (+5v) a la placa número 2.
LEDS-3 / LEDS: Es la vía de salida del pin A1 de Arduino hacia los leds. El led rojo se encenderá si el Arduino envía un “0” y el led verde se iluminará si la salida es un “1”.
d) LCD
9 / LCD1: Salida del pin A4 de Arduino hacia el pin D7 del LCD. 8 / LCD2: Salida del pin A5 de Arduino hacia el pin D6 del LCD. 7 / LCD3: Salida del pin D2 de Arduino hacia el pin D5 del LCD. 6 / LCD4: Salida del pin D3 de Arduino hacia el pin D4 del LCD. 5 / LCD5: Salida del pin D4 de Arduino hacia el pin E del LCD. 4 / LCD6: Salida del pin D5 de Arduino hacia el pin RS del LCD. 2 / +5V: Es el encargado de llevar la tensión (+5v) al LCD. 1 / GND: Conecta la masa del LCD con la masa del circuito.
e) KEYPAD 8 / KEYPAD1: Vía de entrada del terminal 3 pin D6 de Arduino. 7 / KEYPAD2: Vía de entrada del terminal 2 pin D7 de Arduino. 6 / KEYPAD3: Vía de entrada del terminal 1 pin D8 de Arduino. 5 / KEYPAD4: Vía de entrada del terminal A pin D9 de Arduino. 4 / KEYPAD5: Vía de entrada del terminal B pin D10 de Arduino. 3 / KEYPAD6: Vía de entrada del terminal C pin D11 de Arduino. 2 / KEYPAD7: Vía de entrada del terminal D pin D12 de Arduino.
del teclado hacia el del teclado hacia el del teclado hacia el del teclado hacia el del teclado hacia el del teclado hacia el del teclado hacia el
f) SWITCH SWITCH-1 / SWITCH: Es el encargado de llevar la tensión (+5v) a los interruptores ‘NC’. En el caso de que los interruptores estén
15
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
abiertos, se enviará un “1” a la entrada A0 de Arduino, en caso contrario, se enviará un “0”. SWITCH-2 / GND: Conecta a masa del circuito los interruptores ‘NC’.
g) SIRENA SIRENA-1: Enlaza a la red eléctrica (230v) con la entrada del relé.
SIRENA-2: Conecta la salida del relé cuándo este se activa a la entrada de la sirena. La señal de salida del pin A2 de Arduino (SIRENA) es la encargada de activar el relé. Aunque, esta necesita ser amplificada por el C.I. ULN2003AN.
Características de los conectores de entrada/salida de la placa número 2: a) +5V Este pin va unido al conector LEDS-2 / +5V de la placa principal. Es el punto de acceso de corriente (5v) de la placa secundaria.
b) LED Este pin va unido al conector LEDS-3 / LEDS de la placa principal. Es el encargado de transmitir “0 o 1” de Arduino hacia los leds para que se encienda uno u otro. c) GND Este conector une la masa de la placa secundaria con la masa de la placa principal. d) K Es el encargado de llevar la masa hacia el terminal k del LCD. e) A Se encarga de llevar corriente al terminal A del LCD. La función de los terminales A y K es la retroalimentación del LCD.
16
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
f) VEE Es la salida del potenciómetro hacia la entrada VEE del LCD (control iluminación pantalla). g) RW Se encarga de llevar masa al terminal RW del LCD.
17
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.4
Asignación de las entradas y las salidas al microcontrolador Arduino
Asignación de las entradas y salidas 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
Conexión RXD (Recepción de datos) TXD (Transmisión de datos)
LCD3 LCD4 LCD5 LCD6 KEYPAD1 KEYPAD2 KEYPAD3 KEYPAD4 KEYPAD5 KEYPAD6 KEYPAD7 ALTAVOZ
SWITCH LEDS SIRENA PIR LCD1 LCD2
18
Pin D0 D1 RESET GND D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 3.3V_OUT ADC REF A0 A1 A2 A3 A4 A5 A6 A7 5V_OUT RESET GND_IN VDC_IN
Función especial RXD TXD
INT0 INT1 T0 T1 AN1
PWM2B XCK PWM0B PWM0A
ICP1
MOSI MISO SCK
PWM1A PWM1B PWM2A
ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7
GUSTAVO REINA GARCÍA
ERROR
DCD DSR RXD RTS TXD CTS DTR RI
1 6 2 7 3 8 4 9
+5v
lcd3 lcd4 lcd5 lcd6 keypad1 keypad2
21 20
9 #
2 5 8 0
keypad5 1
4 7
+12v
ATMEGA328P
AREF AVCC
PD0/RXD/PCINT16 PD1/TXD/PCINT17 PD2/INT0/PCINT18 PD3/INT1/OC2B/PCINT19 PD4/T0/XCK/PCINT20 PD5/T1/OC0B/PCINT21 PD6/AIN0/OC0A/PCINT22 PD7/AIN1/PCINT23
D
keypad4
U1
C
keypad2
2 3 4 5 6 11 12 13
B
keypad1
keypad7 2
+12v
PC0/ADC0/PCINT8 PC1/ADC1/PCINT9 PC2/ADC2/PCINT10 PC3/ADC3/PCINT11 PC4/ADC4/SDA/PCINT12 PC5/ADC5/SCL/PCINT13 PC6/RESET/PCINT14
PB0/ICP1/CLKO/PCINT0 PB1/OC1A/PCINT1 PB2/SS/OC1B/PCINT2 PB3/MOSI/OC2A/PCINT3 PB4/MISO/PCINT4 PB5/SCK/PCINT5 PB6/TOSC1/XTAL1/PCINT6 PB7/TOSC2/XTAL2/PCINT7
6
3
keypad3 3
1
23 24 25 26 27 28 1
14 15 16 17 18 19 9 10 switch leds sirena pir lcd1 lcd2
sirena
Keypad3 Keypad4 Keypad5 Keypad6 Keypad7 altavoz 1 2 3 4 5 6 7
COM 1C 2C 3C 4C 5C 6C 7C
ULN2003A
1B 2B 3B 4B 5B 6B 7B
U2 9 16 15 14 13 12 11 10
+12v
Volts
+88.8
Sirena
L1
leds
T73S5D15-12V
RL1
0
altavoz
LED-GREEN
D2
220
R3
220
R2
LED-RED
D1
pir
SOUNDER
LS1
10k
R1
switch
Simulación
COMPIM
P1
A
keypad6
LM016L
lcd6
VSS VDD VEE 1 2 3 +5v
RS RW E 4 5 6 lcd5
D0 D1 D2 D3 D4 D5 D6 D7 7 8 9 10 11 12 13 14
19 lcd4 lcd3 lcd2 lcd1
3.5
+5v
LCD1
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS 18/06/14
SISTEMA DE ALARMA INTELIGENTE
GUSTAVO REINA GARCÍA
+5v
+12v
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.5.1. Explicación de las simplificaciones realizadas en relación al esquema real
El sistema de alarma simulado en Proteus presenta tan solo dos simplificaciones con respecto al esquema real. La primera simplificación consiste en establecer al sensor PIR como “Logictoggle”, puesto que dicho sensor envía hacia la placa micro controladora “0” 0 “1” lógicos. Decidí asignar esta función a PIR para ahorrar tiempo durante la ejecución de la simulación. La segunda simplificación se basa en la omisión del potenciómetro que regula la intensidad lumínica del display LCD. Opté por no usar el potenciómetro en la simulación porque consideré innecesaria su utilización durante la simulación del sistema de alarma.
3.6
Cálculos realizados para la elección de componentes
R1 (switch): Esta resistencia tiene un valor de 10k porque es utilizada como pull-up.
R2 y R3 (leds): R
= 200Ω
Potenciómetro y resistencia del LCD: Se han montado con arreglo a las recomendaciones del fabricante.
ULN 2003: Se ha elegido este circuito integrado porque es capaz de soportar la intensidad que consume la bobina del relé (30mA) sin problemas. Este circuito está diseñado para trabajar hasta con corrientes de 500mA.
20
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Relé G5LE: Se ha escogido este relé porque puede soportar la tensión e intensidad de trabajo de la bocina sin ningún tipo de problema. Este relé está diseñado para trabajar hasta con tensiones de 250V y corrientes de 10A.
21
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.7
Interfaces de la aplicación de C#
Ilustración 1. Ventana de Splash
Ilustración 2. Ventana de Inicio
22
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración 3. Ventana configuración Puerto Serie
23
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración 4. Ventana visualización del Registro
Ilustración 5. Interfaz completa
24
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración 6. Ventana de ayuda
Ilustración 7. Ventana Acerca de
25
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4 Programas de control en C_Arduino y C# 4.2
Diagrama de Estados
Estado 1
Estado 2
- Poner a nivel alto el indicador de alarma activa (led verde).
- Comprobar si hay dato en el puerto serie (puertoSerie()). - Poner a nivel alto solo el indicador de alarma activa (led verde).
- Indicar en la pantalla LCD qué la alarma se conectará pasados 20 segundos.
- Indicar en la pantalla LCD qué la alarma está operativa.
- Esperar 20 segundos (delay).
- Verificar si el sensor pir o los interruptores de puerta han detectado algún intruso.
- Posteriormente, el programa pasa a estado 2. -Si se detecta a algún intruso, el programa pasará al estado 3 e imprimirá un ‘3’ en el puerto serie.
- Imprimir ‘2’ en el puerto serie.
Estado 3 Estado 0
Durante 20 segundos:
Estado 5
- Comprobar si hay dato en el puerto serie (puertoSerie()).
- Comprobar si hay un dato en el puerto serie (puertoSerie()).
- Poner a nivel bajo las salidas leds, sirena y altavoz.
- Poner a nivel bajo las salidas leds, sirena y altavoz.
- Indicar en la pantalla LCD qué la alarma está inactiva.
- Indicar en la pantalla LCD qué el código PIN está bloqueado y se necesita introducir el código PUK para activar la alarma.
- Comprobar si se ha marcado algún número (clavePin()).
- Comprobar si se ha marcado algún número (clavePuk()). - Verificar si el número marcado es el correcto (claveBien). - Si claveBien es verdadera; ir al estado 1 e imprimir ‘1’ en el puerto serie.
- Verificar si el número marcado es el correcto (claveBien o claveMal). - Si claveBien es verdadera; ir al estado 1 e imprimir ‘1’ en el puerto serie. - Si claveMal es verdadera; ir al estado 5 e imprimir ‘5' en el puerto serie.
- Comprobar si hay dato en el puerto serie (puertoSerie()). - Poner a nivel alto solo el indicador de alarma activa (led verde). - Indicar en la pantalla LCD qué la alarma debe desactivarse en menos de 20 segundos. - Comprobar si se ha marcado algún número (clavePin()). - Verificar si el número marcado es el correcto (claveBien o claveMal). - Si claveBien es verdadera; ir al estado 0 e imprimir ‘0’ en el puerto serie. - Si claveMal es verdadera; ir al estado 6 e imprimir ‘6' en el puerto serie. - Por el contrario, si no se pulsa ningún número, se pasará al estado 4 y se imprimirá un ‘4’ en el puerto serie.
Estado 4
Estado 6
- Comprobar si hay dato en el puerto serie (puertoSerie()).
- Comprobar si hay un dato en el puerto serie (puertoSerie()).
- Poner a nivel alto el indicador de alarma activa (led verde).
- Poner a nivel alto el indicador de alarma activa (led verde).
- Poner a nivel alto el relé que activa la sirena.
- Poner a nivel alto el relé que activa la sirena.
- Indicar en la pantalla LCD qué la alarma qué la alarma está en funcionamiento y necesita clave para desactivarse.
- Indicar en la pantalla LCD qué el código PIN está bloqueado y se necesita introducir el código PUK para desactivar la alarma.
- Comprobar si se ha marcado algún número (clavePin()).
- Comprobar si se ha marcado algún número (clavePuk()).
- Verificar si el número marcado es el correcto (claveBien o claveMal).
- Verificar si el número marcado es el correcto (claveBien).
- Si claveBien es verdadera; ir al estado 0 e imprimir ‘0’ en el puerto serie.
- Si claveBien es verdadera; ir al estado 0 e imprimir ‘0’ en el puerto serie.
- Si claveMal es verdadera; ir al estado 6 e imprimir ‘6' en el puerto serie.
26
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4.1.1. Subrutinas
Subrutina puertoSerie() - Comprobar si el puerto serie está disponible. - En el caso de que esté disponible, verificar que dato se ha recibido. - Si el dato recibido es ‘1’ el programa irá al estado 1. - En cambio, si es ‘0’ el programa irá al estado 0. - En cualquier caso, se notificará del cambio efectuado a la aplicación c# vía puerto serie.
Subrutina clavePin() - Detectar qué teclas han sido pulsadas. - Comprobar si el número pulsado coincide con el número secreto de la clave: Si esto es así, la variable booleana claveBien será verdadera, el LCD pondrá ‘clave correcta’ y el altavoz emitirá un bip corto. - Si por el contrario, el número no coincide con la clave secreta y se ha intentado introducirlo más de tres veces: La variable booleana claveMal será verdadera, el LCD pondrá ‘Pin bloqueado’ y el altavoz emitirá un bip largo. - Las teclas ‘*’ y ‘#’ se usarán para borrar las teclas presionadas y poder pulsar el código de nuevo.
Subrutina clavePuk() - Detectar qué teclas han sido pulsadas. - Comprobar si el número pulsado coincide con el número secreto de la clave: Si esto es así, la variable booleana claveBien será verdadera, el LCD pondrá ‘clave correcta’ y el altavoz emitirá un bip corto. - Si por el contrario, el número no coincide con la clave secreta: El LCD pondrá ‘Clave errónea’ y el altavoz emitirá un bip largo. - Las teclas ‘*’ y ‘#’ se usarán para borrar las teclas presionadas y poder pulsar el código de nuevo.
27
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4.2.
Código Fuente C_Arduino
#include <EEPROM.h> // Libreria EEPROM incluida. #include <LiquidCrystal.h> // Libreria LiquidCrystal incluida. LiquidCrystal lcd(5, 4, 3, 2, A5, A4); // Asignación de pines de arduino para LiquidCrystal. #include <Keypad.h> // Libreria Keypad incluida char* secretCode = "1234"; // Variable que contiene el número PIN. char* secretCode2 = "12345678"; // Variable que contiene el número PUK. int position = 0; // Posición de inicio de la memoria EEPROM donde están guardados los números secretos. const byte rows = 4; // Número de filas del teclado. const byte cols = 3; // Número de columnas del teclado. char keys[rows][cols] = { // Array de filas y columnas del teclado. {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[rows] = {12, 11, 10, 9}; // Asignación de pines de arduino para las filas del teclado. byte colPins[cols] = {8, 7, 6}; // Asignación de pines de arduino para las columnas del teclado. Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); byte switchs = A0; // Pin de entrada para interruptores de puerta. byte pir = A3; // Pin de entrada para sensor de presencia. byte leds = A1; // Pin de salida para los leds de estado de la alarma. byte sirena = A2; // Pin de salida para el relé que activa la sirena. byte altavoz = 13; // Pin de salida para el altavoz. byte estado = 0; // Variable donde se almacena el estado de la alarma. byte cntPul = 0; // Contador de pulsaciones de botón del teclado. byte cntInt = 0; // Contador de intentos para el código PIN y PUK. char recibirDato; // Variable para almacenar el dato recibido por el puerto serie. long tiempo; // Variable para guardar tiempo.
28
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
char key; // Variable de lectura de teclado. boolean claveBien = false; // Variable para verificar si la clave es correcta. boolean claveMal = false; // Variable para verificar si la clave es errónea.
void setup() { Serial.begin(19200); // Se establece la velocidad de transmisión en 19200 Bauds. lcd.begin(16, 2); // Se inicializa la pantalla del LCD con 16 columnas y 2 filas. pinMode(pir, INPUT); // pir es una entrada. pinMode(switchs, INPUT); // switchs es una entrada. pinMode(leds, OUTPUT); // leds es una salida. pinMode(sirena, OUTPUT); // sirena es una salida. pinMode(altavoz, OUTPUT); // altavoz es una salida. Serial.print("0"); // Inicializo imprimiendo "0" en el puerto serie. }
void loop() { /* //// En el siguiente estado (estado '0') la alarma está apagada y necesita una clave para poderse activar //// El programa comienza su ejecución en este estado y realizará de forma secuencial las siguientes acciones: - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoSerie()). - Poner a nivel bajo las salidas leds, sirena y altavoz. - Indicar en la pantalla LCD qué la alarma está inactiva. - Comprobar si se ha marcado algún número (a través de la subrutina clavePin()). - Verificar si el número marcado es el correcto (claveBien o claveMal).
29
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. */ while(estado == 0) { puertoSerie(); digitalWrite(leds, LOW); digitalWrite(sirena, LOW); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("Alarm OFF, press"); lcd.setCursor(0, 1); lcd.print("key to activate "); clavePin(); if(claveBien) { estado = 1; Serial.print("1"); claveBien = false; } else if(claveMal) { estado = 5; Serial.print("5"); claveMal = false; } } /* //// En el siguiente estado (estado '1'), la alarma acaba de activarse, pero no estará operativa hasta que pasen 20 segundos //// En este estado, el programa realizará de forma secuencial las siguientes acciones: - Poner a nivel alto el indicador de alarma activa (led verde). - Indicar en la pantalla LCD qué la alarma se conectará pasados 20 segundos.
30
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
- El programa espera 20 segundos. - Posteriormente, el programa pasa a estado '2'. - Notifica el cambio a través del puerto serie. */ while(estado == 1) { digitalWrite(leds, HIGH); digitalWrite(sirena, LOW); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("Alarm ON, 20 sc "); lcd.setCursor(0, 1); lcd.print("to activate "); delay(20000); estado = 2; Serial.print("2"); } /* //// En el siguiente estado (estado '2') la alarma está operativa e inspecciona si un intruso ha entrado en casa //// En este estado, el programa realizará de forma secuencial las siguientes acciones: - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoSerie()). - Poner a nivel alto solo el indicador de alarma activa (led verde). - Indicar en la pantalla LCD qué la alarma está operativa. - Verificar si el sensor pir o los interruptores de puerta han detectado algún intruso. En el caso de detectar a algún intruso, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. */ while(estado == 2) { puertoSerie();
31
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
digitalWrite(leds, HIGH); digitalWrite(sirena, LOW); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("ON, press key "); lcd.setCursor(0, 1); lcd.print("to desactivate "); if(digitalRead (switchs) == HIGH || digitalRead (pir) == HIGH) { estado = 3; Serial.print("3"); delay(1000); } } /* //// En el siguiente estado (estado '3') la alarma acaba de detectar un intruso y pondrá en funcionamiento la sirena si en 20 segundos no se introduce el código PIN //// En este estado y durante 20 segundos, el programa realizará de forma secuencial las siguientes acciones: - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoSerie()). - Poner a nivel alto solo el indicador de alarma activa (led verde). - Indicar en la pantalla LCD qué la alarma debe desactivarse en menos de 20 segundos. - Comprobar si se ha marcado algún número (a través de la subrutina clavePin()). - Verificar si el número marcado es el correcto (claveBien o claveMal). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. */ while(estado == 3) { tiempo = millis() + 20000; do
32
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
{ digitalWrite(leds, HIGH); digitalWrite(sirena, LOW); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("Desactivate in "); lcd.setCursor(0, 1); lcd.print("20 seconds "); clavePin(); if(claveBien || claveMal || (Serial.available()>0)) { break; } }while(tiempo > millis()); puertoSerie(); if(claveBien) { estado = 0; Serial.print("0"); claveBien = false; } else if(claveMal) { estado = 6; Serial.print("6"); claveMal = false; } else if (estado!= 0) { estado = 4; Serial.print("4"); } } /* //// En el siguiente estado (estado '4') la sirena de la alarma está en funcionamiento y se necesita el código PIN para detener la alarma ////
33
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
En este estado, el programa realizará de forma secuencial las siguientes acciones: - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoSerie()). - Poner a nivel alto el indicador de alarma activa (led verde). - Poner a nivel alto el relé que activa la sirena. - Indicar en la pantalla LCD qué la alarma qué la alarma está en funcionamiento y necesita clave para desactivarse. - Comprobar si se ha marcado algún número (a través de la subrutina clavePin()). - Verificar si el número marcado es el correcto (claveBien o claveMal). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. */ while(estado == 4) { puertoSerie(); digitalWrite(leds, HIGH); digitalWrite(sirena, HIGH); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("ON, press key "); lcd.setCursor(0, 1); lcd.print("to desactivate "); clavePin(); if(claveBien) { estado = 0; Serial.print("0"); claveBien = false; } else if(claveMal) { estado = 6; Serial.print("6"); claveMal = false;
34
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
} } /* //// En el siguiente estado (estado '5') el código PIN está bloqueado y se necesita el código PUK para activar la alarma //// En este estado, el programa realizará de forma secuencial las siguientes acciones: - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoSerie()). - Poner a nivel bajo las salidas leds, sirena y altavoz. - Indicar en la pantalla LCD qué el código PIN está bloqueado y se necesita introducir el código PUK para activar la alarma. - Comprobar si se ha marcado algún número (a través de la subrutina clavePuk()). - Verificar si el número marcado es el correcto (claveBien). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. */ while(estado == 5) { puertoSerie(); digitalWrite(leds, LOW); digitalWrite(sirena, LOW); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("PIN locked "); lcd.setCursor(0, 1); lcd.print("Enter PUK code "); clavePuk(); if(claveBien) { estado = 1; Serial.print("1"); claveBien = false;
35
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
} } /* //// En el siguiente estado (estado '6') el código PIN está bloqueado y se necesita el código PUK para desactivar la alarma //// En este estado, el programa realizará de forma secuencial las siguientes acciones: - Comprobar si hay un dato en el puerto serie (a través de la subrutina puertoSerie()). - Poner a nivel alto el indicador de alarma activa (led verde). - Poner a nivel alto el relé que activa la sirena. - Indicar en la pantalla LCD qué el código PIN está bloqueado y se necesita introducir el código PUK para desactivar la alarma. - Comprobar si se ha marcado algún número (a través de la subrutina clavePuk()). - Verificar si el número marcado es el correcto (claveBien). Después de la verificación del número marcado, el programa irá al estado que le corresponda y notificará el cambio a la aplicación de c# enviando un dato a través del puerto serie. */ while(estado == 6) { puertoSerie(); digitalWrite(leds, HIGH); digitalWrite(sirena, HIGH); digitalWrite(altavoz, LOW); lcd.setCursor(0, 0); lcd.print("ON, enter PUK "); lcd.setCursor(0, 1); lcd.print("to desactivate "); clavePuk(); if(claveBien) { estado = 0; Serial.print("0");
36
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
claveBien = false; } } }
/* //// Subrutina puertoSerie() //// En esta subrutina el programa realizará de forma secuencial las siguientes acciones: - Comprobar si el puerto serie está disponible. - En el caso de que esté disponible, verificar que dato se ha recibido. - Si el dato recibido es ‘1’ el programa irá al estado 1. - En cambio, si es ‘0’ el programa irá al estado 0. - En cualquier caso, se notificará del cambio efectuado a la aplicación c# vía puerto serie. */ void puertoSerie() { if(Serial.available()>0) { recibirDato = Serial.read(); if(recibirDato == '1') { estado = 1; Serial.print("1"); digitalWrite(altavoz, HIGH); delay(500); digitalWrite(altavoz, LOW); delay(500); } else if (recibirDato == '0') { estado = 0; Serial.print("0"); digitalWrite(altavoz, HIGH); delay(500);
37
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
digitalWrite(altavoz, LOW); delay(500); } } } /* //// Subrutina clavePin() //// En esta subrutina el programa realizará de forma secuencial las siguientes acciones: - Detectar qué teclas han sido pulsadas. - Comprobar si el número pulsado coincide con el número secreto de la clave: Si esto es así, la variable booleana claveBien será verdadera, el LCD pondrá ‘clave correcta’ y el altavoz emitirá un bip corto. - Si por el contrario, el número no coincide con la clave secreta y se ha intentado introducirlo más de tres veces: La variable booleana claveMal será verdadera, el LCD pondrá ‘Pin bloqueado’ y el altavoz emitirá un bip largo. - Las teclas ‘*’ y ‘#’ se usarán para borrar las teclas presionadas y poder pulsar el código de nuevo. */ void clavePin() { key = keypad.getKey(); if (key == '*' || key == '#') { position = 0; cntPul = 0; delay(100); } if (key == secretCode[position]) { position ++; delay(100); } if (key >= '0')
38
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
{ cntPul ++; delay(100); } if (cntPul == 4) { if (position == 4) { claveBien = true; cntPul = 0; cntInt = 0; position = 0; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Correct key "); digitalWrite(altavoz, HIGH); delay(500); digitalWrite(altavoz, LOW); delay(500); } else { cntPul = 0; cntInt ++; position = 0; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Wrong key "); digitalWrite(altavoz, HIGH); delay(2000); } } if (cntInt == 3) { cntInt = 0; claveMal = true; lcd.clear(); lcd.setCursor(0, 0);
39
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
lcd.print("PIN locked "); lcd.setCursor(0, 1); lcd.print("Enter PUK code "); digitalWrite(altavoz, HIGH); delay(2000); } } /* //// Subrutina clavePuk() //// En esta subrutina el programa realizará de forma secuencial las siguientes acciones: - Detectar qué teclas han sido pulsadas. - Comprobar si el número pulsado coincide con el número secreto de la clave: Si esto es así, la variable booleana claveBien será verdadera, el LCD pondrá ‘clave correcta’ y el altavoz emitirá un bip corto. - Si por el contrario, el número no coincide con la clave secreta: El LCD pondrá ‘Clave errónea’ y el altavoz emitirá un bip largo. - Las teclas ‘*’ y ‘#’ se usarán para borrar las teclas presionadas y poder pulsar el código de nuevo. */ void clavePuk() { key = keypad.getKey(); if (key == '*' || key == '#') { position = 0; cntPul = 0; delay(100); } if (key == secretCode2[position]) { position ++; delay(100); } if (key >= '0')
40
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
{ cntPul ++; delay(100); } if (cntPul == 8) { if (position == 8) { claveBien = true; cntPul = 0; position = 0; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Correct key "); digitalWrite(altavoz, HIGH); delay(500); digitalWrite(altavoz, LOW); delay(500); } else { cntPul = 0; position = 0; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Wrong key "); digitalWrite(altavoz, HIGH); delay(2000); } } }
41
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4.3.
Código fuente C#
4.3.1. Código asociado al formulario Splash
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace proyectoAlarma { public partial class FormSplash : Form { public FormSplash() { //Se inicializa el timer y se establece su cuenta en cinco segundos. InitializeComponent(); tiempo.Enabled = true; tiempo.Interval = 5000; } private void tiempo_Tick(object sender, EventArgs e) { //En el momento que pasan los cinco segundos el timer se para. //Posteriormente, se cierra esta ventana para dar paso al formulario principal. tiempo.Stop(); this.DialogResult = DialogResult.OK; this.Close(); } } }
42
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4.3.2. Código asociado al formulario principal
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.IO.Ports; using proyectoAlarma.Properties; using System.Net.Mail; namespace proyectoAlarma { public partial class frmSmartAlarm : Form { //En este apartado declaro las variables de caracter general. #region Variables int contador = 0; string fecha, registro, recibirDato, To; string From = "proyectoalarmasanjose2014@gmail.com"; string Subject = "¡Alerta, intruso en casa!"; string Contraseña = "………………………"; string Message = "Acaba de entrar un intruso en su casa. Es necesario que avise a la policía."; #endregion public frmSmartAlarm() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; }
private void frmSmartAlarm_Load(object sender, EventArgs e) { //En este apartado cargo en los ComboBox las características seleccionables del puerto serie. this.Size = new Size(328, 281);
43
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
#region BindingSource cbPort Dictionary<string, string> dPort = new Dictionary<string, string>(); string[] PortNames = System.IO.Ports.SerialPort.GetPortNames(); Array.Sort<string>(PortNames); if (PortNames != null && PortNames.Length > 0) { foreach (string portName in PortNames) { dPort.Add(portName.Substring(3), portName); } cbPort.DisplayMember = "Value"; cbPort.DataSource = new BindingSource(dPort, null); cbPort.SelectedIndex = 0; } #endregion #region BindingSource cbData Dictionary<int, int> dData = new Dictionary<int, int>(); dData.Add(7, 7); dData.Add(8, 8); cbData.DisplayMember = "Value"; cbData.DataSource = new BindingSource(dData, null); cbData.SelectedIndex = 1; #endregion #region BindingSource cbParity Dictionary<System.IO.Ports.Parity, string> dParity = new Dictionary<System.IO.Ports.Parity, string>(); dParity.Add(System.IO.Ports.Parity.None, "(Ninguno)"); dParity.Add(System.IO.Ports.Parity.Even, "Par"); dParity.Add(System.IO.Ports.Parity.Odd, "Impar"); cbParity.DisplayMember = "Value"; cbParity.DataSource = new BindingSource(dParity, null); cbParity.SelectedIndex = 0; #endregion #region BindingSource cbStop Dictionary<System.IO.Ports.StopBits, string> dStop = new Dictionary<System.IO.Ports.StopBits, string>(); dStop.Add(System.IO.Ports.StopBits.One, "1"); dStop.Add(System.IO.Ports.StopBits.OnePointFive, "1.5"); dStop.Add(System.IO.Ports.StopBits.Two, "2"); cbStop.DisplayMember = "Value"; cbStop.DataSource = new BindingSource(dStop, null);
44
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
cbStop.SelectedIndex = 0; #endregion #region BindingSource cbBaud Dictionary<int, int> items = new Dictionary<int, int>(); items.Add(1, 1200); items.Add(2, 2400); items.Add(3, 4800); items.Add(4, 9600); items.Add(5, 19200); cbBaud.DisplayMember = "Value"; cbBaud.DataSource = new BindingSource(items, null); cbBaud.SelectedIndex = 4; #endregion //Inicializo el puerto serie con los valores por defecto que he determinado e inhabilito los combobox. #region Inicio Puerto Serie serialPort1.PortName = cbPort.Text; serialPort1.BaudRate = int.Parse(cbBaud.Text); cbData.Enabled = false; cbParity.Enabled = false; cbStop.Enabled = false; lbData.Enabled = false; lblParity.Enabled = false; lblStopBits.Enabled = false; lblPort.Enabled = false; lbBauds.Enabled = false; cbPort.Enabled = false; cbBaud.Enabled = false; btnAceptar.Enabled = false; chkConfAvanz.Enabled = false; #endregion //Posteriormente abro el puerto serie. #region Abrir Puerto Serie if (!serialPort1.IsOpen) { try { serialPort1.Open(); } catch { MessageBox.Show("Puerto no válido, configure el puerto serial");
45
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
return; } } #endregion } private void frmSmartAlarm_FormClosing(object FormClosingEventArgs e) { //Al cerrar la aplicación cierro el puerto serie. if (serialPort1.IsOpen) { serialPort1.Close(); } }
sender,
private void salirToolStripMenuItem_Click(object sender, EventArgs e) { //Si se pulsa el botón salir del menú la aplicación se cierra. this.Close(); } private void abrirToolStripMenuItem1_Click(object sender, EventArgs e) { //Se abre un nuevo formulario para poder cargar un archivo ya existente del sistema. frmRegistroBaseDatos miRegistroBaseDatos = new frmRegistroBaseDatos(); miRegistroBaseDatos.ShowDialog(); }
private void acercaDeToolStripMenuItem_Click_1(object EventArgs e) { //Se abre un nuevo formulario con una ventana acerca de. frmAbout miAbout = new frmAbout(); miAbout.ShowDialog(); }
sender,
private void btnAceptar_Click(object sender, EventArgs e) { //Establezco el puerto serie con los valores que he modificado, abro el puerto e inhabilito los combobox.
46
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
#region Establecimineto de parámetros en el Puerto Serie serialPort1.PortName = cbPort.Text; serialPort1.BaudRate = int.Parse(cbBaud.Text); serialPort1.DataBits = int.Parse(cbData.Text); if (cbParity.Text == "(Ninguno)") { serialPort1.Parity = Parity.None; } else if (cbParity.Text == "Par") { serialPort1.Parity = Parity.Even; } else { serialPort1.Parity = Parity.Odd; } if (cbStop.Text == "1") { serialPort1.StopBits = StopBits.One; } else if (cbStop.Text == "1.5") { serialPort1.StopBits = StopBits.OnePointFive; } else { serialPort1.StopBits = StopBits.Two; } if (!serialPort1.IsOpen) { try { serialPort1.Open(); } catch { MessageBox.Show("Puerto no válido"); return; } } #endregion #region Inhabilitar botones del Puerto Serie lblPort.Enabled = false;
47
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
lbBauds.Enabled = false; lbData.Enabled = false; lblParity.Enabled = false; lblStopBits.Enabled = false; cbPort.Enabled = false; cbData.Enabled = false; cbParity.Enabled = false; cbStop.Enabled = false; cbBaud.Enabled = false; btnCancelar.Enabled = true; btnAceptar.Enabled = false; chkConfAvanz.Enabled = false; #endregion this.Size = new Size(328, 281); } private void btnCancelar_Click(object sender, EventArgs e) { //Cierro el puerto serie e habilito los combobox para que estos puedan ser modificados. #region Habilitar botones Puerto Serie serialPort1.Close(); lblPort.Enabled = true; lbBauds.Enabled = true; cbPort.Enabled = true; cbBaud.Enabled = true; btnCancelar.Enabled = false; btnAceptar.Enabled = true; chkConfAvanz.Enabled = true; #endregion //Se mostrarán habilitados los combobox de datos, paridad y bits de stop en el caso de que se hubieran habilitado la vez anterior. #region Configuración avanzada if (chkConfAvanz.Checked == true) { cbData.Enabled = true; cbParity.Enabled = true; cbStop.Enabled = true; lbData.Enabled = true; lblParity.Enabled = true; lblStopBits.Enabled = true; }
48
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
else { cbData.Enabled = false; cbParity.Enabled = false; cbStop.Enabled = false; lbData.Enabled = false; lblParity.Enabled = false; lblStopBits.Enabled = false; } #endregion } private void chkConfAvanz_CheckedChanged(object sender, EventArgs e) { //Si marco configuración avanzada, puedo modificar los combobox de datos, paridad y bits de stop del puerto serie. #region Configuración avanzada if (chkConfAvanz.Checked == true) { cbData.Enabled = true; cbParity.Enabled = true; cbStop.Enabled = true; lbData.Enabled = true; lblParity.Enabled = true; lblStopBits.Enabled = true; } else { cbData.Enabled = false; cbParity.Enabled = false; cbStop.Enabled = false; lbData.Enabled = false; lblParity.Enabled = false; lblStopBits.Enabled = false; } #endregion } private void guardarToolStripButton_Click(object sender, EventArgs e) { //El siguiente código permite guardar un documento en la carpeta que el usuario desee.
49
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) { richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText); } else { MessageBox.Show("Operación Abortada"); } } private void imprimirToolStripButton_Click(object sender, EventArgs e) { //El siguiente código permite imprimir un documento. PrintDialog PrintDialog1 = new PrintDialog(); if (PrintDialog1.ShowDialog() == DialogResult.OK) { printDocument1.Print(); } } private void cortarToolStripButton_Click(object sender, EventArgs e) { //Este código se usa para cortar un texto seleccionado. richTextBox1.Cut(); } private void copiarToolStripButton_Click(object sender, EventArgs e) { //Este, permite copiarlo al portapapeles. richTextBox1.Copy(); } private void pegarToolStripButton_Click(object sender, EventArgs e) { //Y este pegarlo en el lugar qué el usuario desee. richTextBox1.Paste(); } private void registroToolStripMenuItem_Click(object sender, EventArgs e) { this.Size = new Size(633, 282); #region Barra automática para la caja de texto
50
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
this.richTextBox1.Size = new Size(278, 185); richTextBox1.SelectionStart = richTextBox1.Text.Length; richTextBox1.ScrollToCaret(); richTextBox1.Refresh(); #endregion } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //Aquí, se determinan las características de impresión. e.Graphics.DrawString(richTextBox1.Text, new Font("Calibri", 11, FontStyle.Bold), Brushes.Black, 60, 80); } private void verLaInterfazCompletaToolStripMenuItem_Click(object sender, EventArgs e) { this.Size = new Size(633, 557); #region Barra automática para la caja de texto this.richTextBox1.Size = new Size(278, 466); richTextBox1.SelectionStart = richTextBox1.Text.Length; richTextBox1.ScrollToCaret(); richTextBox1.Refresh(); #endregion } private void ocultarToolStripButton_Click(object sender, EventArgs e) { this.Size = new Size(328, 281); } //Las siguientes funciones muestran el código asociado a los botones de la interfaz. // Características: // - Si se pulsa el botón '*' o '#' se limpiará la pantalla y se pondrá a cero el contador de números marcados. // - En el caso de marcar alguno de los otros botones, en pantalla saldrá '*' y el número será guardado en una caja de texto no visible. // - Si el contador es mayor que tres, no se admitirán nuevos números marcados. private void btnAsterisco_Click(object sender, EventArgs e)
51
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
{ txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; contador = 0; } private void btn0_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "0"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btnAlmohadilla_Click(object sender, EventArgs e) { txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; contador = 0; } private void btn1_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "1"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btn2_Click(object sender, EventArgs e)
52
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
{ if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "2"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btn3_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "3"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btn4_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "4"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } }
53
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
private void btn5_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "5"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btn6_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "6"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btn7_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "7"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } }
54
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
private void btn8_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "8"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btn9_Click(object sender, EventArgs e) { if (contador > 3) { return; } else { txtPinPukOculto.Text = txtPinPukOculto.Text + "9"; txtPinPuk.Text = txtPinPuk.Text + "*"; contador++; } } private void btnOk_Click(object sender, EventArgs e) { //Características del botón OK de validación de código: // - En el caso de que el código guardado en la caja de texto no visible coincida con la clave, se enviará // un '1' o un '0' al puerto serie. El valor del dato que se envía al puerto serie viene determinado por // el estado en el que se encuentra la alarma. // - Si por el contrario no coincide el número marcado con la clave, aparecerá un mensaje de aviso diciendo // que el código introducido es incorrecto.
55
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
if (txtPinPukOculto.Text == "1234" && txtEstado.Text == "Alarma desactivada, necesita clave para activarse") { serialPort1.Write("1"); contador = 0; txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; } else if (txtPinPukOculto.Text == "1234" && txtEstado.Text == "la sirena está en funcionamiento, se requiere código para desactivar la alarma") { serialPort1.Write("0"); contador = 0; txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; } else if (txtPinPukOculto.Text == "1234" && txtEstado.Text == "Alarma activa, necesita clave para desactivarse") { serialPort1.Write("0"); contador = 0; txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; } else if (txtPinPukOculto.Text == "1234" && txtEstado.Text == "Intruso en casa, se requiere desactivar la alarma en 20 segundos") { serialPort1.Write("0"); contador = 0; txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; } else if (txtEstado.Text == "") { txtPinPukOculto.Text = ""; contador = 0; MessageBox.Show("No existe comunicación con la alarma, pruebe a conectarla de nuevo"); } else { txtPinPuk.Text = "";
56
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
txtPinPukOculto.Text = ""; contador = 0; MessageBox.Show("El código introducido es incorrecto"); } } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { // Características de la siguiente función: // - Los datos de que recibe el puerto serie se guardan en la variable recibirDato. // - El dato que se recibe indica el estado en el que se encuentra la alarma. // - Todos los estados en los que se encuentre la alarma serán mostrados en una caja // de texto y escritos en un archivo .txt del disco duro. // - La primera vez que se utilice esta aplicación y se reciba un dato por el puerto // serie se generará de forma automática un archivo .txt en el disco duro del pc. // - Si se recibe un '4' o un '6' en el puerto serie, indica que la alarma ha detectado // a un intruso y se enviará un correo electrónico a la dirección que el usuario haya // establecido. recibirDato = this.serialPort1.ReadExisting(); System.Net.Mail.MailMessage Email; switch(recibirDato) { case"0": fecha = DateTime.Now.ToString(); registro = fecha + " - Alarma desactivada, necesita clave para activarse\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "Alarma desactivada, necesita clave para activarse"; try { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true);
57
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close(); } break; case"1": fecha = DateTime.Now.ToString(); registro = fecha + " - Clave correcta, la alarma se activará en 20 segundos\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "Clave correcta, la alarma se activará en 20 segundos"; try { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true); sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close(); } break; case "2": fecha = DateTime.Now.ToString();
58
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
registro = fecha + " - Alarma activa, necesita clave para desactivarse\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "Alarma activa, necesita clave para desactivarse"; try { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true); sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close(); } break; case "3": fecha = DateTime.Now.ToString(); registro = fecha + " - Intruso en casa, se requiere desactivar la alarma en 20 segundos\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "Intruso en casa, se requiere desactivar la alarma en 20 segundos"; try { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true); sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt";
59
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close(); } break; case "4": fecha = DateTime.Now.ToString(); registro = fecha + " - la sirena está en funcionamiento, se requiere código PIN para desactivar la alarma\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "la sirena está en funcionamiento, se requiere código para desactivar la alarma"; To = this.txtCorreo.Text; if (To == "") { To = "proyectoalarmasanjose2014@gmail.com"; } try { #region Enviar Email Email = new System.Net.Mail.MailMessage(From, To, Subject, Message); System.Net.Mail.SmtpClient smtpMail = new System.Net.Mail.SmtpClient("smtp.gmail.com"); Email.IsBodyHtml = false; smtpMail.EnableSsl = true; smtpMail.UseDefaultCredentials = false; smtpMail.Port = 25; smtpMail.Credentials = new System.Net.NetworkCredential(From, Contraseña); lblEnviar.Text = ""; lblEnviar.Text = "Enviando E-mail...."; smtpMail.Send(Email); lblEnviar.Text = ""; #endregion } catch (System.Net.Mail.SmtpException) { lblEnviar.Text = ""; lblEnviar.Text = "E-mail no enviado";
60
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
} try { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true); sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close(); } break; case "5": fecha = DateTime.Now.ToString(); registro = fecha + " - PIN bloqueado, se requiere PUK para activar la alarma\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "Alarma desactivada, necesita clave para activarse"; try { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true); sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close();
61
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
} break; case "6": fecha = DateTime.Now.ToString(); registro = fecha + " - la sirena está en funcionamiento, se requiere código PUK para desactivar la alarma\r\n"; this.richTextBox1.Text += registro; this.txtEstado.Text = "la sirena está en funcionamiento, se requiere código para desactivar la alarma"; To = this.txtCorreo.Text; if (To == "") { To = "proyectoalarmasanjose2014@gmail.com"; } try { #region Enviar Email Email = new System.Net.Mail.MailMessage(From, To, Subject, Message); System.Net.Mail.SmtpClient smtpMail = new System.Net.Mail.SmtpClient("smtp.gmail.com"); Email.IsBodyHtml = false; smtpMail.EnableSsl = true; smtpMail.UseDefaultCredentials = false; smtpMail.Port = 25; smtpMail.Credentials = new System.Net.NetworkCredential(From, Contraseña); lblEnviar.Text = ""; lblEnviar.Text = "Enviando E-mail...."; smtpMail.Send(Email); lblEnviar.Text = ""; #endregion } catch (System.Net.Mail.SmtpException) { lblEnviar.Text = ""; lblEnviar.Text = "E-mail no enviado"; } try { const string fic = @"C:\tmp\SmartAlarm.txt";
62
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true); sw.WriteLine(registro); this.txtOculto.Clear(); sw.Close(); } catch { const string fic = @"C:\tmp\SmartAlarm.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine("(Catch) " + registro); this.txtOculto.Clear(); sw.Close(); } break; } } private void btnCancel_Click(object sender, EventArgs e) { //El botón cancelar limpiará la pantalla y pondrá a cero el contador de números marcados. txtPinPuk.Text = ""; txtPinPukOculto.Text = ""; contador = 0; } // Las siguientes funciones determinan el tamaño de la interfaz al seleccionar una opción u otra. private void puertoSerieToolStripMenuItem1_Click_1(object sender, EventArgs e) { this.Size = new Size(328, 557); } private void correoElectrónicoToolStripMenuItem_Click(object sender, EventArgs e) { this.Size = new Size(328, 326); } private EventArgs e)
63
void
pantallaInicialToolStripMenuItem_Click(object
sender,
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
{ this.Size = new Size( 328, 281); } private void verlaayudaToolStripMenuItem_Click(object sender, EventArgs e) { //Al pulsar ver la ayuda del menú, se abre un nuevo formulario con una ventana de ayuda. FormAyuda miAyuda = new FormAyuda(); miAyuda.ShowDialog(); } } }
64
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4.3.3. Código asociado al formulario con el que se abren los archivos .txt existentes (frmRegistroBaseDatos).
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace proyectoAlarma { public partial class frmRegistroBaseDatos : Form { public frmRegistroBaseDatos() { InitializeComponent(); } private void frmRegistroBaseDatos_Load(object sender, EventArgs e) { //El siguiente código se utiliza para abrir el directorio y posteriormente poder seleccionar el // fichero que se desea abrir. richTextBox1.Clear(); openFileDialog1.InitialDirectory = @"C:\"; openFileDialog1.Title = "Selecciona un Fichero"; if (openFileDialog1.ShowDialog() != DialogResult.Cancel) { richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText); } else { MessageBox.Show("Selección Abortada"); } } private void guardarToolStripButton_Click(object sender, EventArgs e) {
65
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
//El siguiente código permite guardar un documento en la carpeta que el usuario desee. if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) { richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText); } else { MessageBox.Show("Operación Abortada"); } } private void imprimirToolStripButton_Click(object sender, EventArgs e) { //El siguiente código permite imprimir un documento. PrintDialog PrintDialog1 = new PrintDialog(); if (PrintDialog1.ShowDialog() == DialogResult.OK) { printDocument1.Print(); } } private void cortarToolStripButton_Click(object sender, EventArgs e) { //Este código se usa para cortar un texto seleccionado. richTextBox1.Cut(); } private void copiarToolStripButton_Click(object sender, EventArgs e) { //Este, permite copiarlo al portapapeles. richTextBox1.Copy(); } private void pegarToolStripButton_Click(object sender, EventArgs e) { //Y este pegarlo en el lugar qué el usuario desee. richTextBox1.Paste(); } private void printDocument1_PrintPage(object System.Drawing.Printing.PrintPageEventArgs e) {
66
sender,
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
//Aquí se determinan las características de impresión. e.Graphics.DrawString(richTextBox1.Text, new Font("Calibri", FontStyle.Bold), Brushes.Black, 60, 80); } } }
67
11,
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
5. 5.1.
Esquemas y planos Esquema en bloque
68
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
5.2.
Esquema eléctrico
69
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
5.3.
Diseño de la PCB
5.3.1. Placa Principal
5.3.2. Placa secundaria
70
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
5.3.3. Componentes Placa Principal
5.3.4. Componentes Placa Secundaria
71
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
5.4.
Imagen en 3D
5.4.1. Placa principal
5.4.2. Placa secundaria
72
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3.2
Diseño Case Project
90,00 80,00
1,00
77,00
115,00
115,00
36,00
5,00
0,75
70,00 90,00 115,00
90,00
70,00 55,00 41,00
55,00
11,00 29,00
73
15,00
23,00
20,00
12,00
5,00
11,00
25,00
12,00
7,00
55,00
29,00
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
6.
Listado de materiales y presupuesto
Componente
Cantidad Suministrador
Precio/Unidad Precio
Placa fotosensible
1
Micropik
6,58 €
6,58 €
Resistencia smd 220
2
Micropik
0,03 €
0,06 €
Resistencia smd330
1
Micropik
0,03 €
0,03 €
Resistencia 10K
1
Micropik
0,02 €
0,02 €
Potenciómetro CA6V
1
Micropik
0,36 €
0,36 €
Conector AK 300/2
2
Micropik
0,29 €
0,58 €
Conector AK 300/3
2
Micropik
0,42 €
0,84 €
Led
2
Micropik
0,11 €
0,22 €
Tira de pines macho
1
Micropik
0,16 €
0,16 €
Tira de pines hembra
1
Micropik
0,21 €
0,21 €
Relé G5LE
1
Farnell
1,54 €
1,54 €
C.I. ULN2003A
1
Farnell
0,53 €
0,53 €
PIR
1
Ebay
0,75 €
0,75 €
keypad 3x4
1
Ebay
1,00 €
1,00 €
Pantalla LCD
1
Ebay
1,65 €
1,65 €
Zumbador
1
Ebay
0,20 €
0,20 €
Interruptor de puerta
2
Ebay
0,7
1,40 €
Arduino Leonardo
1
Ebay
7,60 €
7,60 €
Sirena 12V-150mA F.Alimentación 12V-2A Caja de plástico 115x65x55
1
JrInternational
5,33 €
5,33 €
1
Ebay
7,01 €
7,01 €
1
Online Electrónica
5,38 €
5,87 €
Total:
74
41,94 €
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
7. Manual de usuario 7.1. Introducción
En el presente manual se van a detallar las características del diseño, la capacidad de detección, los sistemas de visualización, las entradas y salidas utilizadas, el procedimiento de puesta en marcha y operación del prototipo.
7.2. Características del diseño El sistema de alarma “SMART ALARM” se compone de dos partes bien diferenciadas: d) Diseño hardware y software C_Arduino. e) Diseño Windows forms y software C#.
Diseño hardware y software C_Arduino, características: 1. Activación y desactivación de la alarma mediante clave (Pin o Puk), utilizando para ello un teclado (3x4). 2. Control de estado de la alarma por medio de leds (rojo-verde) y altavoz. 3. Visualización de textos a través de display LCD. 4. Aviso acústico y luminoso en caso de detectar un intruso. 5. Control de presencia y apertura de puertas vía PIR e interruptores ‘NC’.
Diseño Windows Forms y software C#, características: 1. 2. 3. 4. 5.
Activación y desactivación del sistema de alarma mediante clave Pin. Control de estado de la alarma a través de una caja de texto. Envío de un e-mail en el caso de detectar a un intruso. Dispone de una opción para configurar los parámetros del puerto serie. Cuenta con un enlace a un carpeta del disco duro para memorizar los estados de la alarma con fecha y hora en un archivo .txt (C:\tmp\SmartAlarm).
75
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
6. 7. 8. 9.
Puede abrir un archivo.txt ya existente en la memoria del PC. Cuenta con opciones de guardar, imprimir, cortar, copiar y pegar. Permite el control de la aplicación a través de teclas rápidas. Posee una opción que presenta un texto de ayuda para el manejo de esta aplicación. En el mismo sentido, también cuenta con cuadro “acerca de” donde se detallan las especificaciones de “SMART ALARM”. 10. Antes de que cargue el formulario principal, esta aplicación muestra un splash durante 5 segundos.
7.3. Capacidad de detección
SMART ALARM dispone de varios sensores para advertir la presencia de un intruso en su casa. 1. Sensor Pir Es un sensor que detecta cambios de temperatura y movimiento. Se suele colocar en el interior de habitaciones.
Ilustración 8. Pir 2. Sensores magnéticos para puertas Este tipo de sensores forman un circuito cerrado por un imán y un contacto muy sensible. En el caso de que estos se separen, cambian su estado y envían una señal a la alarma. Se utilizan en puertas y ventanas.
76
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración 9. Sensor magnético 7.4. Sistemas de visualización
El sistema de alarma cuenta con dos interfaces diferentes en los que se puede visualizar su estado a) Pantalla de LCD Es una pantalla delgada y plana donde se pueden visualizar textos. Está formada por un número de píxeles en color o monocromos colocados delante de una fuente de luz o reflectora. Además, con ayuda de un potenciómetro puede regularse su contraste.
Ilustración 10.LCD
b) Interfaz de la aplicación C# Es una aplicación de ventana de Windows Forms, presenta el siguiente formato:
77
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración 11. Interfaz de la aplicación
78
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
7.5. Entradas y salidas del microcontrolador utilizadas
Asignación de las entradas y salidas 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
Conexión RXD (Recepción de datos) TXD (Transmisión de datos)
LCD3 LCD4 LCD5 LCD6 KEYPAD1 KEYPAD2 KEYPAD3 KEYPAD4 KEYPAD5 KEYPAD6 KEYPAD7 ALTAVOZ
SWITCH LEDS SIRENA PIR LCD1 LCD2
79
Pin D0 D1 RESET GND D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 3.3V_OUT ADC REF A0 A1 A2 A3 A4 A5 A6 A7 5V_OUT RESET GND_IN VDC_IN
Función especial RXD TXD
INT0 INT1 T0 T1 AN1
PWM2B XCK PWM0B PWM0A
ICP1
MOSI MISO SCK
PWM1A PWM1B PWM2A
ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
7.6. Procedimiento de puesta en marcha
La puesta en marcha de SMART ALARM es muy sencilla, cualquier tipo de usuario siguiendo estos sencillos pasos podría ponerla en funcionamiento. 1. Conectar la fuente de alimentación a la red eléctrica de la vivienda. 2. Enchufar el conector macho de la fuente de alimentación al conector hembra de arduino de SMART ALARM.
3. Conectar el cable USB del ordenador a la placa microcontroladora
80
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4. Abrir la aplicación C#, configurar el puerto serie si es necesario e introducir el correo electrónico para recibir las notificaciones.
Ilustración 12. Ventana configuración Puerto Serie
5. SMART ALARM ya está lista para usarse.
81
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
7.7. Procedimiento de operación del sistema de alarma
Después de la puesta en funcionamiento de SMART ALARM, el siguiente paso es activarla. Esta operación se puede realizar a través del teclado 3x4 o por medio del teclado de la aplicación c#.
Ilustración 13. Teclados
El sistema de alarma cuenta con un código Pin de cuatro dígitos. Se tendrá opción a marcar dicho código tres veces, en el caso de que el número marcado sea erróneo, la alarma se bloqueará debiendo introducir el código Puk de ocho dígitos. Si necesitara borrar los números marcados antes de validar la clave, se puede hacer pulsando * o #. Posteriormente y si la clave introducida es correcta la alarma pasa a estar operativa pasados veinte segundos (tiempo suficiente para salir de la casa). A partir de este momento los sensores están activos y enviarán una señal al módulo central si detectan una presencia. En el caso de recibir la señal de presencia, SMART ALARM esperará veinte segundos (tiempo suficiente para que el usuario pueda entrar en la casa y desactivar la alarma). Si la
82
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
alarma no ha sido desactivada transcurrido ese tiempo, la bocina empezará a sonar y se enviará un correo electrónico al dueño de la vivienda. En tal estado, la alarma podrá desactivarse a través del código Pin o en su caso Puk. SMART ALARM mostrará todos los estados por los que pasa la alarma tanto en la pantalla LCD como en la aplicación C#. Además, la aplicación C# ofrecerá al usuario todas las funcionalidades descritas en el apartado “Características del diseño”
Las distintas ventanas que puede mostrar la aplicación C# son las siguientes:
Ilustración 14. Ventana de Splash
83
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración15. Ventana de Inicio
Ilustración16. Ventana configuración Puerto Serie
84
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración17. Ventana visualización del Registro
Ilustración 18. Interfaz completa
85
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Ilustración 19. Ventana de ayuda
Ilustración 20. Ventana Acerca de
Para más información acerca de este producto, puede enviarnos su consulta al siguiente correo: proyectoalarmasanjose2014@gmail.com
86
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
8. Manual de Servicio Técnico/Preguntas Frecuentes 8.1. Introducción
En el presente manual se van a detallar las recomendaciones generales para el uso del sistema de alarma, los posibles fallos que pueden aparecer durante su funcionamiento y las preguntas frecuentes que suelen hacer los usuarios.
8.2. Recomendaciones
Mantenga los sensores limpios para un óptimo funcionamiento.
Si modifica la distribución de sus muebles, tenga en cuenta no obstruir los ángulos de visión de los sistemas de detección.
Al activar el sistema de alarma, verificar que no queden mascotas en ambientes donde se encuentren sensores de movimiento.
No deje ventanas abiertas en ambientes donde se encuentren activados sensores de movimiento, ya que las corrientes de aire y
87
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
el movimiento de ventanas, cortinas, etc. pueden disparar el sistema de alarma.
Si posee un Smartphone es conveniente que lo lleve consigo al activar el sistema para poder recibir las notificaciones.
8.3. Posibles fallos en el sistema
1. Problema de alimentación: Comprobar con el polímetro si hay tensión en el conector de la fuente de alimentación. Si no hay tensión: Comprobar si el enchufe tiene corriente para determinar si la fuente de alimentación está rota. Si hay tensión : El problema se encuentra en la placa microcontroladora. 2. La sirena no funciona: Verificar el funcionamiento del relé. Si este funciona: Verificar continuidad en los cables que van hacia la sirena para determinar si la bocina está rota. Si no funciona: Se debe cambiar el relé. 3. No existe comunicación entre la alarma y la aplicación C#: Cambie el cable de puerto y vuelva a configurar el puerto serie de la aplicación. Si no hay comunicación : Compre un cable USB nuevo para determinar si el problema se encuentra en el puerto de la placa microcontroladora.
88
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4. Los sensores no detectan a un intruso o lo detectan siempre: Verificar la continuidad de los cables. Si hay continuidad: Puede ser debido a que los sensores tienen poca o mucha sensibilidad, que estos estén rotos o sucios o que la placa microcontroladora tenga algún problema. No hay continuidad: Se deben cambiar los cables o en su caso volverlos a empalmar. 5. Problema con teclado 3x4 o pantalla LCD: Ponerse en contacto con el servicio técnico. 6. En el caso de no poder solucionar alguno de los fallos anteriormente citados o que le surja otro diferente, debe ponerse en contacto con el servicio técnico.
8.4. Preguntas frecuentes
¿Por qué no recibo las notificaciones a mi correo electrónico? Para poder recibir las notificaciones es necesario rellenar el campo de correo electrónico cada vez que inicialices la aplicación de C#.
¿Por qué no puedo comunicarme con la alarma desde la aplicación del ordenador? SMART ALARM viene configurado de fábrica para utilizar el COM1, si a usted no le funciona, debería configurar el puerto serie de nuevo.
89
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
¿Por qué la pantalla del LCD no muestra ningún mensaje? Es probable que el contraste de la pantalla no esté bien regulado. Esto se corrige girando el potenciómetro poco a poco hasta dejarlo en su posición adecuada.
¿Por qué la alarma siempre detecta a un intruso cuando la activo a pesar de no haber nadie en casa? Véase posibles fallos en el sistema - Los sensores no detectan a un intruso o lo detectan siempre-.
Para más información acerca de este producto, puede enviar un correo electrónico con su consulta a: proyectoalarmasanjose2014@gmail.com
90
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Anexo I. Página web
1. Idea
La creación de la página web en este proyecto tiene como objetivo poder comercializar el sistema de alarma en el futuro. Aunque en este caso he utilizado dicha plataforma con fines educativos, explicando a través de sus pestañas como se puede construir un sistema de alarma de forma autónoma.
2. Elaboración de la página
Para poder realizar la página web he tenido que realizar las siguientes acciones: a) Búsqueda y registro en diversas plataformas para la creación de web gratuitas. b) Realizar pruebas en cada una de las páginas para determinar cuál de ellas ofrece más servicios y es más funcional. c) Aprender a utilizar los recursos de la plataforma de creación de webs a través de tutoriales. d) Búsqueda y registro en diversas páginas webs dedicadas a la publicación de documentos en formato PDF; con la intención de subir a la nube aquellos documentos que considere importantes. e) Localización en la web de un programa capturador de pantalla y editor de vídeo para la creación de videotutoriales. f) Aprender a controlar dicho programa con ayuda de tutoriales.
91
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
3. Descripción general La página tiene un diseño sencillo e intuitivo, una interfaz agradable con colores suaves y una organización de contenidos acorde con los estándares establecidos. Además, cuenta con enlaces a sitios de interés, videotutoriales educativos y archivos para descargar.
4. Estructura de la página La página está dividida en siete secciones. Dichas secciones están ubicadas en las pestañas principales de la siguiente manera: 1. Inicio Esta es la pestaña principal, en ella se explica la idea principal del proyecto e invita al visitante a conocer un poco más de Arduino. 2. Instalación previa En esta sección se encuentran los programas necesarios para la realización del sistema de alarma y los enlaces para su descarga directa. 3. Proyecto Esta pestaña es la más importante. Está dividida en nueve subpestañas y cada una de estas explica una parte del proyecto.
92
Descripción del proyecto. Material. Esquema en bloque. Esquema eléctrico. Simulación. Diseño PCB y revelado. Programación. Diseño case Project. Control remoto.
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
4. Imágenes En este apartado se ubican todas las imágenes que se han utilizado a lo largo de las explicaciones. 5. Vídeo del proyecto Esta pestaña alberga el video de verificación del funcionamiento del proyecto. 6. Documentación En esta sección está alojada toda la documentación (en formato PDF) del proyecto. 7. Contacto Esta pestaña cuenta con todos los elementos necesarios para que el visitante pueda contactar conmigo o con el centro.
5. Recursos utilizados
La página web cuenta con recursos muy interesantes para el usuario, entre ellos cabe destacar: a) Accesos directos a páginas de interés para la total comprensión del proyecto y de su funcionamiento. b) Enlaces a páginas web necesarias para descargar programas. c) Visionado de videotutoriales desde la propia web. d) Vista de documentos PDF online. e) Descarga de imágenes y archivos necesarios para la elaboración del sistema de alarma. f) Mapa para la localización del centro en internet.
93
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Anexo II. Control remoto
1. Introducción
Hoy día, podemos encontrar en la red muchas aplicaciones de escritorio remoto con una versión libre. Un claro ejemplo es Team Viewer, dicha aplicación te permite tener "cierto control" de un ordenador a distancia.
2. Aplicación Este recurso es muy interesante, porque con su ayuda podríamos sincronizar nuestro Smartphone con el ordenador conectado al sistema de alarma. Esto nos permitiría tanto conectar como desconectar la alarma en todo momento y en cualquier lugar a través de Internet.
94
GUSTAVO REINA GARCÍA
CICLO FORMATIVO DE GRADO SUPERIOR DESARROLLO PRODUCTOS ELECTRÓNICOS
18/06/14
SISTEMA DE ALARMA INTELIGENTE
Bibliografía Ruíz Gutierrez, J.M. (2007). Manual de programación Arduino. Madrid Jurado,J.V.(2013). Apuntes C# Elementos del lenguaje III. Pérez Saavedra,A. (2013). Propuestas de Desarrollo de Proyectos. Pérez Saavedra,A. (2013). Cuaderno de desarrollo de proyectos. Pérez Saavedra,A. (2013). Manual de seguridad del taller de electrónica. Página oficial Arduino. Foro Arduino. Wikipedia. Weebly.com. Wix.com. Webnode.com. Jimdo.com Issuu.com. Techsmith.com Foro Weebly. Youtube.com.
95
GUSTAVO REINA GARCÍA