27
PROYECTO DE ELECTRÓNI CA 1

PRIMER Proyecto alarma arduino

Embed Size (px)

DESCRIPTION

CRECIONES

Citation preview

Page 1: PRIMER Proyecto alarma arduino

PROYECTO DE ELECTRÓNICA

Sistema de Alarma

1

Page 2: PRIMER Proyecto alarma arduino

Francisco Javier López Alcarria

2

Page 3: PRIMER Proyecto alarma arduino

ÍNDICE

- Objetivo:..............................................................................................................................3

- Justificación:........................................................................................................................3

- Plan de trabajo:...................................................................................................................3

A) Montaje del circuito en protoboards:.............................................................................3

B) Programación:..................................................................................................................6

PROGRAMACIÓN POR PARTES:...........................................................................................6

- La pantalla LCD:...........................................................................................................6

- El teclado:.....................................................................................................................7

- El zumbador:................................................................................................................8

PROGRAMACIÓN POR PARTES:...........................................................................................9

1- Declaración de variables..............................................................................................9

2- La función setup:..........................................................................................................9

3- La función modo_inicio:.............................................................................................10

4- La función modo_verde:............................................................................................13

5- La función modo_naranja:.........................................................................................13

6- La función modo_rojo:...............................................................................................14

7- La función loop:.........................................................................................................17

- Presupuesto:......................................................................................................................18

3

Page 4: PRIMER Proyecto alarma arduino

- Objetivo:

El Objetivo principal de este proyecto es realizar un sistema de alarma controlado manualmente. Dispondrá de varios modos con los que nos moveremos por el programa (alarma apagada, encendida, etc.), de contraseña (la cual designaremos cuando arranque el programa), de una temporización para la activación de la alarma, de un dispositivo de sonido como un zumbador y de una pantalla LCD en la que se nos mostrará la información necesaria para interactuar con el programa.

- Justificación:

Realizar un sistema de alarma barato, fácil de usar y con una contraseña que podremoscambiar cuando deseemos.

- Plan de trabajo:

El plan de trabajo será dividido en varias etapas:

A) Montaje del circuito en protoboards:

Ésta será la primera fase del proyecto, realizar el circuito del proyecto usando las placas prototipo, conociendo en todo momento las entradas y salidas que usaremos en el arduino, para una programación correcta. Para ello usaremos los siguientes materiales:

- Pack Arduino UNO: del pack usaremos la placa Arduino UNO, la pantalla LCD y el teclado.

- 3 pulsadores.- 1 zumbador.- 1 potenciómetro.- 4 leds, uno de ellos para comprobar que el sensor funciona correctamente.- Un total de 15 resistencias

4

Page 5: PRIMER Proyecto alarma arduino

Para el montaje del circuito podemos seguir el siguiente esquema:

Nuestra pantalla LCD sólo tiene 4 patillas: VCC, GND, SCL y SDA. La patilla SCL la conectaremos a la entrada analógica A5 del Arduino, y la SDA a la A4

El sensor de movimiento lo conectaremos de esta manera, la primera patilla a masa, la segunda a 5 Voltios y la tercera al pin 5 del Arduino:

5

Page 6: PRIMER Proyecto alarma arduino

6

Page 7: PRIMER Proyecto alarma arduino

El teclado requiere de 8 patillas digitales del arduino normalmente, pero podemos utilizar solo una entrada analógica, si usamos un divisor de tensión para cada tecla y un método en la programación que explicaremos más tarde, ahorrando un gran número de patillas, sin las que nos sería imposible realizar el proyecto. Lo conectaremos de la siguiente manera:

En la parte de programación veremos para que utilizaremos cada uno de estos materiales, ya que explicaremos el funcionamiento del programa por partes

Una vez tengamos todo correctamente montado, podremos pasar a la programación.

7

Page 8: PRIMER Proyecto alarma arduino

B) Programación:

Este apartado lo dividiremos en varios apartados para explicarlo lo más fácilmente posible. Primero veremos la programación para controlar algunos componentes, como la pantalla LCD, el teclado y el zumbador:

PROGRAMACIÓN POR PARTES:

- La pantalla LCD: Para conectar la pantalla al Arduino, debemos conectar la patilla SCL a la entrada analógica A5 y SDA la conectaremos a la A4.Para poder usar la pantalla LCD en el compilador tenemos que poner esta librería:

Después, en la función void setup () ponemos esto:

Con esto ya podremos usar la LCD, para ello se usarán los siguientes comandos:

lcd.clear(); // para borrar el contenido de la pantalla, es indispensable si queremos escribir algo en ella distinto de lo anterior, ya que si no se nos solaparán los dígitos.

lcd.print (“ejemplo”); // para escribir lo que queramos en la pantalla.

lcd.setCursor (x,y); // con ésto seleccionaremos la casilla de la LCD en la que queremos empezar a escribir, siendo x las columnas e y las filas (las dos empiezan por la columna y fila 0).

8

Page 9: PRIMER Proyecto alarma arduino

- El teclado: Para poder conectar el teclado al Arduino usando sólo una entrada analógica, lo haremos con el divisor de tensión que hemos explicado anteriormente. De esta manera cada tecla nos enviará una señal analógica distinta de las otras, por lo tanto mediante los rangos de la señal podremos asignar cada valor a un número del teclado. Lo podremos hacer de esta forma:

do { int numero2= analogRead (teclado); if ((numero2 > 845) && (numero2 < 865)) { nf = 1; x ++; } else if ((numero2 > 635) && (numero2 < 655)) { nf = 2; x ++; } else if ((numero2 > 503) && (numero2 < 520)) { nf = 3; x ++; } else if ((numero2 > 785) && (numero2 < 805)) { nf = 4; x ++; } else if ((numero2 > 600) && (numero2 < 620)) { nf = 5; x ++; } else if ((numero2 > 480) && (numero2 < 495)) { nf = 6; x ++; } else if ((numero2 > 720) && (numero2 < 740)) { nf = 7;

9

Page 10: PRIMER Proyecto alarma arduino

x ++; } else if ((numero2 > 560) && (numero2 < 580)) { nf = 8; x ++; } else if ((numero2 > 460) && (numero2 < 475)) { nf = 9; x ++; } else if ((numero2 > 545) && (numero2 < 555)) { nf = 0; x ++; }

En este proyecto solo hemos usado los números, así que si queremos añadir el resto de teclas de nuestro teclado, comprobaremos los rangos de señal que puede dar cada tecla y lo añadiremos en el compilador de la manera anterior.

- El zumbador : El zumbador es un dispositivo para crear sonidos. El tono del sonido lo podemos regular usando distintas frecuencias. También podemos controlar su intermitencia con el uso de la función delay(). Ejemplo:

tone (zumbador, 1000); // para activar el zumbador y su tonodelay (150);noTone (zumbador); // para desactivar el zumbadortone (zumbador, 1000);delay (150);noTone (zumbador);

10

Page 11: PRIMER Proyecto alarma arduino

PROGRAMACIÓN POR PARTES:

En esta parte veremos la programación completa por partes y explicaremos brevemente su función.

1- Declaración de variables. Lo primero será declarar las variables y entradas que usaremos en el programa:

int verde = 13;int naranja = 12;int rojo = 11;int zumbador = 10;int pulsador_setup = 8;int pulsador_verde = 7;int pulsador_naranja = 6;int sensor_mov = 5;int analog = A0;int teclado = A1;int i, x, nivel, temporizador, inicio, temp2, nf, ultnum;int pass1 [6];int pass2 [6];int tmillis1, tmillis2;

2- La función setup: Aquí asignaremos las entradas o salidas y activaremos la pantalla LCD:

void setup(){ lcd.init (); lcd.backlight (); pinMode (verde, OUTPUT); pinMode (naranja, OUTPUT); pinMode (rojo, OUTPUT); pinMode (zumbador, OUTPUT); pinMode (pulsador_verde, INPUT); pinMode (pulsador_naranja, INPUT); pinMode (sensor_mov, INPUT); pinMode (analog, INPUT); Serial.begin (9600);}

11

Page 12: PRIMER Proyecto alarma arduino

3- La función modo_inicio: Esta función se activará siempre que se inicie el programa o cuando pulsemos el boton_inicio. Sirve para designar la contraseña (será siempre de 6 dígitos) que queremos usar para desactivar la alarma usando el teclado y para regular el tiempo de activación de ésta mediante un potenciómetro. Después de este modo solo podremos pasar al modo_verde:

void modo_inicio(){ lcd.clear (); digitalWrite (verde, LOW); digitalWrite (naranja, LOW); digitalWrite (rojo, LOW); lcd.print ("Introducir pass: "); lcd.setCursor (3,1); i=0;

do { int numero2= analogRead (teclado); if ((numero2 > 845) && (numero2 < 865)) { nf = 1; x ++; } else if ((numero2 > 635) && (numero2 < 655)) { nf = 2; x ++; } else if ((numero2 > 503) && (numero2 < 520)) { nf = 3; x ++; } else if ((numero2 > 785) && (numero2 < 805)) { nf = 4; x ++; } else if ((numero2 > 600) && (numero2 < 620)) { nf = 5;

12

Page 13: PRIMER Proyecto alarma arduino

x ++; } else if ((numero2 > 480) && (numero2 < 495)) { nf = 6; x ++; } else if ((numero2 > 720) && (numero2 < 740)) { nf = 7; x ++; } else if ((numero2 > 560) && (numero2 < 580)) { nf = 8; x ++; } else if ((numero2 > 460) && (numero2 < 475)) { nf = 9; x ++; } else if ((numero2 > 545) && (numero2 < 555)) { nf = 0; x ++; }

if (ultnum != nf) { x = 0; Serial.print ("tecla "); Serial.println (nf); lcd.print (nf); tone (zumbador, 4000); delay (100); noTone (zumbador); delay (400); ultnum = nf; pass1 [i] = nf; i++; }

13

Page 14: PRIMER Proyecto alarma arduino

else if ((ultnum == nf) && (x == 1)) { x = 0; Serial.print ("tecla "); Serial.println (nf); lcd.print (nf); tone (zumbador, 4000); delay (100); noTone (zumbador); delay (400); pass1 [i] = nf; i++; } } while (i != 6);

lcd.clear (); lcd.print ("la pass es: "); lcd.setCursor (3,1); lcd.print (pass1[0]); lcd.print (pass1[1]); lcd.print (pass1[2]); lcd.print (pass1[3]); lcd.print (pass1[4]); lcd.print (pass1[5]); delay (5000);

lcd.clear ();

do { temporizador = analogRead (analog); temporizador = map (temporizador, 0, 1023, 15, 4); Serial.println (temporizador); lcd.print ("Introducir temp:"); lcd.setCursor (3,1); lcd.print (temporizador); lcd.print (" segundos ");

} while (digitalRead (pulsador_verde) == LOW);

inicio = 1;

14

Page 15: PRIMER Proyecto alarma arduino

nivel = 1;}

15

Page 16: PRIMER Proyecto alarma arduino

4- La función modo_verde: Cuando se activa esta función se enciende el led verde y nos indica que la alarma está desactivada pero lista para usarse, con la contraseña y el tiempo de activación ya determinados. Desde esta función puede pasarse al modo_inicio o modo_naranja:

void modo_verde(){ lcd.clear(); lcd.print ("Alarma OFF"); digitalWrite (verde, HIGH); digitalWrite (naranja, LOW); digitalWrite (rojo, LOW); nivel = 1;}

5- La función modo_naranja: Al activarse esta función comienza la temporización para la activación de la alarma, mostrándonos en la LCD el tiempo restante y con el led naranja y el zumbador activándose de manera intermitente. Una vez esta temporización acabe el led naranja se quedará fijo y la alarma activa, pasando al modo_rojo si ésta detecta movimiento:

void modo_naranja(){ lcd.clear(); digitalWrite (verde, LOW); digitalWrite (naranja, LOW); digitalWrite (rojo, LOW);

temp2 = temporizador; for (int i=0; i<temporizador; i++) { lcd.print ("Tiempo restante:"); lcd.setCursor (3,1); lcd.print (temp2); lcd.print (" segundos "); tone (zumbador, 1000); digitalWrite (naranja, HIGH); delay (150); noTone (zumbador); digitalWrite (naranja, LOW); delay (850); temp2--;

16

Page 17: PRIMER Proyecto alarma arduino

} tone (zumbador, 2500); digitalWrite (naranja, HIGH); delay (150); noTone (zumbador); lcd.clear(); lcd.print ("Alarma ON"); nivel = 2;}

6- La función modo_rojo: Una vez se active este modo, el led rojo y el zumbador se activarán y quedarán fijos, con una pequeña intermitencia al principio. También se nos pedirá una contraseña de 6 dígitos, si introducimos la correcta el zumbador se desactivará y el programa pasará al modo_verde, si ésta es incorrecta el modo_rojo se volverá a activar otra vez:

void modo_rojo(){ lcd.clear (); digitalWrite (verde, LOW); digitalWrite (naranja, LOW); digitalWrite (rojo, HIGH); digitalWrite (zumbador, HIGH); delay (100); digitalWrite (zumbador, LOW); delay (100); digitalWrite (zumbador, HIGH); delay (100); digitalWrite (zumbador, LOW); delay (100); digitalWrite (zumbador, HIGH); lcd.print ("Introducir pass: "); lcd.setCursor (3,1); i=0;

do { int numero2= analogRead (teclado); if ((numero2 > 845) && (numero2 < 865)) { nf = 1; x ++;

17

Page 18: PRIMER Proyecto alarma arduino

} else if ((numero2 > 635) && (numero2 < 655)) { nf = 2; x ++; } else if ((numero2 > 503) && (numero2 < 520)) { nf = 3; x ++; } else if ((numero2 > 785) && (numero2 < 805)) { nf = 4; x ++; } else if ((numero2 > 600) && (numero2 < 620)) { nf = 5; x ++; } else if ((numero2 > 480) && (numero2 < 495)) { nf = 6; x ++; } else if ((numero2 > 720) && (numero2 < 740)) { nf = 7; x ++; } else if ((numero2 > 560) && (numero2 < 580)) { nf = 8; x ++; } else if ((numero2 > 460) && (numero2 < 475)) { nf = 9; x ++; } else if ((numero2 > 545) && (numero2 < 555)) {

18

Page 19: PRIMER Proyecto alarma arduino

nf = 0; x ++; }

if (ultnum != nf) { x = 0; Serial.print ("tecla "); Serial.println (nf); lcd.print (nf); delay (500); ultnum = nf; pass2 [i] = nf; i++; }

else if ((ultnum == nf) && (x == 1)) { x = 0; Serial.print ("tecla "); Serial.println (nf); lcd.print (nf); delay (500); pass2 [i] = nf; i++; } } while (i < 6);

boolean correcta = 1; for (i=0; i < 6; i++) { if (pass1[i] != pass2[i]) { correcta = 0; } }

if (correcta == 1) { Serial.println ("Pass CORRECTA. "); lcd.clear ();

19

Page 20: PRIMER Proyecto alarma arduino

lcd.print ("Pass CORRECTA. "); digitalWrite (zumbador, LOW); delay(5000); modo_verde(); } else { Serial.println ("Pass INCORRECTA. "); lcd.clear (); lcd.print ("Pass INCORRECTA. "); delay (5000); modo_rojo(); } nivel = 0;}

7- La función loop: Es la última parte y el bucle principal del programa. En este caso será la función encargada de mover el programa por los distintos modos del sistema de alarma. Para ello se usan los pulsadores y unas variables (“inicio” y “nivel”) que irán cambiando según se activen los distintos modos:

void loop(){ if ((digitalRead (pulsador_inicio) == HIGH) || (inicio == 0)) { modo_inicio(); modo_verde(); }

else if (digitalRead (pulsador_verde) == HIGH) { modo_verde(); }

else if ((digitalRead (pulsador_naranja) == HIGH) && ((nivel == 0) || (nivel == 1))) { modo_naranja(); }

else if ((digitalRead (sensor_mov) == HIGH) && (nivel == 2)) {

20

Page 21: PRIMER Proyecto alarma arduino

modo_rojo(); }}

21

Page 22: PRIMER Proyecto alarma arduino

- Presupuesto:

Placa Arduino UNO: 27 €Teclado: 6 €Pantalla LCD: 12 €Sensor de movimiento: 9 €Potenciómetro: 2 €Zumbador: 1 €4 leds: 4 €15 resistencias: 0,45 €

22