Máquina expendedora por colores
Somos Antonio Adrián Bonilla, Javier García García, Inés Martínez Hontecillas y Gonzalo del Pozo Laso y somos el grupo 5.
INTRODUCCIÓN
Nuestro proyecto se trata de una máquina expendedora con un funcionamiento diferente, ya que el funcionamiento tradicional nos parecía muy simple y decidimos darle una vuelta. En nuestra máquina expendedora en vez de monedas utilizaremos colores que la propia máquina detectará y nos devolverá su producto asociado.
Dado que los usuarios no están acostumbrados a esta funcionalidad nueva, decidimos utilizar una pantalla para mostrar los mensajes correspondientes, además del propio color reconocido, para de esta manera lograr una buena comunicación con los usuarios.
COMPONENTES
COMPONENTE | UNIDADES | PRECIO |
Arduino Uno R3 | 1 | Proporcionado por la universidad |
Placa protoboard | 1 | Proporcionado por la universidad |
Transistores PNP | 6 | Proporcionado por la universidad |
Motores DC | 6 | 5’56 |
Batería 9V | 1 | 3’99 |
Resistencias | 6 | Proporcionado por la universidad |
Pantalla TFT 1.77’’ | 1 | 8’64 |
Detector de color | 1 | 9’70 |
Cables | +10 | Proporcionado por la universidad |
COSTE TOTAL: 27’89
MATERIALES | UNIDADES |
Elementos de color | 6 |
Caja de espuma | 1 |
Cristal | 1 |
Soldador | 1 |
Bisagra | 2 |
Alambre | 6 |
Silicona | 1 |
Cúter | 1 |
CÓMO FUNCIONA
- El usuario decide el producto que desea y elige su color correspondiente.
La máquina consta de 6 productos asociados a diferentes colores: rojo, naranja, amarillo, verde, azul y morado. El usuario puede elegir cualquiera de ellos. Según el color que elija, la máquina dejará caer un producto u otro.
- El usuario acerca el color al detector de colores.
Los elementos de color consisten en unos rectángulos de los colores anteriormente mencionados, la máquina está calibrada para reconocerlos.
- La máquina detecta el color e imprime dicho color por la pantalla.
Para que el usuario sepa que su color se ha detectado correctamente, la pantalla imprime el nombre del color, así como el propio color del producto elegido para que sea más visual.
- La máquina deja caer el producto.
Se activa el motor correspondiente al producto seleccionado. El motor por tanto gira y el producto cae.
- El usuario recoge el producto.
El producto ha caído y el usuario puede recogerlo.
ESQUEMA DE CONEXIÓN
CONSTRUCCIÓN DE LA MÁQUINA
En cuanto a la parte de hardware, valoramos distintas posibilidades para su construcción. Finalmente nos decantamos por construir de cero una caja que posteriormente tendremos que modelar para adaptarla a una máquina expendedora. Para facilitar la manipulación de los elementos del circuito dentro de la caja, añadimos una puerta con el fin de poder abrir y cerrar sin deteriorar la caja.
Para realizar la estructura interna de la caja utilizamos una serie de paneles de espuma dispuestos de tal forma que queden 6 huecos para los productos. Dichos paneles no ocupan toda la parte interna de la caja, para el resto de la misma utilizamos otro panel de espuma más grande para cubrir todos los circuitos que vamos a tener que implementar, de modo que a simple vista el usuario no los vea.
En cada una de estas 6 celdas además colocamos un alambre enrollado con forma de muelle, que a su vez está conectado a su motor correspondiente. De este modo, cuando el motor se activa, el alambre gira y el producto cae.
Además añadimos una rampa en un lateral para asegurarnos de que los productos caigan en el mismo lugar para facilitar que el usuario los pueda recoger.
En la parte delantera, cortamos una parte para el cristal, que pegamos por detrás. Además dejamos un hueco en la parte de abajo para permitir que el usuario extraiga el producto una vez ha caído. Cortamos también un recuadro para colocar la pantalla y el detector de color.
En la parte de atrás, coincidiendo con los huecos destinados a los productos hacemos un agujero para poderle pasar a cada uno su motor correspondiente y lo pegamos con silicona.
También hacemos un compartimento en la zona inferior, que se puede extraer y colocar de nuevo, teniendo así un hueco para facilitarnos el manejo con el arduino, el circuito y demás cables.
CÓDIGO
//Importamos las librerías
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
//Definimos los puertos de la pantalla TFT
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
#define TFT_SCLK 13
#define TFT_MOSI 11
//Constructor para la pantalla
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
//Variables auxiliares para los colores
int color=0;
int frequency = 0;
//Definimos los puertos del sensor de color
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
//Definimos los puertos que controlan los motores
#define S4 A0
#define S5 A1
#define S6 A2
#define S7 A3
#define S8 A4
#define S9 A5
void setup() {
//Inicializamos la pantalla TFT
Serial.println("INICIO");
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_YELLOW);
tft.setTextColor(ST7735_BLACK);
tft.setTextSize(3);
tft.setCursor(10,60);
tft.setRotation(3);
tft.fillScreen(ST7735_WHITE);
//Establecemos todos los pines como salida de datos
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(S4, OUTPUT);
pinMode(S5, OUTPUT);
pinMode(S6, OUTPUT);
pinMode(S7, OUTPUT);
pinMode(S8, OUTPUT);
pinMode(S9, OUTPUT);
//Establecemos el pin de entrada de datos
pinMode(sensorOut, INPUT);
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
Serial.begin(9600);
}
void loop() {
//Reseteamos el cursor de la pantalla TFT
tft.setCursor(10,60);
//Leemos el color de entrada
color = readColor();
//Apagamos todos los motores
analogWrite(S4, 0);
analogWrite(S5, 0);
analogWrite(S6, 0);
analogWrite(S7, 0);
analogWrite(S8, 0);
analogWrite(S9, 0);
//Dependiendo del color activamos su motor y la pantalla
switch (color) {
case 1:
Serial.println("Rojo");
Serial.print(" ");
analogWrite(S6, 255);
tft.fillScreen(ST7735_RED);
tft.println("rojo");
delay(500);
break;
case 2:
Serial.println("Naranja");
Serial.print(" ");
analogWrite(S8, 255);
tft.fillScreen(ST7735_ORANGE);
tft.println("naranja");
delay(500);
break;
case 3:
Serial.println("Verde");
Serial.print(" ");
analogWrite(S4, 255);
tft.fillScreen(ST7735_GREEN);
tft.println("verde");
delay(500);
break;
case 4:
Serial.println("Amarillo");
Serial.print(" ");
analogWrite(S7, 255);
tft.fillScreen(ST7735_YELLOW);
tft.println("amarillo");
delay(500);
break;
case 5:
Serial.println("Morado");
Serial.print(" ");
analogWrite(S5, 255);
tft.fillScreen(ST7735_RED);
tft.println("morado");
delay(500);
break;
case 6:
Serial.println("Azul");
Serial.print(" ");
analogWrite(S9, 255);
tft.fillScreen(ST7735_BLUE);
tft.println("azul");
delay(500);
break;
case 0:
break;
}
//Reseteamos el color a 0
color=0;
}
//Llamamos a la función que lee los colores
int readColor() {
//Ponemos el sensor para que detecte la frecuencia roja
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
//Leemos la parte roja del color
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
//La imprimimos por pantalla
Serial.print("R= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
//Ponemos el sensor para que detecte la frecuencia verde
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
//Leemos la parte verde del color
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
//La imprimimos por pantalla
Serial.print("G= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
//Ponemos el sensor para que detecte la frecuencia azul
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
//Leemos la parte azul del color
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
//La imprimimos por pantalla
Serial.print("B= ");
Serial.print(frequency);
Serial.println(" ");
delay(50);
//Dependiendo de cada frecuencia seleccionamos un color u otro
if(R<30 & R>10 & B<50 & B>40){
color = 1; // rojo
}
if(G<50 & G>30 & B<45 &B>35){
color = 2; // naranja
}
if(R<50 & R>30 & G<35 & G>25){
color = 3; // verde
}
if(R<20 & R>10 & G<25& G>15){
color = 4; // amarillo
}
if(G<50 & G>40 & B<30 & B>20){
color = 5; // morado
}
if (G<70 & G>50 & B<40 &B>20){
color = 6; // azul
}
return color;
}
RESULTADO FINAL
Colores del usuario
Arduino y protoboard
Pantalla y sensor de color
Vista delantera
Vista trasera
Vista lateral
VIDEO EXPLICATIVO
Hola ,Puede Funcionar Sin Pantalla
compruebalo