You are on page 1of 12

UNIVERSIDAD AUTNOMA DE QUERTARO

FACULTAD DE INGENIERA

Laboratorio de arduino.
Reporte.
Caja fuerte
Jimnez Marco Polo.
Vallejo Martnez Rodrigo.
Profesora:Georgina del Carmen Mota Valtierra.

Introduccin.
Arduino nos permite desarrollar programas que interacten con el mundo como redes de sensores,
robtica sencilla, alarmas, sistemas de comunicaciones.
En este proyecto, veremos el funcionamiento de un estereotipo de mover un servomotor con algunas
caractersticas que le demos al que llamaremos caja fuerte.
En donde a partir de las funciones ya vistas en arduino trataremos de unir todos estos puntos para el
funcionamiento de la caja fuerte en donde la interaccin con el usuario ser mandar un carcter que ser la
contrasea con la que se abrir la caja fuerte.

Objetivo.
El objetivo del proyecto de la caja fuerte es implementar todos los programas que hemos visto en
prcticas pasadas, como teclado matricial, pantalla lcd, servomotor, leds, etc., para incorporarlas a un solo
proyecto que ser este, en el cual todas las funciones vistas realizaran un solo propsito abrir una caja fuerte
utilizando algunas funciones que nos ofrece arduino.

Materiales necesarios.
Pantalla LCD
Arduino
Protoboard
Cables
Teclado matricial
Servomotor
Caimanes
Potencimetro
Leds

Desarrollo.
Para empezar con el proyecto se tuvo que establecer como se guardara la contrasea de la caja fuerte,
entonces para ello se us la librera Eeprom.h, la cual permite guardar cierta cantidad de datos en la memoria
interna del arduino. En donde se guard el vector de la contrasea usada adems de una clave de
administrador dando la posibilidad de que se olvidara la contrasea. Adems de que se us como dispositivo
de entrada un teclado matricial y de salida una pantalla LCD donde se muestra la contrasea siendo tecleada y
como acta cuando se abre y cierra la caja fuerte, el actuador utilizado fue un servomotor el cual giraba 90
grados para abrirse y se mostraba cerrado como opcin predeterminada, la hlice del servo funcionaba como
seguro de la caja en cooperacin con una pieza de madera ubicada en la caja.
Para el montaje del circuito y el arduino se coloc detrs de la puerta de la caja, y se hizo una perforacin en
uno de los lados para poder dar alimentacin a la caja mediante el cable USB, se coloc el servo en la misma
puerta si como la pantalla LCD y el teclado matricial.
Para el armado de los componentes que se necesitaron en el funcionamiento de la caja fuerte, utilizamos los
datos que ya tenamos de las otras prcticas, es decir cmo se conect la pantalla al teclado, los cables del
servomotor y los cables del potencimetro.

Diagramas y conexiones.

Cdigo.
#include <Keypad.h> // Controla el teclado
#include <LiquidCrystal.h> //controla el LCD
#include <Servo.h> //Control del servomotor
#include <EEPROM.h> //COntrola E/S EEPROM
//*****************************************
//*** Declaracion de variables locales*****
//*****************************************
Servo seguro; //servomotor
LiquidCrystal lcd(2 , 3, 4, 5, 6, 7); //display LCD
const byte filas = 4;
const byte columnas = 4;
byte pinsFilas[filas]= {9,10,11,12};
byte pinsColumnas[columnas] = {14,15,16,17}; //A0,A1,A2,A3
char teclas[filas][columnas] = {
{'1','2','3','A'},
// Declaracin del teclado
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
Keypad teclado = Keypad(makeKeymap(teclas), pinsFilas,pinsColumnas, filas, columnas);
char co[5] = {'1','2','3','4'}; //almacena la contrasea en eeprom
char cl[5]; //almacena la contrasea nueva
char cn[5]; //confirmacion de la contrasea
char ca[7]= {'3','7','1','9','2','A'}; //clave admin establecida
char cal[7]; // Clave admin leida
int contador = 0; //Lleva la posicion del array
int cursorr = 6; //Lleva la posicion del cursor
int comp; // comparacion entre 2 arrays
int a; //aux
void setup(){
pinMode(19, OUTPUT); // LEDS QUE INDICAN ABIERTO(13) O CERRADO(19)
pinMode(13,OUTPUT);
digitalWrite(19, HIGH); //enciende el led de cerrado
for(int i =0;i<=3;i++){ //LEER CONTRASEA DE LA EEPROM
co[i]= EEPROM.read(i); //almacenarla en co[]
} //fin del for
seguro.attach(18); // Pin del servomotor
lcd.begin(16, 2); //Configuracion lcd 16X2 (columnas,fila)
lcd.setCursor(6,1); // La escritura de numero siempre sera en el sgundo renglon a partir dle 6to cuadrito
lcd.print("____"); // Espacios a escribir
seguro.write(90); //Cerrar puerta
/*lcd.setCursor(0,0);
lcd.print("'A' para introdu");
delay(1000);
lcd.setCursor(0,0);
lcd.print("cir la pass
");
delay(1000);
lcd.setCursor(0,0);

lcd.print("'C' para cambiar");


delay(1000);
lcd.setCursor(0,0);
lcd.print(" la pass
");
delay(1000);*/
lcd.setCursor(0,0);
lcd.print(" **PASSWORD** ");
}//fin del setup
void loop(){
cl[contador] = teclado.getKey(); // almacenar en la posicion contador la tecla pulsada
if (cl[contador] != NO_KEY){ // Si se puls alguna tecla entonces
switch (cl[contador]){

//condiciones segun la tecla pulsada

//*****************************************//
//Comprobar si la contrasea es correcta
//******************************************//
case 'A':
comp = comprobacion(cl,co)+1; // comp almacena si los 4 numeros son iguales
if (comp==4){
//si los 4 digitos son los mismos entonces
lcdtextoizq(" **Correcto**");
seguro.write(15);
//abrir puerta
ledverde();
delay(600);
lcdtextoizq("Pulse B para cerrar");
delay(600);
lcdtextoizq("Cerrar");
} //fin del if de comp >=4
else{ //si al pulsar 'A' no son iguales
ledrojoblink();
lcdtextocentrado("Error");
delay(600);
lcd.setCursor(0,1);
lcd.print(comp);
delay(500);
lcdnumero();
} // fin del else al if comp>=4
break; //break al caso 'a'
//*************************************//
// ***Cierra la puerta si se pulsa B //
//*************************************//
case 'B':
lcdtextocentrado("Cerrado");
delay(500);
seguro.write(90); //cierra el seguro
ledrojo();
for(int i = 0 ; i<4;i++){ // borra el codigo temporal guardado
cl[i]='0';
}//fin del for
lcdnumero();
break; //fin del caso B
case 'C':
repetirpass();
if (comp>=4){ //si la contrasea concide entonce

lcdtextoizq("Pass correcta");
delay(500);
nuevapass();
vuelve(); //volver a introducir
} //funcion cambio de password
else{
lcdtextoizq("No pudo cambiar");}
comp = comprobacion(cn,cl);
if (comp>=4){
lcdtextoizq("Correcto");
delay(500);
lcdtextoizq("Nueva pass");
delay(500);
lcdtextoizq("pass guardada");
delay(500);
for(int i =0;i<=4;i++){
EEPROM.write(i,cl[i]);}
for(int i =0;i<=4;i++){
co[i]= EEPROM.read(i);}
lcdnumero();
lcdtitulo(" **PASSWORD** ");
break;//fin caso c
case '#': //seccion admin
admin();
break;
default:
escribirn(cl);
} //fin del switch
}

} //fin del if si se pulso alguna tecla


if (contador==4){ //Vuelve a hacer que el cursor comience a partir de cuadrito 6
contador=0;
cursorr=6;
}
}//fin del loop
//*********************************
//*****Seccion de funciones********
//*********************************
void lcdnumero(){ //reseta los valores del cursor del lcd asi como del contador
lcd.setCursor(0,1);
//segundo renglon
lcd.print("
");
lcd.setCursor(6,1);
lcd.print("____");
cursorr=6;
contador=0;
} //fin de lcdresetparanumero
void lcdtextocentrado(String A){ //escribe el mensaje segundo renglon 1er cuadro

lcd.setCursor(0,1);
lcd.print("
");
lcd.setCursor(6,1);
lcd.print(A); //imprime el valor introducido
} //fin de lcdresetparatexto
void lcdtextoizq(String A){ //escribe el mensaje segundo renglon 6tocuadro
lcd.setCursor(0,1);
lcd.print("
");
lcd.setCursor(0,1);
lcd.print(A); //imprime el valor introducido
} //fin de lcdresetparatexto
void ledrojo(){ //enciende led rojo
digitalWrite(19, HIGH);
digitalWrite(13,LOW);
}
void ledrojoblink(){ //enciende led rojo parpadeando
digitalWrite(19, HIGH);
digitalWrite(13,LOW);
delay(200);
digitalWrite(19, LOW);
delay(200);
digitalWrite(19, HIGH);
}
void ledverde(){ //enciende led verde
digitalWrite(19, LOW);
digitalWrite(13, HIGH);
}
void escribirn(char *v){ //escribe el valor de un array en la posicion actual del contador
lcd.setCursor(cursorr,1);
lcd.print(v[contador]);
v[contador+1]= (' ');
delay(250);
lcd.setCursor(cursorr,1);
lcd.print('*');
cursorr++;
contador++;
}
int comprobacion(char *v1,char *v2){
int igual = 0;
for(int i = 0; i<=5; i++){
if(v1[i]==v2[i])
igual= igual + 1;
}
return igual;
}
void lcdtitulo(String a){
lcd.setCursor(0,0);
lcd.print("
");
lcd.setCursor(0,0);
lcd.print(a); //imprime el valor introducido
} //fin de lcdresetparatexto

void repetirpass(){
int i =0;
lcdtitulo("Introduzca pass");
delay(800);
lcdtitulo("pass anterior");
delay(1000);
lcdtextoizq("Finalice con *");
lcdnumero();
while (i<=4){
//har esto 4 vces
cl[contador] = teclado.getKey(); //obtiene valor
if (cl[contador]!=NO_KEY){ //si detecta una tecla entonces
switch (cl[contador]){
case '*': //comprueba si la pass escrita es igual a la anterior
comp=0;
comp = comprobacion(cl,co);
if (comp>=4){ //si es igual
lcdtextocentrado("Correcto");
ledverde();
delay(300);
ledrojo();
i=5;} //fin if comp<=4
else{
lcdtextocentrado("Error");
ledrojoblink();
i=5;
}//end else
break; //fin del caso *
default:
escribirn(cl);
i++;
}//fin del switch
}//fin del if no key
}//fin del if contador==4
//fin del while
}//fin de la funcion repetirpass
void nuevapass(){
lcdtitulo("Intro nueva pass");
lcdtextoizq("Finalice con 'D'");
delay(1500);
lcdtextoizq("SOLO NUMEROS");
delay(1500);
lcdnumero();
while(contador<=4){ //cuatro veces el ciclo
cl[contador] = teclado.getKey();
if (cl[contador]!=NO_KEY){

//si escribi algo

switch (cl[contador]){
case 'D':
if (contador>=4){ // si ya escribio 4 numeros
lcdtextoizq("Vuelve a ingresarla");
delay(1000);
contador=5;
}//fin del if contador==$
else { // si no escribio 4 numeros

lcdtextoizq("Error de pass");
delay(500);
lcd.setCursor(0,1);
lcdtextoizq(" ");
lcd.print(contador);
contador =5;
}//Fin del else
break;
default:
escribirn(cl);
}//fin del switch
//fin del if
}//fn del if no key
}//fin de while
}//finde nueva pass
void vuelve(){
lcdtitulo("Escribe otra vez");
lcdtextoizq("Finalice con '#'");
delay(1500);
lcdnumero();
while(contador<=4){ //cuatro veces el ciclo
cn[contador] = teclado.getKey();
if (cn[contador]!=NO_KEY){

//si escribi algo

switch (cn[contador]){
case '#':
if (contador>=3){ // si ya escribio 4 numeros
lcdtextoizq("Contrasea leida");
contador=5;
}//fin del if contador==$
else { // si no escribio 4 numeros
lcdtextoizq("Error de pass");
delay(500);
lcd.setCursor(0,1);
lcdtextoizq(" ");
lcd.print(contador);
}//Fin del else
break;
default:
escribirn(cn);
}//fin del switch
//fin del if
}//fn del if no key
}//fin de while
}
//finde volver pass

void admin(void){
lcdtitulo("Admin pass");
lcdtextoizq("'*' = Aceptar");
delay(1500);
lcdnumero();
cursorr=4;
while(contador<=8){
cal[contador]=teclado.getKey();
if (cal[contador]!=NO_KEY){

//si escribi algo

switch (cal[contador]){
case '*':
comp =comprobacion(cal,ca);
if (comp>=6){
lcdtitulo("Hola admin");
contador =20;
adminpass();
}
//fin del if contador==$
else { // si no escribio 4 numeros
lcdtextoizq("Error de pass");
contador =20;
lcdtitulo(" **PASWORD** ");
lcdnumero();
}
break;
default:
escribirn(cal);
}//fin del switch
//fin del if
}//fn del if no key
}//fin de while
}//finde admin

void adminpass(){
lcdtitulo("Pass nueva");
lcdtextoizq("Finalice con '#'");
delay(1500);
lcdnumero();
while(contador<=4){ //cuatro veces el ciclo
cn[contador] = teclado.getKey();
if (cn[contador]!=NO_KEY){

//si escribi algo

switch (cn[contador]){
case '#':
if (contador>=3){ // si ya escribio 4 numeros
lcdtextoizq("Contrasea leida");
for(int i =0;i<=4;i++){
EEPROM.write(i,cn[i]);}

for(int i =0;i<=4;i++){
co[i]= EEPROM.read(i);}
delay(500);
lcdtextoizq("Pass actualizada");
contador = 10;
delay(500);
lcdtitulo(" **PASSWORD** ");
lcdtextoizq("Confirma con 'A'");
}//fin del if contador==$
else { // si no escribio 4 numeros
lcdtextoizq("Error de pass");
delay(500);
lcd.setCursor(0,1);
lcdtextoizq(" ");
lcd.print(contador);
}//Fin del else
break;
default:
escribirn(cn);
}//fin del switch
//fin del if
}//fn del if no key
}//fin de while
}
//finde volver pass

Aplicaciones.
El uso de las herramientas que nos ofrece arduino se ven reflejados en distintos campos de la vida
cotidiana, un ejemplo de esto es en las cajas fuertes que funcionan con arduino, en donde incorporamos
las tcnicas de arduino para el funcionamiento de esta, algunas aplicaciones que utilizan funciones de
arduino lo vemos en un robot que emula un espirografo el cual es capaz de pintar y realizar dibujos de
formas geomtricas sobre un pizarrn, otro ejemplo es donde a partir de un microondas tradicional se
convierte en un dispositivo inteligente en el que utilizaramos una tableta y una placa de arduino que
hara reducir el tiempo de espera en la cocina, a la caja fuerte tambin se le puede llamar maletn seguro
en donde podemos incorporar un mdulo GPS entre otros ejemplos.

Conclusiones.
Arduino es una plataforma de hardware libre, el cual se puede utilizar para desarrollar objetos
interactivos autnomos o pueden ser conectados software del ordenador, como lo hicimos en el proyecto
de la caja fuerte. Atreves de los pines de entrada y una gama de sensores el usuario introduce la
contrasea que debe ser de cuatro caracteres y si esta es correcta, la caja abrir, de lo contrario marcara
como error. En prcticas pasadas vimos el funcionamiento de algunos accesorios de arduino como el
teclado matricial, el servomotor, la pantalla lcd, los cuales ahora los juntamos en un solo proyecto que fue
la caja fuerte.

You might also like