Vous êtes sur la page 1sur 15

|

INDICE
1.-OBJETIVO………………………………………………………………………… 2
2.-JUSTIFICACIÓN………………………………………………………………… 2
3.-DESARROLLO DEL PROYECTO…………………………………………... 3
3.1.-Materiales necesarios………………………………………………… 3
3.2.-Montaje Prototipo……………………………………………………… 4
3.3.-Programación…………………………………………………………….. 6
3.4.-Montaje de maqueta…………………………………………………. 11

4.-PRESUPUESTO…………………………………………………………………. 12
5.-NOTACIÓN BIBLIOGRAFICA……………………………………………….14

1
1.-OBJETIVO
El objetivo de este proyecto es un sistema de seguridad de una caja fuerte controlado
por una pantalla LCD y un teclado matricial 4x4.
El proyecto presenta un menú por pantalla desde el cual debemos introducir la
contraseña para activar el servo que nos permite abrir y cerrar la puerta.
A través de este menú podemos visualizar mediante la pantalla controlada por el
teclado el estado de nuestro sensor de temperatura, sensor de vibración, comprobar y
borrar datos introducidos y desbloquear el programa, que se bloqueara al introducir 3
veces de manera incorrecta la contraseña.

2.-JUSTIFICACIÓN
La principal justificación es crear un sistema de seguridad eficaz, que bloque todo el
programa al cometer un mínimo de errores y que nos alerte cuando la caja fuerte sea
sometida a vibraciones altas o altas temperaturas.

2
3.-DESARROLLO DEL PROYECTO
3.1.-Materiales necesarios
-Arduino Uno SMD
- Modulo LCD I2C Serie 2 x 16.
-Teclado matricial 4 x 4.
- Sensor de Vibración.

- Servomotor.
-Zumbador.
- 3 LEDs de 5 mm.
-3 resistencias de 220 Ω, 470 Ω y 10k.
-Placa Protoboard.
-Cables conectores.
-Sensor de temperatura.
-Caja de madera.

3
3.2.-Montaje Prototipo
Para el montaje de nuestro prototipo hemos utilizado Arduino UNO SMD, es una
modificación del Arduino UNO cuya principal diferencia es el tipo de encapsulado que
ofrece.
El esquema del montaje sería el siguiente:

En dicho esquema se pueden aprecia todas las conexiones realizadas para cada uno de
los LEDs, el sensor de temperatura (LM35), el zumbador, el servo, el sensor de
vibarción y el tecaldo matricial.

4
Las siguientes fotos muestran el montaje real:

5
3.3.-Programación.
Hemos realizado la programación de nuestro prototipo con el programa arduino
1.0.1 que podemos descargar de la propia web de arduino.
Hemos utilizado números libreiras:
.-Password.h. Necesaria para establecer una contraseña e utilizar diveras funciones
incluidas en ella.
.-Keypad.h. Es la librería para el teclado matriciail.
.-Wire.h. Permite comunicar con dispositivos I2C.
.-LiquidCrystal_I2C.h. Es la librería de nuestro LCD.
.-Servo.h. Librería utilizada para el funcionamiento del servomotor.

El programa se basa principalmente en un menú mostrado por el LCD a través del cual
podemos visualizar el estado de nuestros sensores así como la activación de nuestro
servo mediante contraseña.
Las teclas numéricas se reservan únicamente para los dígitos de la contraseña.
La tecla F nos muestra por pantalla la temperatura a la que se encuentra la caja fuerte.
La tecla E nos muestra el valor de vibración que tenemos actualmente.
La tecla C nos permite comprobar la contraseña introducida, si fuera correcta nos
abriría la puerta mediante el servo, si fuera incorrecta nos pediría una nueva
introducción sumando un error a la cuenta. Si fallamos tres veces el sistema se
bloquearía, nos pediría una contraseña de desbloqueo que debemos de comprobar
con la tecla A.
La tecla D nos permitiría borrar los dígitos introducidos en el caso de que nos
equivocáramos.
La tecla C nos permite cerrar la puerta una vez abierta.
Si se sobrepasa la temperatura límite o se comete error en la introducción de la
contraseña, el diodo LED rojo y el zumbador se activarían.
Si los niveles de vibración sobrepasas el límite establecido se encendería el LED
amarillo.
Si introducimos la contraseña correcta y activamos el Servo, se enciende el LED verde.

6
Visualización del programa:

#include <Password.h> void setup(){


#include <Keypad.h>
#include <Wire.h> Serial.begin(9600);
#include <LiquidCrystal_I2C.h> lcd.init();
#include <Servo.h> lcd.backlight();
LiquidCrystal_I2C lcd(0x27,16,2); servo1.attach(12);
posicion = 800;
Password password = Password( "1234" posicion = map(posicion, 0, 1023, 0,
); 179);
servo1.write(posicion); delay(150);
int LM35= A0; pinMode(led, OUTPUT);
int TempH = 28 ; pinMode(pirPin, INPUT);
float Temp; digitalWrite(pirPin, LOW);
int Entrada=1; pinMode(led2,OUTPUT);
float Nivel; pinMode(led3,OUTPUT);
int Lim=1000;
int salida=13; keypad.addEventListener(keypadEvent);
Servo servo1; char key = keypad.getKey();
int posicion; }
int led = 13;
int led2= 3; void loop()
int led3=2; {
int posi=0;
int i=0; if(errores>=3){
int pirPin = 7; password.set("4321");
int p; lcd.setCursor(0,0);
int x; lcd.print("Bloqueado");
int errores; char key = keypad.getKey();
const byte ROWS = 4;
const byte COLS = 4; if (key=='1' || key=='2' || key=='3' ||
// Define the Keymap key=='4' || key=='5' || key=='6' ||
char keys[ROWS][COLS] = { key=='7' || key=='8' || key=='9' ||
{'1','2','3','F'}, key=='0'){
{'4','5','6','E'}, lcd.setCursor(5+i,1);
{'7','8','9','D'}, lcd.print("*");
{'A','0','B','*'} i++;
}; }
else
byte rowPins[ROWS] = { 7,6,5,4 }; if (key=='F' || key=='E' ||key=='D' ||
byte colPins[COLS] = { 11,10,9,8, }; key=='C'|| key=='B')
{

7
lcd.print("");
Keypad keypad = Keypad( lcd.clear();
makeKeymap(keys), rowPins, colPins, }
ROWS, COLS ); }

else switch (keypad.getState()){


{ case PRESSED:
switch (eKey){
case 'A':
Temp=(5*analogRead(A0)*100/1023.0); if (password.evaluate()){
Nivel = analogRead(Entrada); lcd.clear();
lcd.setCursor(0,0); lcd.setCursor(0,0);
if(Temp>TempH) digitalWrite(led2, HIGH);
{ delay(500);
digitalWrite(salida,HIGH); digitalWrite(led2,LOW);
delay(1000); delay(500);
digitalWrite(salida,LOW); digitalWrite(led2, HIGH);
} delay(500);
if(Nivel<Lim) digitalWrite(led2,LOW);
{ delay(500);
lcd.print("Vibracion lcd.print("Desbloqueado");
alta!!");digitalWrite(led3,HIGH); delay(500);
delay(1000); password.set("1234");
digitalWrite(led3,LOW); lcd.clear();
password.reset(); errores=0;
i=0; i=0;
lcd.clear(); password.reset();
}
} else
{
lcd.setCursor(0,0); lcd.clear();
lcd.print("Password:"); lcd.setCursor(0,0);
char key = keypad.getKey(); digitalWrite(led, HIGH);
if (key=='1' || key=='2' || key=='3' || delay(500);
key=='4' || key=='5' || key=='6' || digitalWrite(led,LOW);
key=='7' || key=='8' || key=='9' || delay(500);
key=='0') { digitalWrite(led, HIGH);
lcd.setCursor(5+i,1); delay(500);
lcd.print("*"); digitalWrite(led,LOW);
Serial.println("*"); delay(500);
i++; lcd.print("Error");
} delay(500);
} lcd.clear();
} i=0;
password.reset();
}
break;

8
case 'B':
Serial.println(posicion);
void keypadEvent(KeypadEvent eKey){ if ((posicion<150)&&(posicion>30)){
case 'D':
lcd.clear();
lcd.print("Puerta cerrada"); lcd.clear();
delay(750); lcd.print("Borrando");
lcd.clear(); for(int i = 0; i < 4; i++){
} lcd.print(".");
delay(750);
if(posicion<30){ }
lcd.setCursor(0,0); i=0;
lcd.print("Cerrando"); password.reset();
for(int i = 0; i < 4; i++){ lcd.clear();
lcd.print("."); break;
delay(750); default:
} password.append(eKey);
servo1.attach(12); }
posicion = 800; }
posicion = map(posicion, 0, 1023, 0,
179); }
servo1.write(posicion); delay(150);
lcd.clear(); void checkPassword(){
if (password.evaluate()){

} lcd.clear();
lcd.clear(); lcd.print("Comprobando");
i=0; for(int i = 0; i < 4; i++){
password.reset(); break; lcd.print(".");
case 'E': delay(750);
lcd.setCursor(0,0); }
lcd.print("Vibracion:"); lcd.setCursor(5,1);
lcd.print(Nivel); lcd.clear();
delay(1000); lcd.print("Password");
i=0; lcd.setCursor(5,1);
lcd.clear(); lcd.print("correcta");
break; lcd.setCursor(16,1);
case 'F': digitalWrite(led2, HIGH);
delay(1000);
Temp=(5*analogRead(A0)*100/1023.0); digitalWrite(led2,LOW);
lcd.setCursor(0,0); lcd.clear();
lcd.print("Temperatura:"); posicion = 150;
lcd.print(Temp); posicion = map(posicion, 0, 1023, 0,
delay(1000); 179);
lcd.clear();

9
i=0; lcd.print("Abriendo");
break;
case '*':
checkPassword();i=0; break; for(int i = 0; i < 4; i++){
servo1.write(posicion); delay(2000); lcd.print(".");
lcd.clear(); delay(750);}
lcd.print("Puerta abierta");
delay(2000);
lcd.clear();
errores=0;

}
else{

lcd.clear();
lcd.print("Comprobando");
for(int i = 0; i < 4; i++){
lcd.print(".");
delay(750);
}

lcd.clear();

digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led,LOW);
lcd.print("Incorrecto");
lcd.setCursor(0,1);
lcd.print("Prueba otra vez");
lcd.setCursor(0,1);
delay(1000);
errores++;
password.reset();
lcd.clear();
}

10
3.4.-Montaje de maqueta
Todo el prototipo se ha montado dentro de una caja de madera que simularía la forma
de una caja fuerte.
El montaje ha sido sencillo, se ha cortado la tapa de la caja a medida, se han hecho los
agujeros necesario para los LEDs y un pestillo que junto con el servo y la introducción
de la contraseña abriría o no la puerta de la caja fuerte.

11
4.-PRESUPUESTO
Producto Nombre Referencia Unidade Precio Total
s Unida
d
Arduino Uno Código: Arduino- 26,56€ 26,56€
SMD Uno-DMS

1
Página:
www.dieltron.com

Modulo LCD Código: Q00615043 17,26€ 17,26€


I2C Serie 2 x 16
Página:
www.b2cqshop.com 1

Teclado Código: Q04915190 1 3,30€ 3,30€


matricial 4 x 4
Página:
www.b2cqshop.com

Sensor de Código: DFR0027 1 3,53 € 3,53 €


Vibración
Pag:
www.dfrobot.com

Micro Servo Código: 1 4,60€ 4,60€


Tower Pro E502
SG90
9grs Página:
www.todomodel.es

12
35.085 Código: 1 1,17€ 1,17€
Zumbador de 644-35.085
Electro DH
Página:
www.dieltron.com

LED 5mm Código: 3 0,17€ 0,51€


10Kmcd 113-12.675-5RC10K
Transparente
12.675/5/R/C/ Página:
10K www.dieltron.com

Resistencias Página: 3 0,17 0,51€


www.dieltron.com
220Ω,

10k Ω,470 Ω

1/4W
Placa Código: 1 6,28€ 6,28€
Protoboard y Q00915023
cables de
conexión. Página:
www.b2cqshop.com

LM35 Sensor Código: 1 2,67€


de Q02315076 2,67€
Temperatura
Página:
www.b2cqshop.com

Caja de Código: 1 3,5€ 3,5€


madera 734

Página:
www.cajasestuche
smadera.com
TOTAL= 69,89 €

13
5.-NOTACIÓN BIBLIOGRAFICA
.-www.arduinco.cc
.-www.dfrobots.com
.-www.bricogeek.com

14