Sunteți pe pagina 1din 19

PROYECTO DE

ELECTRNICA

Sistema de
Alarma
1
Francisco Javier Lpez Alcarria

2
NDICE

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

- Justificacin:........................................................................................................................3

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

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

B) Programacin:..................................................................................................................6

PROGRAMACIN POR PARTES:...........................................................................................6

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

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

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

PROGRAMACIN POR PARTES:...........................................................................................9

1- Declaracin de variables..............................................................................................9

2- La funcin setup:..........................................................................................................9

3- La funcin modo_inicio:.............................................................................................10

4- La funcin modo_verde:............................................................................................13

5- La funcin modo_naranja:.........................................................................................13

6- La funcin modo_rojo:...............................................................................................14

7- La funcin loop:.........................................................................................................17

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

3
- 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 contrasea (la cual designaremos cuando arranque el
programa), de una temporizacin para la activacin de la alarma, de un dispositivo de sonido
como un zumbador y de una pantalla LCD en la que se nos mostrar la informacin necesaria
para interactuar con el programa.

- Justificacin:
Realizar un sistema de alarma barato, fcil de usar y con una contrasea 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 programacin 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 potencimetro.
- 4 leds, uno de ellos para comprobar que el sensor funciona correctamente.
- Un total de 15 resistencias

4
Para el montaje del circuito podemos seguir el siguiente esquema:

Nuestra pantalla LCD slo tiene 4 patillas: VCC, GND, SCL y SDA. La patilla SCL la
conectaremos a la entrada analgica 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
El teclado requiere de 8 patillas digitales del arduino normalmente, pero podemos
utilizar solo una entrada analgica, si usamos un divisor de tensin para cada tecla y un
mtodo en la programacin que explicaremos ms tarde, ahorrando un gran nmero de
patillas, sin las que nos sera imposible realizar el proyecto. Lo conectaremos de la siguiente
manera:

En la parte de programacin 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 programacin.

6
B) Programacin:

Este apartado lo dividiremos en varios apartados para explicarlo lo ms fcilmente posible.


Primero veremos la programacin para controlar algunos componentes, como la pantalla
LCD, el teclado y el zumbador:

PROGRAMACIN POR PARTES:

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

Despus, en la funcin void setup () ponemos esto:

Con esto ya podremos usar la LCD, para ello se usarn 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 solaparn los dgitos.

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).

7
- El teclado:
Para poder conectar el teclado al Arduino usando slo una entrada analgica, lo
haremos con el divisor de tensin que hemos explicado anteriormente. De esta
manera cada tecla nos enviar una seal analgica distinta de las otras, por lo tanto
mediante los rangos de la seal podremos asignar cada valor a un nmero 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;
x ++;
}
else if ((numero2 > 560) && (numero2 < 580))
{
nf = 8;
x ++;
}

8
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 nmeros, as que si queremos aadir el resto de
teclas de nuestro teclado, comprobaremos los rangos de seal que puede dar cada
tecla y lo aadiremos 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. Tambin podemos controlar su intermitencia con
el uso de la funcin delay(). Ejemplo:

tone (zumbador, 1000); // para activar el zumbador y su tono


delay (150);
noTone (zumbador); // para desactivar el zumbador
tone (zumbador, 1000);
delay (150);
noTone (zumbador);

9
PROGRAMACIN POR PARTES:

En esta parte veremos la programacin completa por partes y explicaremos


brevemente su funcin.

1- Declaracin 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 funcin 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);
}

10
3- La funcin modo_inicio:
Esta funcin se activar siempre que se inicie el programa o cuando pulsemos el
boton_inicio. Sirve para designar la contrasea (ser siempre de 6 dgitos) que
queremos usar para desactivar la alarma usando el teclado y para regular el tiempo de
activacin de sta mediante un potencimetro. Despus 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;
x ++;
}
else if ((numero2 > 480) && (numero2 < 495))
{
nf = 6;
x ++;
}
else if ((numero2 > 720) && (numero2 < 740))
11
{
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++;
}

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);

12
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;
nivel = 1;
}

13
4- La funcin modo_verde:
Cuando se activa esta funcin se enciende el led verde y nos indica que la alarma est
desactivada pero lista para usarse, con la contrasea y el tiempo de activacin ya
determinados. Desde esta funcin 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 funcin modo_naranja:
Al activarse esta funcin comienza la temporizacin para la activacin de la alarma,
mostrndonos en la LCD el tiempo restante y con el led naranja y el zumbador
activndose de manera intermitente. Una vez esta temporizacin 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--;
}
tone (zumbador, 2500);
digitalWrite (naranja, HIGH);
delay (150);
noTone (zumbador);
lcd.clear();
lcd.print ("Alarma ON");
nivel = 2;
14
}

6- La funcin modo_rojo:
Una vez se active este modo, el led rojo y el zumbador se activarn y quedarn fijos,
con una pequea intermitencia al principio. Tambin se nos pedir una contrasea de
6 dgitos, 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 ++;
}
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 ++;
}
15
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))
{
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);

16
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 ();
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 funcin loop:
Es la ltima parte y el bucle principal del programa. En este caso ser la funcin
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 irn cambiando
segn se activen los distintos modos:

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

else if (digitalRead (pulsador_verde) == HIGH)


17
{
modo_verde();
}

else if ((digitalRead (pulsador_naranja) == HIGH) && ((nivel == 0) || (nivel == 1)))


{
modo_naranja();
}

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


{
modo_rojo();
}
}

18
- Presupuesto:

Placa Arduino UNO: 27


Teclado: 6
Pantalla LCD: 12
Sensor de movimiento: 9
Potencimetro: 2
Zumbador: 1
4 leds: 4
15 resistencias: 0,45

19

S-ar putea să vă placă și