Alarma de seguridad con arduino. Grupo 20 Móstoles
ALARMA DE SEGURIDAD CON ARDUINO
SISTEMAS EMPOTRADOS Y DE TIEMPO REAL
GRUPO 20:
FRANCISCO JAVIER HIGUERA MONTERO
MÓNICA RODRÍGUEZ PÉREZ
FÉLIX MUÑUMEL PIAYA
Índice:
1. Introducción.
2. Materiales.
3. Esquema de montaje.
4. Funcionamiento.
4.1. Teclado matricial 4×4.
4.2. Pantalla LCD.
4.3. Buzzer.
4.4. Sensor ultrasónico.
4.5. LEDs.
5. Problemas y mejoras.
5.1. Problemas.
5.2. Mejoras.
6. Código.
6.1. Declaración de variables.
6.2. void setup().
6.3. void loop().
6.4. long getDistancia().
7. Video demostrativo.
1. Introducción
En la siguiente memoria, vamos a describir el sistema de seguridad que hemos realizado
basado en Arduino e inspirado en una alarma convencional del hogar.
basado en Arduino e inspirado en una alarma convencional del hogar.
Después de analizar varios proyectos, decidimos quedarnos con este en concreto
después de pasar por otros como: una batería solar para el teléfono y un brazo robótico
para diseño gráfico.
después de pasar por otros como: una batería solar para el teléfono y un brazo robótico
para diseño gráfico.
El primero no acababa de convencernos debido a que no presentaba una gran variedad
de funcionalidades y siguiendo el consejo del profesor decidimos descartarlo.
de funcionalidades y siguiendo el consejo del profesor decidimos descartarlo.
El segundo lo abandonamos debido a que presentaba una serie de dificultades
que no supimos afrontar en un principio como el diseño de una placa personalizada.
que no supimos afrontar en un principio como el diseño de una placa personalizada.
En este proyecto hemos hecho uso de Arduino Mega debido a que desde el principio
queríamos afrontar un desarrollo que tuviera un número considerable
de elementos externos, como la pantalla LCD o el Keypad por nombrar algunos,
por lo que era fundamental por la necesidad de tener más pines.
queríamos afrontar un desarrollo que tuviera un número considerable
de elementos externos, como la pantalla LCD o el Keypad por nombrar algunos,
por lo que era fundamental por la necesidad de tener más pines.
2. Materiales.
MATERIALES |
IMAGEN |
PLACA ARDUINO MEGA 2560 |
|
TECLADO MATRICIAL 4×4 |
|
PANTALLA LCD |
|
BUZZER |
|
SENSOR ULTRASÓNICO |
|
PROTOBOARD |
|
CABLE MACHO-HEMBRA |
|
CABLE MACHO-MACHO |
|
LEDS |
|
CAJA CONEXIONES |
3. Esquema de montaje.
4. Funcionamiento.
En esta sección, explicamos el funcionamiento de cada uno de los componentes de
nuestro proyecto.
nuestro proyecto.
4.1. Teclado matricial 4×4.
La función principal del teclado matricial 4×4, es interactuar con el Arduino
mediante sus botones. Cada botón tiene una función.
mediante sus botones. Cada botón tiene una función.
Mediante los números se puede introducir la contraseña, para así poder desactivar
la alarma y también se puede introducir la nueva contraseña.
Para utilizar el teclado, es necesario introducir la librería Keypad.h
y crear una matriz de char para inicializar el teclado:
la alarma y también se puede introducir la nueva contraseña.
Para utilizar el teclado, es necesario introducir la librería Keypad.h
y crear una matriz de char para inicializar el teclado:
//Columnas y Filas del Keypad
const byte ROWS = 4;
const byte COLS = 4;
char tecla;
//Keypad
char keyMap [ROWS][COLS] = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
Después de inicializar el teclado, lo que tuvimos que hacer fue instanciarlo con el siguiente
código:
código:
Keypad teclado = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS,
COLS);
4.2 Pantalla LCD.
La pantalla LCD, es la encargada de mostrarnos en que parte del proceso nos
encontramos, también muestra por pantalla las opciones que vamos seleccionando por
teclado. Para utilizar la pantalla LCD es necesario introducir la librería LiquidCrystal.h
y se deben introducir las entradas que van a ser distintas con respecto a las iniciales
de la librería.
encontramos, también muestra por pantalla las opciones que vamos seleccionando por
teclado. Para utilizar la pantalla LCD es necesario introducir la librería LiquidCrystal.h
y se deben introducir las entradas que van a ser distintas con respecto a las iniciales
de la librería.
Declaración de variables que utilizan Pin:
int RS = 2; //Register Selector
int E = 3; //Enable
int D4 = 4; //Datos 1
int D5 = 5; //Datos 2
int D6 = 6; //Datos 3
int D7 = 7; //Datos 4
int V0 = 12; //Contraste
Declaración de Variables que no utilizan Pin:
VSS: Ground/Negativo
VDD: Positivo 5V (Resistencia antes)
Ánodo: Positivo 5V
Cátodo: Ground/Negativo
Además, solo será necesario utilizar 4 de las 8 entradas de datos disponibles en
la pantalla LCD debido al modelo de pantalla utilizado.
la pantalla LCD debido al modelo de pantalla utilizado.
4.3. Buzzer.
Lo primero que se debe hacer es definir donde se ha conectado, e inicializarlo en
el setup ():
el setup ():
const int buzzer = 8;
pinMode (buzzer, OUTPUT);
Gracias al buzzer podremos emitir sonidos mediante:
tone (buzzer, 700, 100);
En este ejemplo el valor “700” es la frecuencia en Hz y el 100 es la duración en
milisegundos.
milisegundos.
4.4. Sensor ultrasónico.
El sensor ultrasónico no necesita ninguna librería para su uso, lo único que se necesita
hacer es inicializar los pines del echo (Receptor) y del trigger (Emisor).
hacer es inicializar los pines del echo (Receptor) y del trigger (Emisor).
pinMode (trigpPin, OUTPUT);
pinMode (echopPIN, INPUT);
En la parte del loop (), se debe inicializar la distancia a la que se desea que la alarma
se active. En este caso hemos creado una función que se invoca dentro de loop ();
se active. En este caso hemos creado una función que se invoca dentro de loop ();
long getDistancia(){
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
delayMicroseconds(2);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
duracion = pulseIn(echoPin, HIGH);
distancia = duracion * 0.034/2;
distancia = duracion * 0.034/2;
return distancia;
}
4.5. LEDs.
Para el uso de LEDs no es necesario incluir ninguna librería,
lo único que hay que hacer es inicializar los pines donde se van a localizar,
esto se hace en la parte del setup ().
lo único que hay que hacer es inicializar los pines donde se van a localizar,
esto se hace en la parte del setup ().
pinMode (ledVerde, OUTPUT);
pinMode (ledRojo1, OUTPUT);
pinMode (ledRojo2, OUTPUT);
pinMode (ledRojo3, OUTPUT);
En el loop (), debemos de programar cuando queremos que se active cada led.
En este caso hemos implementado que el led rojo se active con cada segundo de la cuenta
atrás y se active cuando introduces la contraseña incorrecta.
El led verde se encenderá cuando se introduzca la contraseña correcta.
En estos dos últimos casos hemos introducido un delay de 2000 que es la duración de
2 segundos que se mantendrá la luz encendida.
En este caso hemos implementado que el led rojo se active con cada segundo de la cuenta
atrás y se active cuando introduces la contraseña incorrecta.
El led verde se encenderá cuando se introduzca la contraseña correcta.
En estos dos últimos casos hemos introducido un delay de 2000 que es la duración de
2 segundos que se mantendrá la luz encendida.
5. Problemas y mejoras.
5.1. Problemas.
A lo largo del desarrollo del proyecto hemos encontrado varios problemas.
La parte del desarrollo que más complicaciones nos ha presentado ha sido la inclusión
de la pantalla LCD, debido al mal funcionamiento en algunas ocasiones por no poder
representar de forma correcta el mensaje que queríamos transmitir. Este problema no lo
hemos podido solucionar completamente, pero hemos podido reducir considerablemente
el índice de errores.
La parte del desarrollo que más complicaciones nos ha presentado ha sido la inclusión
de la pantalla LCD, debido al mal funcionamiento en algunas ocasiones por no poder
representar de forma correcta el mensaje que queríamos transmitir. Este problema no lo
hemos podido solucionar completamente, pero hemos podido reducir considerablemente
el índice de errores.
También, hemos tenido problemas en la parte del desarrollo del software, principalmente
con la implementación del comando lcd.clear(), ya que en algunas ocasiones no cumplía
su función de forma correcta al no borrar la información cuando se precisaba.
con la implementación del comando lcd.clear(), ya que en algunas ocasiones no cumplía
su función de forma correcta al no borrar la información cuando se precisaba.
Otro pequeño error, fue a la hora de implementar el código del teclado porque
no lo declaramos de forma correcta y únicamente funcionaban los números.
no lo declaramos de forma correcta y únicamente funcionaban los números.
5.2. Mejoras.
Como posible mejora vemos muy factible introducir cualquier sistema biométrico,
pero este caso vemos una opción muy adecuado la inclusión del reconocimiento
de huella dactilar, debido a su facilidad y extensión de uso y la fácil implementación
en el diseño en sí de la alarma.
pero este caso vemos una opción muy adecuado la inclusión del reconocimiento
de huella dactilar, debido a su facilidad y extensión de uso y la fácil implementación
en el diseño en sí de la alarma.