Proyecto Final
Robot separador de color
Presentación.
El siguiente proyecto tiene como objetivo la creacion de un robot capaz de clasificar dulces de colores en sus respectivas casillas, esto fue posible con unos sensillos componentes electronicos y una estructura solida de madera.
Funcionamiento.
Todo comienza en la parte superior del robot en donde se le introducen los dulces de colores(rojo, azul, verde, amarillo), para su posterior clasificación.
Al interior de este compartimento, se encuentra el sensor tcs34247 el cual obtiene los valores del especto RGB, esto es gracias a que un servo motor con ayuda de una pieza mueve los dulces que salen del tubo hacia el sensor.
Una vez detectado el color y que este coincida con los guardados en el programa, este pequeño contenedor gira hacia la seccion del color que fue detectado, esto gracias a otro servo motor, el dulce es arrojado por la rampa y cae en el contenedor.
Todas las conexiones fueron realizadas por cables dupont en un proto board, y el controlador desifnado fue un arduino nano.
Realización.
Primeramenta realice las conexiones correspondientes en utilizando un Protoboard, del sensor Tcs34725 utilizamos los pines de SDA, SCL, GND y VIN, estos conectados con los pines del arduino nano en el siguiente orden: SDA en el ping A4, SCL en el pin A5, VIN en el pin de 5v y GNA en tierra. En cuanto a los servo motores, los pines de voltaje y tierra estan en sus respectivos pines y los outputs, en el caso del que esta en la parte superior nombrado "rampa" en el codigo esta ubicado en el pin D10 y el de la parte inferior nombrado, "charola" en el codigo se encuentra ubicado en el pin D9.
Tras hacer la conexiones tuve que conectar un clable ubicado en las partes negativas y positvas del proto board, para poder darle el votaje necesario a los motores, al sensor se le suministra el voltaje por el arduino, por lo que, cuenta con dos conexiones, uno para la laptop que sirve para encender el sensor y el nano, y otro que va directo a la corriente para alimentar los servomotores con un regulador de corriente de hasta 12 voltios.
Procedente a ello saque las medidas y realice los cortes necesarios para hacer la estructura de madera y asi colocar de manera correcta los componentes.
Este fue el diagrama que utilice para basarme en las conexiones de los componentes.
Programación.
Utilice el Programa otorgado por arduino para la programacion del NANO,
#include
#include
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS,TCS34725_GAIN_4X);
Servo charola;
Servo rampa;
int t = 3000;
En esta parte del scope llamamos a la libreria para del sensor para su facil uso, proveniente de Adafruit. Tambien llamamos al del servo motor, declaramos el nombre de los servomotores, en este caso "charola"(parte inferior del robot) y "rampa"(parte superior del robot) y tambien incluimos una variable de tipo entero que nos sirve para el tiempo de espera que tendra el robot por cada movimiento.
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
tcs.begin();
charola.attach(9);
rampa.attach(10);
}
Ahora bien, en el metodo de void setup, inicializamos la comunicacion serial del sensor con una velocidad de trasmicion de 115200 bits, posterior a ello inicializamos el sensor y con ello declaramos los pines de entrada de cada servo. Empecemos ahora con el void loop, lo cual nos permite ejecutar el codigo en bucle,
void loop() {
// put your main code here, to run repeatedly:
rampa.write(1);
delay (t);
rampa.write(45);
delay (t);
Esta parte nos ayuda a iniciar los movimientos que hara el motor "rampa" y de ahi obtener los primeros valores que posteriormente seran evaluados con los if.
float red,green,blue;
tcs.getRGB(&red,&green,&blue);
int R = int(red);
int G = int(green);
int B = int(blue);
String color;
Serial.print("R: ");Serial.print(int(red));
Serial.print(" G: ");Serial.print(int(green));
Serial.print(" B: ");Serial.print(int(blue));
Serial.print(" color: ");Serial.print(color);
Serial.println();
-
float red, green, blue;
: Aquí se declaran tres variables de tipofloat
llamadasred
,green
yblue
. Estas variables se utilizarán para almacenar los valores de los componentes rojo, verde y azul del color detectado por el sensor. -
tcs.getRGB(&red, &green, &blue);
: Esta línea de código llama al métodogetRGB()
del objetotcs
. El método toma tres argumentos por referencia (&red
,&green
y&blue
) y actualiza sus valores con los componentes de color detectados por el sensor. En otras palabras, obtiene los valores de rojo, verde y azul del sensor y los almacena en las variables correspondientes. -
int R = int(red);
,int G = int(green);
,int B = int(blue);
: Aquí se declaran tres variables de tipoint
llamadasR
,G
yB
. Estas variables se utilizan para almacenar los valores enteros (redondeados) de los componentes de color. Convertimos los valoresfloat
aint
para trabajar con números enteros. -
String color;
: Se declara una variable de tipoString
llamadacolor
. Sin embargo, en este punto, no se le asigna ningún valor. -
Y ya por ultimo imprimimos los valores para que sean visibles en el serial y asi poder obtener los valores y pasar a poder clasificarlos.
if((R-G>18)&(R-B>5)){
color = "rojo";
charola.write(0);
rampa.write(67);
delay (t);
rampa.write(1);
delay (t);
rampa.write(45);
delay (t);
}
if((G-R>65)&(G-B>50)){
color = "Verde";
charola.write(90);
rampa.write(67);
delay (t);
rampa.write(1);
delay (t);
rampa.write(50);
delay (t);
}
if((B-R>120)&(B-G>60)){
color = "Azul";
charola.write(135);
rampa.write(67);
delay (t);
rampa.write(1);
delay (t);
rampa.write(45);
delay (t);
}
if((B>30)&(B<38)){
color = "Amarillo";
charola.write(180);
rampa.write(67);
delay (t);
rampa.write(1);
delay (t);
rampa.write(45);
delay (t);
}
if((R<=71)&(G<=89)&(B<=82)){
color = "no hay color";
delay (t);
rampa.write(1);
delay (t);
rampa.write(45);
delay (t);
}
Por ultimo pasamos a la avaluacion de valores para poder clasificarlos por colores, los cuales si cumplen con estas condiciones entran al if y los motores realizan los movimientos pertienentes para su clasificacion en la charola. En cada if se tiene los valores, los cuales sobre el mas alto se restan los mas bajos y de esta forma obtenemos un rango estimado para poder clasificarlo. Procendente a que se obtenga los valores el servo 'rampa' se mueve en un angulo el cual deja caer el dulce y de forma casi instantanea el servo 'charola' se acomoda para recibirlo y empieza el ciclo nuevamente
Utilización.
El robot clasifica objetos, en este caso dulces por su color utilizando como parametro el espectro de colores RGB, esto nos permite poder encontrar diferencias entre los colores, pero ademas el sensor permite añadir un parametro mas que es la temperatura, podiendo asi poder diferenciar colores frios y calidos. Esto amplia el uso del robot y en el uso industrial podemos encontrar maquinas de mayor tamaño capaces de clasificar productos de distintos empaques e incluso podiendo determinar si este cumple con los requisitos de empaquetado y de no ser asi, enviarlos a otra parte para un proceso diferete. En ese caso este robot representa a escala ese tipo de maquinas simulando su funcionamiento y utilidad.
Conclusiones.
Durante el proceso de cracion de este robot me encontre con muchas dificultades a la hora de realizar piezas que encajen y sean utiles para el buen funcionaminto, con ello pude comprender que llevar una planificacion y un proceso es de suma importancia para poder llevar a cabo un proyecto de esta magnitud. Por otra parte, la investigacion y documentacion para poder llevar a cabo las conexiones pertinentes es una tarea de gran relevancia y se corre el riesgo de estropear piezas si no se hace un buen manejo de las mismas. Por ultimo cabe mencionar que este proyecto abarco multiples conocimientos vistos en el curso que en cierta manera ayudo a agilizar ciertos procesos. Estoy satisfecho con el resultado final y solo espero que funcione bien para el dia de la entrega
Referencias.
ElectronicSpot (1 de mayo de 2023) Clasificando Objetos por Color con Sensor RGB TCS34725 y Arduino URL:Clasificando Objetos por Color con Sensor RGB TCS34725 y Arduino (youtube.com)
Mr Innovative(27 jul 2017) How to make Color Sorting Machine Arduino Based URL:How to make Color Sorting Machine Arduino Based (youtube.com)
Royero, E. P. (2023, 9 octubre). CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO. Dron Activos. https://dronactivos.blogspot.com/2022/09/alarma-inalambrica-con-arduino-uno.html