2012
Proyecto Arduino SISTEMA SEGURIDAD CAJA FUERTE
José del Rey López 2ºSEL | II.E.S Universidad Laboral
INDICE 1.-OBJETIVO………………………………………………………………………… 2 2.-JUSTIFICACIÓN………………………………………………………………… 2 3.-DESARROLLO DEL PROYECTO…………………………………………... 3 3.1.-Materiales necesarios………………………………………………… 3 3.2.-Montaje Protopo……………………………………………………… 4 3.3.-Programación…………………………………………………………….. 6 3.4.-Montaje de maqueta…………………………………………………. 11
4.-PRESUPUESTO…………………………………………………………………. 12 5.-NOTACIÓN BIBLIOGRAFICA……………………………………………….14
1
1.-OBJETIVO El objevo 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 acvar 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 juscación es crear un sistema de seguridad ecaz, que bloque todo el programa al cometer un mínimo de errores y que nos alerte cuando la caja fuerte sea someda 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 Protopo Para el montaje de nuestro protopo hemos ulizado Arduino UNO SMD, es una modicación del Arduino UNO cuya principal diferencia es el po 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 protopo con el programa arduino 1.0.1 que podemos descargar de la propia web de arduino. Hemos ulizado números libreiras:
.-Password.h. Necesaria para establecer una contraseña e ulizar diveras funciones incluidas en ella.
.-Keypad.h. Es la librería para el teclado matriciail. .-Wire.h. Permite comunicar con disposivos I2C. .-LiquidCrystal_I2C.h. Es la librería de nuestro LCD. .-Servo.h. Librería ulizada 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 acvació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 permirí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 acvarí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 acvamos el Servo, se enciende el LED verde.
6
Visualización del programa:
#include
#include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); Password password = Password( "1234" ); int LM35= A0; int TempH = 28 ; oat Temp; int Entrada=1; oat Nivel; int Lim=1000; int salida=13; Servo servo1; int posicion; int led = 13; int led2= 3; int led3=2; int posi=0; int i=0; int pirPin = 7; int p; int x; int errores; const byte ROWS = 4; const byte COLS = 4; // Dene the Keymap char keys*ROWS+*COLS+ = '1','2','3','F'-, '4','5','6','E'-, '7','8','9','D'-, 'A','0','B',''-; byte rowPins*ROWS+ = 7,6,5,4 -; byte colPins*COLS+ = 11,10,9,8, -;
void setup() Serial.begin(9600); lcd.init(); lcd.backlight(); servo1.aach(12); posicion = 800; posicion = map(posicion, 0, 1023, 0, 179); servo1.write(posicion); delay(150); pinMode(led, OUTPUT); pinMode(pirPin, INPUT); digitalWrite(pirPin, LOW); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); keypad.addEventListener(keypadEvent); char key = keypad.getKey(); void loop() if(errores>=3) password.set("4321"); lcd.setCursor(0,0); lcd.print("Bloqueado"); char key = keypad.getKey(); if (key=='1' || key=='2' || key=='3' || key=='4' || key=='5' || key=='6' || key=='7' || key=='8' || key=='9' || key=='0') lcd.setCursor(5i,1); lcd.print(""); i; else if (key=='F' || key=='E' ||key=='D' || key=='C'|| key=='B') lcd.print(""); 7
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); else Temp=(5analogRead(A0)100/1023.0); Nivel = analogRead(Entrada); lcd.setCursor(0,0); if(Temp>TempH) digitalWrite(salida,HIGH); delay(1000); digitalWrite(salida,LOW); if(Nivel
lcd.clear(); switch (keypad.getState()) case PRESSED: switch (eKey) case 'A': if (password.evaluate()) lcd.clear(); lcd.setCursor(0,0); digitalWrite(led2, HIGH); delay(500); digitalWrite(led2,LOW); delay(500); digitalWrite(led2, HIGH); delay(500); digitalWrite(led2,LOW); delay(500); lcd.print("Desbloqueado"); delay(500); password.set("1234"); lcd.clear(); errores=0; i=0; password.reset(); else lcd.clear(); lcd.setCursor(0,0); digitalWrite(led, HIGH); delay(500); digitalWrite(led,LOW); delay(500); digitalWrite(led, HIGH); delay(500); digitalWrite(led,LOW); delay(500); lcd.print("Error"); delay(500); lcd.clear(); i=0; password.reset(); break;
8
void keypadEvent(KeypadEvent eKey) lcd.clear(); lcd.print("Puerta cerrada"); delay(750); lcd.clear(); if(posicion<30) lcd.setCursor(0,0); lcd.print("Cerrando"); for(int i = 0; i < 4; i) lcd.print("."); delay(750); servo1.aach(12); posicion = 800; posicion = map(posicion, 0, 1023, 0, 179); servo1.write(posicion); delay(150); lcd.clear();
lcd.clear(); i=0; password.reset(); break; case 'E': lcd.setCursor(0,0); lcd.print("Vibracion:"); lcd.print(Nivel); delay(1000); i=0; lcd.clear(); break; case 'F': Temp=(5analogRead(A0)100/1023.0); lcd.setCursor(0,0); lcd.print("Temperatura:"); lcd.print(Temp); delay(1000); lcd.clear(); i=0; break;
case 'B': Serial.println(posicion); if ((posicion<150)&&(posicion>30)) case 'D': lcd.clear(); lcd.print("Borrando"); for(int i = 0; i < 4; i) lcd.print("."); delay(750); i=0; password.reset(); lcd.clear(); break; default: password.append(eKey); void checkPassword() if (password.evaluate()) lcd.clear(); lcd.print("Comprobando"); for(int i = 0; i < 4; i) lcd.print("."); delay(750); lcd.setCursor(5,1); lcd.clear(); lcd.print("Password"); lcd.setCursor(5,1); lcd.print("correcta"); lcd.setCursor(16,1); digitalWrite(led2, HIGH); delay(1000); digitalWrite(led2,LOW); lcd.clear(); posicion = 150; posicion = map(posicion, 0, 1023, 0, 179); lcd.print("Abriendo");
9
case '': checkPassword();i=0; break; servo1.write(posicion); delay(2000); lcd.clear(); lcd.print("Puerta abierta"); delay(2000); lcd.clear(); errores=0;
for(int i = 0; i < 4; i) lcd.print("."); delay(750);-
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 protopo 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 pesllo 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
Arduino Uno SMD
Código: ArduinoUno-DMS
Página: www.dieltron.com
Modulo LCD I2C Serie 2 x 16
Teclado matricial 4 x 4
Unidade s
Precio Unida d
Total
26,56 €
26,56 €
17,26 €
17,26 €
1
Código: Q00615043 Página: www.b2cqshop.com
1
Código: Q04915190
1
3,30 €
3,30 €
1
3,53 €
3,53 €
1
4,60 €
4,60 €
Página: www.b2cqshop.com
Sensor de Vibración
Código: DFR0027 Pag: www.dfrobot.com
Micro Servo Tower Pro SG90 9grs
Código: E502 Página: www.todomodel.es
12
35.085 Zumbador de Electro DH
Código: 644-35.085
1
1,17 €
1,17 €
3
0,17 €
0,51 €
Página: www.dieltron.com
LED 5mm 10Kmcd Transparente 12.675/5/R/C/ 10K
Código: 113-12.675-5RC10K Página: www.dieltron.com
Resistencias 220Ω, 10k Ω,470 Ω 1/4W
Página: www.dieltron.com
3
0,17
0,51€
Placa Protoboard y cables de conexión.
Código: Q00915023
1
6,28 €
6,28 €
1
2,67 €
Página: www.b2cqshop.com
LM35 Sensor de Temperatura
Código: Q02315076
2,67 €
Página: www.b2cqshop.com
Caja de madera
Código: 734
1
3,5 €
3,5 €
Página: www.cajasestuches madera.com
TOTAL=
69,89 €
13
5.-NOTACIÓN BIBLIOGRAFICA .-www.arduinco.cc .-www.dfrobots.com .-www.bricogeek.com
14