Máquina de Cambio

Nos llamó mucho la atención cómo funciona una máquina de cambio de dinero, así que decidimos tomarla como inspiración. En este trabajo nos propusimos diseñar una versión simplificada, con el objetivo de entender mejor su lógica. 

En el proyecto, nos pusimos tres objetivos principales: 

  1. Que sea posible introducir un billete y que sea detectado. 
  1. Poder diferenciar el billete introducido de un billete de 5€, 10€ y 20€. 
  1. Dar el cambio equivalente del valor del billete en monedas de 1€ y 2€.  

De los objetivos planteados, hemos podido cumplir con dos de ellos el 1 y el 3 ya que no hemos podido diferenciar un billete de otro.  

A lo largo del trabajo, surgieron varios problemas:  

  1. Algunas piezas necesarias no estaban disponibles. 
  1. Problemas con la distribución de los componentes para ponerlos en la estructura. 
  1. El servomotor en ocasiones no tenía la potencia necesaria. 
  1. Poder identificar los billetes por el color.  

Para solucionar los problemas mencionados anteriormente, compramos los componentes necesarios, en la estructura, cambiamos el diseño para que sea más cómodo para los componentes, para solucionar el servo motor, cambiamos los cables ya que vimos que no se estaba conectando bien. 

Sin embargo, no hemos podido solucionar el problema de diferenciar un billete de otro, el sensor de color TCS3200 no detecta los colores de los billetes como esperábamos. Al introducir el billete por la ranura, el valor RGB obtenido varía según la zona del billete que se esté leyendo, la distancia a la que se encuentre el sensor. Como consecuencia, no es posible identificar correctamente el billete introducido usando esos valores. 

Debido a los problemas con el detector de color finalmente no podemos introducir billetes de 5, 10 y 20€ y 20€ y diferenciarlos correctamente. Por lo que optamos por limitarlo únicamente al billete de 5€. Cuando se introduce el billete por la ranura, el sensor infrarrojo se activa y manda una señal para que el circuito empiece a funciona.Una vez identificado el billete, los motores se activan y comienzan a girar para expulsar las monedas una a una, aprovechando el pequeño espacio existente entre el tubo y la plataforma donde gira el aspa del motor. El sistema está diseñado de manera que siempre devuelva 2 monedas de 2€ y una de 1€. 

COMPONENTEPRECIO
Arduino Elegoo Uno R38 €
Sensor IR0,93 €
TCS32003,59 €
Cables M-H5 €
x2 Micro-Servo SG909 €
Protoboard8 €
TOTAL34,52 €
#include <Servo.h>


Servo miServo1;
Servo miServo2;

static int servo1 = 3;
static int servo2=2;
static int IR = 4;
static int S0 = 5;
static int S1 = 6;
static int S2 = 7;
static int S3 = 8;
static int Out = 9;

int frequencyR = 0;
int frequencyB = 0;
int frequencyG = 0;

int dinero = 5;
int moneda2;
int moneda1;

int nuevo_ingreso(){
  //Devuelve un 1 cuando se ingresa dinero y en 
  // la variable dinero se almacena el dinero ingresado
    int valor=digitalRead(IR);
  if(!valor){
  return 1;
  }else{
  
  return 0;
  }
  delay(500);
}

void calcular_dinero(){
moneda2=dinero/2;
moneda1=dinero%2;

}

void sacar_moneda2(){
  miServo1.write(100);
  delay(500);
  miServo1.write(50);
  delay(500);

}


void sacar_moneda1(){
  miServo2.write(100);
  delay(500);
  miServo2.write(50);
  delay(500);
  
}

void devolver_dinero(){
  for(int i=0;i<moneda2;i++){
    sacar_moneda2();
  }
  for(int i=0;i<moneda1;i++){
    sacar_moneda1();

  } 
}

/*
 * Billete 5 -> R: 878-1228 | G: 963-1325 | B: 1006-1182
Billete 10 -> R: 1271-2070 | G: 1768-2834 | B: 1593-2833
Billete 20 -> R: 1284-1734 | G: 1201-1788 | B: 1030-1492
 */

void colores(int r, int g, int b){
  /*
  if(g > r && g > b){
    dinero = 5;
  
  }else if(r > g && r > b){
    dinero = 10;
  }
  */
  
  /*
  if((r >= 100 && r <= 1228) && (g >= 100 && g <= 1325) && (b >= 100 && b <= 1182)){
    dinero = 5;
  
  }else if((r >= 1271 && r <= 2070) && (g >= 1768 && g <= 2834) && (b >= 1593 && b <= 2833)){
    dinero = 10;
  
  }else if((r >= 1284 && r <= 1734) && (g >= 1201 && g <= 1788) && (b >= 1030 && b <= 1492)){
    dinero = 20;
  }
  */
}


void setup() {
  // put your setup code here, to run once:
  miServo1.attach(servo1);
  miServo2.attach(servo2);
  miServo1.write(50);
  miServo2.write(0);
  
  pinMode(IR,INPUT);
  
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(Out, INPUT); 

  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
  
  Serial.begin(9600);
}

void loop() {
  if(nuevo_ingreso()){
    Serial.println("Detectado obstaculo");
    
    // Poniendo fotodiodos con filtro rojo para ser leidos
    digitalWrite(S2,LOW);
    digitalWrite(S3,LOW);
    
    // Leemos el valor de color rojo que hay en el sensor
    frequencyR = pulseIn(Out, LOW);
    
    // Imprimimos el valor de ese color
    Serial.print("R= ");//printing name
    Serial.print(frequencyR);
    Serial.print("  ");
    delay(100);

    // Poniendo fotodiodos con filtro verde para ser leidos
    digitalWrite(S2,HIGH);
    digitalWrite(S3,HIGH);
    
    // Leemos el valor de color rojo que hay en el sensor
    frequencyG = pulseIn(Out, LOW);
    
    // Imprimimos el valor de ese color
    Serial.print("G= ");//printing name
    Serial.print(frequencyG);
    Serial.print("  ");
    delay(100);

    // Poniendo fotodiodos con filtro azul para ser leidos
    digitalWrite(S2,LOW);
    digitalWrite(S3,HIGH);
    
    // Leemos el valor de color rojo que hay en el sensor
    frequencyB = pulseIn(Out, LOW);
    
    // Imprimimos el valor de ese color
    Serial.print("B= ");
    Serial.print(frequencyB);
    Serial.println("  ");
    delay(100);
    
    colores(frequencyR, frequencyG, frequencyB);
    
    calcular_dinero();
    devolver_dinero();
  }
}

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 *