domingo, 10 de abril de 2016


SAFE DEPOSIT BOX

El presente trabajo comprende el estudio de la utilización del arduino así también para poder desarrollar nuestros conocimientos y habilidades que se fueron  adquiriendo en la materia de la  ingeniería de hardware y así poderlo aplicar en nuestro proyecto de Safe-deposit box o bien conocido como la caja de seguridad.
 Ya que dentro de este trabajo se utiliza lo que es la electrónica y la combinacion de la placa programable de arduino  la cual  implementac de un algoritmo en un determinado lenguaje, ya que esto también va muy de la mano con nuestro proyecto desarrollado.

A continuación se darán los materiales y el desarrollo que se utilizo en nuestro proyecto



ARDUINO  UNO

PROTOBOARD

SERVOMOTOR METÁLICO

TECLADO MATRICIAL 4X4

LCD 2X16

BLUETOOTH

POTENCIOMETRO


CABLES JUMPER (MACHO MACHO/MACHO HEMBRA.

DESARROLLO

Ya de haber obtenido todos los materiales necesarios que se utilizaran debemos de saber como va ir conectado cada una de los materiales electrónicos y asi saber como están conformado esquematicamente el cual se puede ver haciendo uso de sus datasheet en la cual es mas facil saber la distribucion de pines para su conexion.





Y por ultimo se muestra el el codigo usado ,el cual fue un aporte ,ademas de unas modificaciones.


 //Creado por Ryutaku versión 2.0
// ryutaku.com
//Programa para una caja fuerte en arduino
//Para diagramas visitar ryutaku.com
#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
#define CERRAR 90 //Calibrar a gusto la pos del servomotor cerrado
#define ABRIR 180 //Calibrar a gusto la pos del servomotor abierto
//*****************************************
//*** Declaracion de variables locales*****
//*****************************************
Servo servo1;   //servomotor
LiquidCrystal lcd(A0 , A1, A2, A3, A4, A5); //display LCD
const byte filas = 4;
const byte columnas = 4;
byte pinsFilas[filas] = {9,8 ,7 ,6 };
byte pinsColumnas[columnas] = {5,4 ,3 ,2 };
char teclas[filas][columnas] =  {
  {'1', '2', '3', 'A'},                       // Declaración del teclado
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'},
};
Keypad teclado = Keypad(makeKeymap(teclas), pinsFilas, pinsColumnas, filas, columnas);
char password[5]; //almacena la contraseña en eeprom
char ingreso;  //ingreso del usuario
char passUser[4];
char confirmPass[4];  //confirmacion de la contraseña
int ledred = 11;
int ledgreen = 12;
//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 i=0;
int a; //aux
void setup() {
  pinMode( ledred, OUTPUT); // LEDS QUE INDICAN ABIERTO(13) O CERRADO(19)
  pinMode(ledgreen, OUTPUT);
  digitalWrite( ledred, HIGH); //enciende el led de cerrado
  servo1.attach(10);  // Pin del servomotor
  servo1.write(CERRAR);
  lcd.begin(16, 2);   //Configuracion lcd 16X2 (columnas,fila)
  servo1.write(90);  //Cerrar puerta
  lcd.setCursor(4, 0);
  lcd.print("  **PASSWORD** ");
  lcd.setCursor(5, 1);
  lcd.print("____");
  //LEER CONTRASEÑA DE LA EEPROM 
//        error if(password[4]!='Z'){     
    //correción
    if(EEPROM.read(4)!='Z'){
    EEPROM.write(0,'1');
    EEPROM.write(1,'2');
    EEPROM.write(2,'3');
     EEPROM.write(3,'4');
    EEPROM.write(4,'Z'); 
  }
   for (int i = 0; i <= 4; i++) { 
    password[i] = EEPROM.read(i);
  }              
  
}//fin del setup
void loop() {
    leerIngreso(1);
}
////////////////////////////////////////////
void leerIngreso(int a) {
  ingreso = teclado.getKey();
  if (ingreso != NO_KEY)
    switch (ingreso) {
      case 'A':    // es como el "enter" para introducir la password
        if(evaluar(1)==1)
        correcto();
        else{
        msgError();
        }
        reset();
        break;
        
      case 'B':
        informacion();  //muestra en el lcd las opcionesde la caja fuerte
        reset();
        break;
        
      case 'C':
        cambioPass();
        reset();
        break;
      case 'D':
        lcd.setCursor(4, 0);
        lcd.print("Presionaste D");
        delay(1000);
        servo1.write(CERRAR);
        reset();
        break;
      case '*':
        lcd.setCursor(4, 0);
        lcd.print("Presionaste *");
        delay(1000);
        reset();
        break;
      case '#':
        lcd.setCursor(4, 0);
        lcd.print("Presionaste #");
        delay(1000);
        reset();
        break;
      default: //si es un numero debe imprimirlo en el LCD y ademas guardarlo en el arreglo passUser
        if(a==1){
        passUser[i] = ingreso;
        printPass(passUser[i], 5 + i, 1);
        }
        if(a==2){
        confirmPass[i] = ingreso;
        printPass(confirmPass[i], 5 + i, 1);
        }
        i++;
        if (i > 3)
          i = 0;
   
}
}
void cleanlcd() {
  lcd.setCursor(4, 0);
  lcd.print("                ");
  lcd.setCursor(4, 1);
  lcd.print("                ");
}
void printPass(char a, int columna, int fila ) {
  lcd.setCursor(columna, fila);
  lcd.print(a);
  delay(100);
  lcd.setCursor(columna, fila);
  lcd.print("*");
}
int evaluar(int a) {
  int j = 0;
  if (a==1){
  for (int i = 0; i <= 3; i++) {
    if (password[i] == passUser[i]) {
        j++;
    }
  }
  }
  if(a==2){
  for (int i = 0; i <= 3; i++) {
    if (passUser[i] == confirmPass[i]) {
        j++;
    }
  }
  }
  if (j == 4) {
    return j=1;
  }
  else {
    return j=0;
  }
}
void reset() {
  lcd.setCursor(4, 0);
  lcd.print("  **PASSWORD** ");
  lcd.setCursor(5, 1);
  lcd.print("____");
  for(int i =0;i<=3;i++){
  passUser[i]=NO_KEY;
  confirmPass[i]=NO_KEY;
  }
  i=0;
}
void msgError(){
  
        lcd.setCursor(4, 0);
        lcd.print("      ERROR      ");
        delay(500);
      
  }
void correcto(){
  
        lcd.setCursor(4, 0);
        lcd.print("     CORRECTO      ");
        //Abrir servomotor
        servo1.write(ABRIR);
        delay(1000);
}
  void informacion() {
  lcd.setCursor(4, 0);
  lcd.print("'A' para introdu");
  delay(1000);
  lcd.setCursor(4, 0);
  lcd.print("cir la pass        ");
  delay(1000);
  lcd.setCursor(4, 0);
  lcd.print("'C' para cambiar");
  delay(1000);
  lcd.setCursor(4, 0);
  lcd.print(" la pass             ");
  delay(1000);
}
void cambioPass() {
   lcd.setCursor(4, 0);
  lcd.print("Cambio de pass    ");
  delay(1000);
  lcd.setCursor(4, 0);
  lcd.print("Introduce pass     ");
  delay(1000);
  lcd.setCursor(4, 0);
  lcd.print("anterior        ");
  delay(1000);  
  reset();
   while(passUser[3]==NO_KEY){
    leerIngreso(1);}
  if (evaluar(1) == 1) {
    lcd.setCursor(4, 0);
    lcd.print("Introduce           ");
    delay(1000);
    lcd.setCursor(4, 0);
    lcd.print("la pass nueva            ");
    delay(1000);
    reset();
    while(passUser[3]==NO_KEY){
      leerIngreso(1);
  }
    lcd.setCursor(4, 0);
    lcd.print("Vuelve a intro     ");
    delay(1000);
    lcd.setCursor(4, 0);
    lcd.print("cirla           ");
    delay(1000);    
    lcd.setCursor(4, 0);
    lcd.print("   **PASSWORD**      ");
    lcd.setCursor(5, 1);
    lcd.print("____");
    lcd.setCursor(4, 0);
    i=0;
    while(confirmPass[3]==NO_KEY){
      leerIngreso(2);
  }
    if(evaluar(2)==1){
      // funcion de EEPROM
      for (int i = 0; i <= 3; i++) { 
         EEPROM.write(i, passUser[i]);
    }
      for (int i = 0; i <= 3; i++) { 
         password[i] = EEPROM.read(i);
  }
      lcd.setCursor(4, 0);
      lcd.print("Contraseña cam  ");
      delay(1000);
      lcd.setCursor(4, 0);
      lcd.print("biada           ");
      delay(500);
    }
    else{
      lcd.setCursor(4, 0);
      lcd.print("Error las pass   ");
      delay(1000);
      lcd.setCursor(4, 0);
      lcd.print("no coinciden        ");
      delay(1000);
    }
    
  }
  else {
    msgError();
  }
  reset();
}
void passChange(){
 for(int i=0;i<=3;i++){
   password[i]=passUser[i];
 }
  
}