Nido de monedas (hucha)

Somos el grupo 17 de la asignatura SEyTR del campus de Vicálvaro, como proyecto final hemos decidido realizar una hucha clasificadora de monedas.

Autores:

  • Jorge Fernández Herranz
  • Iván Cañón Gonzalo
  • Elena Domínguez de Miguel
  • Rebeca Álvarez Gussoni

Introducción

Al comienzo de la asignatura, se nos dio la oportunidad de elegir que proyecto pensar y desarrollar desde cero. En un principio barajamos varias opciones, pero tras sopesarlas detenidamente, finalmente decidimos decantarnos por la idea de la hucha.

La idea principal era realizar una hucha que, al introducir monedas, estas se clasificaran y que, mediante una pantalla, mostrase al usuario el dinero que se encuentra dentro de ella.

Además, decidimos añadir otras funcionalidades. La primera de ellas es la opción de poder sacar dinero con una contraseña. Para ello el usuario debe de elegir la opción B donde a continuación de pulsarla se le solicitará una contraseña, tras introducirla podrá indicar el dinero que desea sacar.

La segunda opción es la de modificar la contraseña, la cual corresponde con el botón A del teclado. Tras pulsarla, se le solicitara al usuario la antigua y a continuación la nueva.

Por último, al pulsar el botón C se le mostrará el saldo actual de la hucha.

Materiales y presupuesto.

Materiales:Precio:
Placa de Arduino UNO.Proporcionada por la URJC.
Cinta aislante.0,90€
Sensores infrarrojos (6 unidades).1,84€/unidad (11€ los seis).
Tabla de contrachapado (60x30x0,5 cm)2,69€
Tabla de contrachapado (120x60x0,5 cm)7,79€
Bisagra recta hierro latón (35x22mm).    (2 unidades.)0,89€/unidad (1,78€ las dos)
Clavos (1×16 mm)1,79€ (bolsa de 800).
Pestillo2,20€
Teclado (de tamaño 4×4)8,10€
Pantalla LCD (incluye interfaz I2C)8,35€
Placa protoboard (3 unidades)Una proporcionada por la URJC y otras dos pertenecientes a los miembros del grupo.
CablesProporcionados por la URJC y otros pertenecientes a los miembros del grupo.
Cola (especial maderas).Perteneciente a uno de los miembros del grupo.
Presupuesto total:44,6€

Herramientas utilizadas.

Herramienta:Uso:
Segueta.Para cortar el contrachapado.
Cola.Para pegar algunas piezas de contrachapado.
Lima.Para limar algunas partes del contrachapado (por ejemplo, agujeros).
Papel de lija.Para alisar el contrachapado tras ser cortado.
Martillo.Para clavar los clavos que forman la estructura de la caja.
Alicates.Para cortar y pelar cables.
Soldador.Para unir cables al teclado y la pantalla.
Regla/metro.Para hacer las medidas de la caja.
Pinzas.Para poder maniobrar determinadas piezas.
Desoldador.Para desoldar algunos errores cometidos al soldar.
Sargentos.Para sujetar el contrachapado a la mesa y así poder cortar más fácilmente.
Cutter.Para cortar partes pequeñas de contrachapado (por ejemplo, agujero de pantalla o agujero por donde entra la moneda).
Tijeras.Para cortar la cinta aislante y otros materiales.
Sierra.Para cortar contrachapado.
Mini destornillador.Para poder ajustar la potencia de los sensores y la interfaz I2C.
Taladro.Para poder realizar agujeros precisos en el contrachapado.

Planificación y reparto de tareas.

Tras decidir el proyecto que íbamos a realizar, organizamos el número de tareas y su reparto.

Primero decidimos los materiales de los que queríamos que estuviera hecha nuestra hucha, tanto los que hemos utilizado en la parte física como en la parte electrónica.

Tras ello, nos dividimos que materiales compraría cada uno y en que fecha comenzaríamos.

Llegamos a la conclusión de que la mejor forma de realizarlo era de forma conjunta en vez de cada uno una parte, por lo tanto, separamos el proyecto en tres secciones distintas; el montaje físico, el montaje electrónico y el código del proyecto.

Para la realización del proyecto, decidimos quedar siempre en la universidad, ya que hay aulas habilitadas que nos facilitaban el trabajo.

Montaje físico.

Para la parte física de nuestro proyecto decidimos pensar un prototipo previo a la compra de los materiales, que finalmente fue el que implementamos. Creímos conveniente que la caja tuviera unas medidas de 30x30x30 (altoxanchoxfondo), que, a pesar de no ser las medidas más eficientes y cómodas, fueron las únicas donde vimos que nos pudiera entrar todo lo que necesitábamos.

Por ello compramos contrachapado para poder realizar la caja exterior y el clasificador de monedas interno.

Comenzamos cortando las paredes de la caja (6 lados) con unas medidas de 30×30.

A continuación, realizamos el clasificador de monedas. Este mecanismo se basa en una rampa, donde va desde el agujero con diámetro más pequeño perteneciente a la moneda de 10 céntimos, hasta la más grande correspondiente a la moneda de 2€. Para que la rampa funcionase siempre correctamente y que las monedas cayesen en el lado de los agujeros, a parte de hacer la rampa hacia abajo, también inclinamos la parte de la rampa (por donde se deslizan las monedas) hacia el lado donde se encuentran los agujeros.

Una vez realizado el clasificador, decidimos comenzar a hacer la caja, para la cual tuvimos que usar clavos que unían las paredes. Pero dejamos sin unir la tapa y la puerta, dado que así resultaría más cómodo el montaje interior.

Para realizar la puerta, decidimos crear un fijo donde iría enganchado una parte del pestillo y en la otra parte tendríamos las bisagras que nos permitía abrirla y la segunda parte del pestillo.

En la parte superior (tapa) decidimos hacer un agujero para la pantalla y otra para la salida de los cables del teclado. Junto con ello, también decidimos realizar un agujero en el lado izquierdo para la entrada de monedas, y en la pared trasera para la salida del cable que iría conectado a Arduino.

Una vez realizado todos estos pasos, ya se habría completado el montaje “físico” de nuestra hucha.

Montaje electrónico.

En cuanto al montaje electrónico, se divide en tres partes: pantalla LCD, sensores y teclado.

Pantalla LCD

Tras haber probado la pantalla LCD del kit de Arduino cedido por la URJC, decidimos que era mejor comprar una nueva que incluyera una interfaz I2C. La cual, estaba formada por cuatro puertos, uno de voltaje, otro de tierra y los dos restantes encargados de mostrar la información en la pantalla. El cable del voltaje lo conectamos al pin de 5v de la placa de Arduino, el de tierra al pin de tierra y los otros dos a los pines analógicos A5 y A4.

Sensores

Para el proyecto utilizamos 6 sensores infrarrojos, los cuales pegamos a la pared interna del clasificador de monedas, situados debajo de cada uno de los agujeros. El sensor cuenta con dos luces, una de ellas esta activa siempre, mientras que la otra solo se enciende cuando detecta un movimiento, en este caso cuando la moneda cae por el agujero. En el centro del sensor se encuentra el potenciómetro, con el cual fuimos regulando la intensidad de este. Cada sensor cuenta con tres puertos, uno de salida, otro de tierra y por último uno de voltaje.

Al tener los sensores pegados a la pared interna del clasificador, decidimos hacer unos pequeños agujeros para que pudieran salir los cables de cada uno de los sensores. Los cables los conectamos a una protoboard, que iría en la base de la hucha, conectando esta placa a la de Arduino en los pines digitales, en este caso del 1 al 5 digitales, y al 3 analógico.

Teclado

Para finalizar el circuito electrónico de nuestra práctica, faltaría por añadirle un teclado matricial, el cual funciona por filas y columnas y nos ayuda a seleccionar las opciones que nos da nuestro sistema e introducir los datos requeridos.

Como comentaremos posteriormente, hemos tenido varios problemas a la hora de realizar las conexiones a los sistemas periféricos de nuestro sistema. Es por ello, que decidimos soldar los cables a los diferentes elementos (tanto el teclado como la pantalla).

Cada cable soldado a la placa corresponde con una fila y una columna; los cuales deben estar conectados a los pines digitales del 6 al 13 de la placa de Arduino.

Código.

A continuación, mostramos nuestro código:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>

#define PULSE_TIMEOUT_MS 200

#define COLS 16 // Columnas del LCD
#define ROWS 4 // Filas del LCD
#define sensor1 1
#define sensor2 2
#define sensor3 3
#define sensor4 4
#define sensor5 5
#define sensor6 3
const byte rowsCount = 4;
const byte columsCount = 4;
 
char keys[rowsCount][columsCount] = {
   { '1','2','3', 'A' },
   { '4','5','6', 'B' },
   { '7','8','9', 'C' },
   { '#','0','*', 'D' }
};
 
const byte rowPins[rowsCount] = { 13, 12, 11, 10 };
const byte columnPins[columsCount] = { 9, 8, 7, 6 };
 
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rowsCount, columsCount);

volatile double credito = 0.00;

char contra[5] = "0000";
char auxcontra[5];

LiquidCrystal_I2C lcd(0x27,COLS,ROWS);

void setup(){
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();

  lcd.clear();
  Serial.print("comienzo");

  pinMode(sensor1, INPUT_PULLUP);
  pinMode(sensor2, INPUT_PULLUP);
  pinMode(sensor3, INPUT_PULLUP);
  pinMode(sensor4, INPUT_PULLUP);
  pinMode(sensor5, INPUT_PULLUP);
  pinMode(sensor6, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(sensor1),coinInserted1, RISING);
  attachInterrupt(digitalPinToInterrupt(sensor2),coinInserted2, RISING);
  attachInterrupt(digitalPinToInterrupt(sensor3),coinInserted3, RISING);
  attachInterrupt(digitalPinToInterrupt(sensor4),coinInserted4, RISING);
  attachInterrupt(digitalPinToInterrupt(sensor5),coinInserted5, RISING);
  mostrarCredito();

}

 void mostrarCredito(){
    String creditInfo = String("SALDO:") + credito + " EUR ";
    lcd.setCursor(0,0);
    lcd.print(creditInfo);
    Serial.println(creditInfo);
}

void coinInserted1(){
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("MONEDA 5 CENT");
  credito += 0.05;
  }

void coinInserted2(){
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("MONEDA 10 CENT");
  credito += 0.10;
  }

void coinInserted3(){
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("MONEDA 20 CENT");
  credito += 0.20;
  }

void coinInserted4(){
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("MONEDA 50 CENT");
  credito += 0.50;
  }

void coinInserted5(){
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("MONEDA 1 EURO");
  credito += 1.00;
  }

void coinInserted6(){ 
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("MONEDA 2 EURO");
  credito += 2.00;
  }

double previouscredito = 0.00;
int cancelarD = 1;
char caracter;


void loop(){
  int posicion = 0;
  int controlWhile = 1;
  int controlWhile2 = 1;
  char tecla_presionada = keypad.getKey();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("ELIJA OPCION:");
  lcd.setCursor(0,1);
  if(tecla_presionada != NO_KEY){
    switch (tecla_presionada){
      case 'A':
        lcd.clear();
        lcd.print(tecla_presionada);
        lcd.setCursor(0,2);
        lcd.print("CAMBIO DE CONTRA");
        while(controlWhile){
          char caracter = keypad.getKey();
          if (caracter == '#'){
            cancelarD = 0;
            //break;
            }
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("ANTIGUA CONTRA:");
          lcd.setCursor(0,1);
          if(caracter != NO_KEY){
            Serial.print(caracter);
            if (caracter == contra[posicion]){
              lcd.setCursor(posicion,1);
              lcd.print(caracter);
              posicion++;
              }
            else{
                lcd.clear();
                lcd.print("CONTRA FALLIDA");
                posicion =0;
                delay(1000);
                lcd.clear();
              }   
            }
           if(posicion ==4){
            delay(1000);
            controlWhile = 0;
            posicion = 0;
            lcd.clear();
            lcd.print("CONTRA CORRECTA");
            delay(1000);
            }
        }
        lcd.clear();
        if(cancelarD == 1){
          while(controlWhile2){
            lcd.setCursor(0,0);
            lcd.print("NUEVA CONTRA:");
            caracter = keypad.getKey();
            if(caracter == '#'){
              controlWhile2=0;
              }
            if(caracter != NO_KEY){
              Serial.print(caracter);
              if(posicion<4){
                lcd.setCursor(posicion,1);
                lcd.print(caracter);
                auxcontra[posicion]=caracter;
                posicion++;
                }
              }  
             if(posicion == 4){
              delay(1000);
              controlWhile2 = 0;
              posicion = 0;
              lcd.print(contra[4]);
              for(int i= 0; i<4;i++){
                contra[i] = auxcontra[i];
                }
                lcd.clear();
                lcd.print("CONTRA ACEPTADA");
                delay(1000);
              }
            }
          }
          cancelarD=1;
          break;

Problemas encontrados y soluciones.

A la hora de realizar la práctica nos hemos encontrado con numerosos problemas. A continuación, aparecen enumerados, junto con sus respectivas soluciones.

  • Clasificador de monedas: en un comienzo las monedas no pasaban correctamente por los agujeros, esto se debe a que, por ejemplo, la diferencia entre la moneda de 2€ y la de 50 cent es de 2,5 mm, por lo tanto, es mínima. Sobre todo, teniendo en cuenta que esta realizado a mano. Pero finalmente seguimos limando cada uno de los agujeros y conseguimos que las monedas entrasen por el agujero que les corresponde y no por otros.
  • Soldar: para que tanto la pantalla como el teclado funcionaran correctamente, era necesario soldar los cables. Esto nos produjo numerosos problemas porque la superficie donde se realizaba era muy pequeña, y en cuanto se juntaban dos soldaduras pertenecientes a cables distintos se producía un error. Esto lo solucionamos recurriendo a un desoldador y volviendo a soldar varias veces hasta que conseguimos el resultado deseado.
  • Rampa de monedas: cuando estábamos montando la estructura, nos dimos cuenta de que la moneda de 10 céntimos (el primer agujero de la parte superior), tenía poca superficie para deslizarse y esto complicaba el funcionamiento del clasificador. Por lo tanto, decidimos añadirle un trozo de plástico, el cual iría unido al hueco por donde entra la moneda.
  • Fallo placa de Arduino: cuando estábamos probando nuestro programa, de repente uno de nuestros compañeros sintió un calambre y la placa dejo de funcionar y de conectarse con el ordenador. Esto lo solucionamos tras realizar numerosas pruebas y darnos cuenta de que el fallo estaba en el cable que unía la placa al ordenador.
  • Pantalla no funcional: la pantalla que se encuentra dentro de la caja que nos aporta la URJC venía con unos cables ya soldados, los cuales no dificultaba mucho el trabajo para conectarlos. Por lo tanto, decidimos que la mejor opción era comprar una pantalla con una interfaz I2C incluida.
  • Mancha en la puerta de la hucha: mientras realizábamos las últimas modificaciones de la hucha, tuvimos un pequeño inconveniente. Nos encontrábamos en el patio de uno de los miembros del grupo, teníamos la caja en el suelo, y de forma inesperada nos cayó algo del cielo, resultó ser un huevo de un nido de la zona (de ahí el nombre de la hucha) y por el impacto contra el suelo, salpicó y nos manchó la puerta de nuestra hucha. Por suerte, no había pollito. La solución a este problema fue intentar limpiarlo rápidamente, aunque no fue muy eficaz como se puede ver en la siguiente foto.

Video explicativo.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *