Plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar.
Samuel @ChinoRB Offline #1
Caja Fuerte

Este es un proyecto con el cual se aprende mucho, consiste en montar y programar con nuestro arduino el mecanismo de una caja fuerte, y de esta forma podremos implementar esto cualquier ámbito, como por ejemplo la apertura de una puerta por un código numérico o alfanumérico.

Material
El material para este proyecto es muy simple:
Lo primero y más importante es el teclado matricial para quien no sepa lo que es o como es su funcionamiento:
Un teclado matricial es un simple arreglo de botones conectados en filas y columnas, de modo que
se pueden leer varios botones con el mínimo número de entradas requeridas.

Su esquema es este, y con él, entenderéis muy fácilmente la definición:

Imagen

En la web oficial de arduino podemos encontrar mucha información sobre la utilización en su conjunto para la implementación en nuestros proyectos Teclado matricial Arduino

Segundo un buzzer, al que llamo speaker, el común usado en ordenadores

Imagen

Tercero dos leds, uno rojo y otro verde
ImagenImagen

Un botón

Imagen

Y por último tres resistencias, dos de 560Ω y una de 1kΩ

ImagenImagen

Sin olvidarnos de unos 13 cables flexibles algunos rígidos y nuestra protoboard

Montaje

El montaje es muy sencillo, os dejo unas fotos para que lo miréis bien de cerca.

Imagen

Para conectar el teclado podemos tener dos tipos de conectores en el teclado aunque al final es el mismo, uno de ellos es el que veíamos en el esquema al principio:

ImagenImagen

En este caso el pin 1, 2 y 3 serían las columnas y el pin 4, 5, 6 y 7 las filas.

El segundo tipo de conector puede ser de esta forma:

Imagen
Imagen
Imagen

En este caso el pin M7, M5 y M6 serían las columnas y el pin M4, M3, M2 y M1 las filas.


Código

Es necesario para que sea una programación mucho más fácil, la librería Keypad la cual se puede descargar desde la web de arduino en este enlace Keypad

El código está totalmente comentado para que no halla dudas, pero cualquier cosa podéis preguntar sin problema.

Código: Seleccionar todo
  1. #include <Keypad.h>
  2. // DECLARACIÓN DE PINES
  3. const int ledrpin = 11; // Led rojo
  4. const int ledgpin = 12; // Led verde
  5. const int speakerpin = 3; // Speaker
  6. const int botonpin = 2; // Botón
  7. const int zumbpin = 14; // Zumbador
  8. int estadoboton = 0; // Estado del botn por defecto
  9. // DECLARACIÓN DEL TECLADO MATRICIAL
  10. const byte ROWS = 4; // Filas
  11. const byte COLS = 3; // Columnas
  12. //Mapa de caracteres
  13. char keys[ROWS][COLS] = {
  14.   {'1','2','3'},
  15.   {'4','5','6'},
  16.   {'7','8','9'},
  17.   {'*','0','#'}
  18. };
  19. byte rowPins[ROWS] = { 4, 5, 6, 7 };  // Declaracion de pines de las filas
  20. byte colPins[COLS] = { 8, 9, 10 };   // Declaracion de pines de las columnas
  21. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );  // Crear teclado
  22. //OBTENCION DE CARACTERES
  23. int caracter = 0;
  24. char clave [10] ;
  25. String claveint;
  26. String claveguardada = "123456"; // Clave por defecto
  27. int reset = 0;
  28. void setup()
  29. {
  30. // CONFIGURACIÓN DE PINES
  31.   pinMode(ledrpin,OUTPUT);
  32.   pinMode(ledgpin,OUTPUT);
  33.   pinMode(speakerpin,OUTPUT);
  34.   pinMode(botonpin,INPUT);
  35.   pinMode(zumbpin,OUTPUT);
  36.   Serial.begin(9600); //Configuración de serial para desarrollar
  37. }
  38.  
  39. void loop()
  40. {
  41.   //BOTÓN DE RESET
  42.   if (reset == 1) { // Si el botón reset fue pulsado
  43.     digitalWrite(ledgpin,HIGH);
  44.   }
  45.   if (reset == 0) { // Si el botón de reset estaba abierto
  46.     digitalWrite(ledgpin,LOW);
  47.   }
  48.   char key = kpd.getKey(); //Obtener tecla pulsada con la función "kpd.getKey()
  49.   estadoboton = digitalRead(botonpin);
  50.   if (estadoboton == HIGH) { //Si se ha pulsado el botón
  51.     reset = 1;
  52.     for (int i=0; i<300; i++) {  // Generar sonido con Speaker (Reset)
  53.       digitalWrite(speakerpin, HIGH);
  54.       delayMicroseconds(300);
  55.       digitalWrite(speakerpin, LOW);
  56.       delayMicroseconds(200);
  57.     }
  58.     delay(100);
  59.     for (int i=0; i<300; i++) {  
  60.       digitalWrite(speakerpin, HIGH);
  61.       delayMicroseconds(300);
  62.       digitalWrite(speakerpin, LOW);
  63.       delayMicroseconds(200);
  64.     }
  65.     delay(100);
  66.     for (int i=0; i<300; i++) {  
  67.       digitalWrite(speakerpin, HIGH);
  68.       delayMicroseconds(300);
  69.       digitalWrite(speakerpin, LOW);
  70.       delayMicroseconds(200);
  71.     }
  72.     delay(100);
  73.     for (int i=0; i<300; i++) {  
  74.       digitalWrite(speakerpin, HIGH);
  75.       delayMicroseconds(300);
  76.       digitalWrite(speakerpin, LOW);
  77.       delayMicroseconds(200);
  78.     }
  79.     delay(100);
  80.     for (int i=0; i<600; i++) {  
  81.       digitalWrite(speakerpin, HIGH);
  82.       delayMicroseconds(300);
  83.       digitalWrite(speakerpin, LOW);
  84.       delayMicroseconds(200);
  85.     }
  86.     delay(100);
  87.   }
  88.        
  89.        
  90.  
  91.  
  92.   if(key)  // Si hay una tecla pulsada
  93.   {
  94.           caracter++; //Añadir un caracter a la suma
  95.           if (caracter == 10){ //Si se pulsan 10 caracteres cancelar la obtención y resetear los valores (Cancelar)
  96.             digitalWrite(ledrpin,HIGH);
  97.             claveint = 0;
  98.             caracter = 0;
  99.             for (int i=0; i<600; i++) { // Generar sonido con Speaker (Cancelar)
  100.               digitalWrite(speakerpin, HIGH);
  101.               delayMicroseconds(300);
  102.               digitalWrite(speakerpin, LOW);
  103.               delayMicroseconds(200);
  104.             }
  105.             digitalWrite(ledrpin,LOW);
  106.           }
  107.         else if(key == '*') { //Si se pulsa la tecla '*' cancelar la obtención y resetear los valores (Cancelar)
  108.           digitalWrite(ledrpin,HIGH);
  109.           claveint = 0;
  110.           caracter = 0;
  111.           for (int i=0; i<600; i++) { // Generar sonido con Speaker (Cancelar)
  112.             digitalWrite(speakerpin, HIGH);
  113.             delayMicroseconds(300);
  114.             digitalWrite(speakerpin, LOW);
  115.             delayMicroseconds(200);
  116.           }
  117.           digitalWrite(ledrpin,LOW);
  118.         }
  119.        else if(key == '#') { //Si se pulsa la tecla '#' comprobar la contraseña introducida(Comprobación) o guardar la contraseña(Reset)
  120.           if (reset == 1) { //Si fue pulsado el botón de Reset guardar la contraseña introducida
  121.             claveguardada = claveint;
  122.             claveint = 0;
  123.             caracter = 0;
  124.             reset = 0;
  125.             digitalWrite(ledgpin,HIGH);
  126.             for (int i=0; i<300; i++) {  // Generar sonido con Speaker (Correcto)
  127.               digitalWrite(speakerpin, HIGH);
  128.               delayMicroseconds(300);
  129.               digitalWrite(speakerpin, LOW);
  130.               delayMicroseconds(200);
  131.             }
  132.             delay(100);
  133.               for (int i=0; i<300; i++) {
  134.                 digitalWrite(speakerpin, HIGH);
  135.                 delayMicroseconds(300);
  136.                 digitalWrite(speakerpin, LOW);
  137.                 delayMicroseconds(200);
  138.               };
  139.             digitalWrite(ledgpin,LOW);
  140.           }
  141.         else  if (claveint == claveguardada) { // Si la contraseña introducida(claveint) es igual a la guardada(claveguardada) ->Encender led verde y zumbador
  142.             claveint = 0;
  143.             caracter = 0;
  144.             digitalWrite(ledgpin,HIGH);
  145.             digitalWrite(zumbpin,HIGH);
  146.             for (int i=0; i<300; i++) {  // Generar sonido con Speaker (Correcto)



Funcionamiento

En unos días subiré un video con su funcionamiento para entenderlo bien.

Un saludo.
Chino
Avatar de Usuario
Matriz nula
Abr 2012 | 4 Mens.
Los siguientes usuarios han agradecido a ChinoRB este post
Gerardo (20 May 2012, 22:50), ferre7 (20 May 2012, 22:59), Jaime (20 May 2012, 23:03), sroca (21 May 2012, 22:45), Andrés (22 May 2012, 04:59), Zarza (29 Dic 2012, 23:03), Carlos (30 Dic 2012, 21:22), victorsilva (30 Dic 2012, 21:57)


Gerardo Balboa @Gerardo Offline #2
Genial, gracias por el aporte, a ver si este verano le damos más vidilla al subforo :)
Imagen
Avatar de Usuario
Administrador
Legendario
Nov 2010 | 2509 Mens.
Los siguientes usuarios han agradecido a Gerardo este post
ChinoRB (20 May 2012, 23:25)


Enmanuel Bisono @enmanuelbt92 Offline #3
Le falta una parte al programa me la podrias dar
Avatar de Usuario
Matriz nula
Dic 2012 | 3 Mens.

Samuel @ChinoRB Offline #4
enmanuelbt92 escribió:
Le falta una parte al programa me la podrias dar

Es cierto! Dame un minuto y la lo subo completo
Chino
Avatar de Usuario
Matriz nula
Abr 2012 | 4 Mens.

Samuel @ChinoRB Offline #5
Tengo que buscarlo, a ver si mañana lo encuentro y lo subo, lo siento.
Chino
Avatar de Usuario
Matriz nula
Abr 2012 | 4 Mens.

Enmanuel Bisono @enmanuelbt92 Offline #6
ChinoRB escribió:
Tengo que buscarlo, a ver si mañana lo encuentro y lo subo, lo siento.

gracias, lo esperare y por favor podrias mostrame mejor las conecciones del circuito, estoy muy interesado en hacer ese proyecto. y por ciento el zumbador y el speaker son buzzer los dos correcto? Perdon si hago muchas preguntas pero estoy muy interesado en hacer este proyecto.
Avatar de Usuario
Matriz nula
Dic 2012 | 3 Mens.

Rodrigo Zarza @Zarza Offline #7
Grandioso y muy sencilla. Gracias Samuel!
Simracer para: 7thRacing
Linkin' Unit
Avatar de Usuario
Veterano
Arduino
May 2011 | 979 Mens.

Enmanuel Bisono @enmanuelbt92 Offline #8
Hola, como estas Samuel, era para saber has podido encontra lo que le falta al condigo, aun lo estoy esperando.
Avatar de Usuario
Matriz nula
Dic 2012 | 3 Mens.

Adrian Rodriguez @AdrianRdz Offline #9
hola! como estas?
oye podrias subir la otra parte de tu programa por favor!
Avatar de Usuario
Conjunto vacío
Abr 2013 | 1 Mens.

David Rodríguez @deivizrodriguez Offline #10
Acabais antes haciendo vosotros la otra parte del programa me da a mí jajajaaj
ImagenImagen
Avatar de Usuario
Octal
Oct 2012 | 42 Mens.

Jhon Velasco @jhonwilser Offline #11
Amigo de verdad me parece muy bueno tu proyecto y ante todo muchas gracias por compartirlo con todos nosotros aunque soy un novato en este mundo del Arduino estoy por montar el proyecto y por lo que veo creo que falta parte del codigo podrias pasarmelo por favor, disculpa el abuso gracias de antemano. jhonwilser@gmail.com
Avatar de Usuario
Conjunto vacío
Abr 2014 | 1 Mens.

Volver a Arduino