You are on page 1of 15

2012

Proyecto
Arduino
SISTEMA SEGURIDAD CAJA FUERTE

José del Rey López
2ºSEL | II.E.S Universidad Laboral

1.4.-OBJETIVO………………………………………………………………………… 2 2.-Montaje Prototipo……………………………………………………… 4 3. 11 4..-JUSTIFICACIÓN………………………………………………………………… 2 3.2. 12 5.INDICE 1.-NOTACIÓN BIBLIOGRAFICA………………………………………………. 3 3.-Montaje de maqueta………………………………………………….-Programación…………………………………………………………….-PRESUPUESTO………………………………………………………………….-Materiales necesarios………………………………………………… 3 3..14 1 .3. 6 3..-DESARROLLO DEL PROYECTO………………………………………….

A través de este menú podemos visualizar mediante la pantalla controlada por el teclado el estado de nuestro sensor de temperatura. 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. que se bloqueara al introducir 3 veces de manera incorrecta la contraseña. 2 . 2. sensor de vibración. 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. comprobar y borrar datos introducidos y desbloquear el programa.1.-JUSTIFICACIÓN La principal justificación es crear un sistema de seguridad eficaz.-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.

.-DESARROLLO DEL PROYECTO 3.3. -Zumbador. -Placa Protoboard. -Teclado matricial 4 x 4.3 LEDs de 5 mm. . 3 .Sensor de Vibración. -Caja de madera. 470 Ω y 10k.Modulo LCD I2C Serie 2 x 16. -Sensor de temperatura. -Cables conectores. -3 resistencias de 220 Ω.-Materiales necesarios -Arduino Uno SMD .Servomotor. .1.

el sensor de temperatura (LM35).-Montaje Prototipo Para el montaje de nuestro prototipo hemos utilizado Arduino UNO SMD.2. El esquema del montaje sería el siguiente: En dicho esquema se pueden aprecia todas las conexiones realizadas para cada uno de los LEDs.3. es una modificación del Arduino UNO cuya principal diferencia es el tipo de encapsulado que ofrece. el servo. 4 . el zumbador. el sensor de vibarción y el tecaldo matricial.

Las siguientes fotos muestran el montaje real: 5 .

Si introducimos la contraseña correcta y activamos el Servo. La tecla D nos permitiría borrar los dígitos introducidos en el caso de que nos equivocáramos. . si fuera incorrecta nos pediría una nueva introducción sumando un error a la cuenta.-Password. La tecla E nos muestra el valor de vibración que tenemos actualmente. Es la librería de nuestro LCD. La tecla C nos permite comprobar la contraseña introducida. si fuera correcta nos abriría la puerta mediante el servo. La tecla F nos muestra por pantalla la temperatura a la que se encuentra la caja fuerte. Hemos realizado la programación de nuestro prototipo con el programa arduino 1.-Programación. La tecla C nos permite cerrar la puerta una vez abierta. Permite comunicar con dispositivos I2C. el diodo LED rojo y el zumbador se activarían. Si fallamos tres veces el sistema se bloquearía.h.-Servo. . Si se sobrepasa la temperatura límite o se comete error en la introducción de la contraseña. Las teclas numéricas se reservan únicamente para los dígitos de la contraseña. Librería utilizada para el funcionamiento del servomotor.h.h. 6 .3.-Keypad.0. 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. se enciende el LED verde. .h. Hemos utilizado números libreiras: . nos pediría una contraseña de desbloqueo que debemos de comprobar con la tecla A. Necesaria para establecer una contraseña e utilizar diveras funciones incluidas en ella.3. Si los niveles de vibración sobrepasas el límite establecido se encendería el LED amarillo.h.1 que podemos descargar de la propia web de arduino.-Wire.-LiquidCrystal_I2C. Es la librería para el teclado matriciail. .

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

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

i++){ checkPassword(). case 'D': lcd.print("Puerta cerrada"). password. 0.print("Password").print("Temperatura:"). posicion = map(posicion.print(Nivel)."). break.print("Borrando"). } lcd. void checkPassword(){ lcd. 0. delay(750). break. delay(750). i=0. lcd. lcd.clear(). 0. } 179). i < 4.print("Vibracion:").clear(). break. delay(2000).setCursor(0. lcd.setCursor(0. for(int i = 0. 1023. delay(1000). i=0. lcd.1). HIGH). for(int i = 0. lcd. case 'F': delay(1000).setCursor(0. digitalWrite(led2. delay(750).").print("Comprobando").attach(12). digitalWrite(led2. case '*': for(int i = 0.clear().print("Abriendo"). lcd. lcd. servo1. 9 .clear(). 179).print(". lcd. lcd.} lcd.evaluate()){ lcd.print(". posicion = map(posicion.reset(). lcd. lcd.1).clear(). lcd.0).print(".clear(). lcd. password.clear(). i < 4. delay(750). i++){ lcd.LOW).").0). Temp=(5*analogRead(A0)*100/1023. i < 4. } posicion = 800. delay(1000). lcd.clear(). lcd. i++){ i=0. lcd. if (password. servo1.print(".reset(). 0. for(int i = 0. i++){ } lcd.clear().setCursor(5. delay(750).setCursor(5. case 'E': } lcd. lcd.clear(). if(posicion<30){ } lcd. } } servo1.append(eKey).clear(). lcd.0). lcd. posicion = 150. 1023. lcd. lcd.clear().1).print("Cerrando")."). lcd. lcd.print(Temp).print("correcta"). lcd.write(posicion).0).i=0. i=0. break. i < 4. delay(150). default: password.write(posicion).setCursor(16. break.

print("Comprobando").LOW).print("Prueba otra vez"). delay(1000).print("Puerta abierta"). lcd.reset(). password. } lcd.clear(). lcd."). digitalWrite(led. errores=0. i < 4.print("Incorrecto").clear(). lcd.setCursor(0. delay(1000). i++){ lcd. } else{ lcd.-Montaje de maqueta 10 .1). lcd. } } 3.clear(). lcd. delay(750). for(int i = 0. lcd. HIGH). errores++. lcd.print(". lcd.1).clear().4.setCursor(0. digitalWrite(led. delay(2000).

Todo el prototipo se ha montado dentro de una caja de madera que simularía la forma de una caja fuerte. 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. El montaje ha sido sencillo. 11 .

17€ Zumbador de 644-35.26€ I2C Serie 2 x 16 Página: www.085 Electro DH Página: www.com 1 Teclado Código: Q04915190 1 3.com Micro Servo Código: 1 4.todomodel.4.com Modulo LCD Código: Q00615043 17.56€ SMD Uno-DMS 1 Página: www.17€ 1.-PRESUPUESTO Producto Nombre Referencia Unidade Precio Total s Unida d Arduino Uno Código: Arduino.b2cqshop.b2cqshop.com Sensor de Código: DFR0027 1 3.60€ Tower Pro E502 SG90 9grs Página: www.com 12 .30€ matricial 4 x 4 Página: www.53 € 3.dieltron.30€ 3.es 35.60€ 4.56€ 26.53 € Vibración Pag: www.dfrobot.085 Código: 1 1.dieltron.26€ 17. 26.

com TOTAL= 69.b2cqshop.67€ Temperatura Página: www.470 Ω 1/4W Placa Código: 1 6. LED 5mm Código: 3 0.675-5RC10K Transparente 12.17 0.51€ 220Ω.67€ de Q02315076 2.89 € 13 .5€ madera 734 Página: www.28€ 6.5€ 3.b2cqshop.dieltron.51€ 10Kmcd 113-12.com Caja de Código: 1 3.dieltron. www.com Resistencias Página: 3 0.cajasestuches madera. Página: www.675/5/R/C/ Página: 10K www.com 10k Ω.28€ Protoboard y Q00915023 cables de conexión.com LM35 Sensor Código: 1 2.17€ 0.

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