Construye un Clasificador de Colores con Arduino: Guía Sencilla con TCS3200 y Servos
En este artículo te mostraré cómo construir un clasificador de colores con Arduino. Puedes ver el siguiente vídeo o leer el tutorial escrito a continuación. Para este proyecto de Arduino solo necesitamos un sensor de color (TCS3200) y dos servomotores de hobby, lo que hace que este proyecto sea bastante simple pero muy divertido de construir. Primero, usando el software de modelado 3D Solidworks, diseñé el clasificador de colores y aquí está su principio de funcionamiento: Aquí puedes descargar el modelo 3D, así como los planos con todas las dimensiones necesarias para construir este proyecto de Arduino. Puedes encontrar y descargar este modelo 3D, así como explorarlo en tu navegador en Thangs. Descarga el modelo de ensamblaje 3D en Thangs. Los siguientes planos pueden usarse para cortar con láser todas las piezas de la carcasa: El material que utilicé para este proyecto es tablero de fibra de 3 mm de espesor. Redibujé las piezas en el tablero según los planos y, usando una sierra manual pequeña, corté todas las piezas a medida. Una vez que tenía todas las piezas listas, comencé a ensamblarlas. Primero ensamblé las partes exteriores usando una pistola de pegamento caliente. Luego, usando pegamento multiusos, pegué los dos servomotores en sus plataformas y los uní al ensamblaje. Después, nuevamente con pegamento, fijé la guía en el servomotor inferior, así como el soporte y la plataforma necesarios para el servomotor superior. A continuación, inserté un interruptor y un conector de alimentación para alimentar el Arduino con un adaptador de 5V y en la tercera plataforma inserté el sensor de color. Conecté los componentes según el siguiente esquema de circuito. Puedes conseguir los componentes necesarios para este proyecto de Arduino en los enlaces a continuación: En este punto, primero necesitamos programar el Arduino y luego terminar el ensamblaje. Aquí está el código de Arduino: Descripción del código: Necesitamos incluir la librería "Servo.h", definir los pines a los que se conectará el sensor de color, crear los objetos servo y declarar algunas variables necesarias para el programa. En la sección setup, definimos los pines como salidas y entradas, configuramos el escalado de frecuencia para el sensor de color, definimos los pines de los servos e iniciamos la comunicación serial para imprimir los resultados de la lectura de color en el monitor serial. En la sección loop, nuestro programa comienza moviendo el servomotor superior a la posición del cargador de caramelos. Ten en cuenta que este valor de 115 se adapta a mis piezas y a mi servomotor, por lo que debes ajustar este valor y los siguientes valores para los servomotores según tu construcción. A continuación, usando un bucle "for", rotaremos y llevaremos el caramelo a la posición del sensor de color. Usamos un bucle "for" para poder controlar la velocidad de rotación cambiando el tiempo de delay en el bucle. Luego, después de medio segundo de delay, usando la función personalizada readColor() leeremos el color del caramelo. Aquí está el código de la función personalizada. Usando los cuatro pines de control y el pin de salida de frecuencia del sensor de color, leemos el color del caramelo. El sensor lee 3 valores diferentes para cada caramelo: Rojo, Verde y Azul, y según estos valores determinamos cuál es el color real. Para más detalles sobre cómo funciona el sensor de color TCS3200, puedes consultar mi tutorial detallado anterior sobre él. Aquí están los valores RGB que obtuve del sensor para cada caramelo. Ten en cuenta que estos valores pueden variar porque el sensor no siempre es preciso. Por lo tanto, usando estas sentencias "if" permitimos al sensor un error de alrededor de ±5 del valor probado para el color particular. Por ejemplo, si tenemos un caramelo rojo, la primera sentencia "if" será verdadera y la variable "color" obtendrá el valor 1. Eso es lo que hace la función personalizada readColor() y después, usando una sentencia "switch-case", rotamos el servomotor inferior a la posición particular. Al final, giramos aún más el servomotor superior hasta que el caramelo caiga en la guía y lo devolvemos a la posición inicial para que el proceso se pueda repetir. Después de subir el código, aseguré la placa Arduino usando una pistola de pegamento caliente. Luego, usando una botella de plástico transparente, hice el cargador y, junto con la parte superior, lo pegué al ensamblaje y terminé el proyecto. Siéntete libre de hacer cualquier pregunta en la sección de comentarios a continuación.Diseño


Construcción del Clasificador de Colores con Arduino





Código Fuente del Clasificador de Colores con Arduino
/* Proyecto Arduino - Máquina Clasificadora de Colores
*
* por Dejan Nedelkovski, www.HowToMechatronics.com
* */
#include <Servo.h>
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
Servo topServo;
Servo bottomServo;
int frequency = 0;
int color=0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Configuración de escalado de frecuencia al 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
topServo.attach(7);
bottomServo.attach(8);
Serial.begin(9600);
}
void loop() {
topServo.write(115);
delay(500);
for(int i = 115; i > 65; i--) {
topServo.write(i);
delay(2);
}
delay(500);
color = readColor();
delay(10);
switch (color) {
case 1: bottomServo.write(50); break;
case 2: bottomServo.write(75); break;
case 3: bottomServo.write(100); break;
case 4: bottomServo.write(125); break;
case 5: bottomServo.write(150); break;
case 6: bottomServo.write(175); break;
case 0: break;
}
delay(300);
for(int i = 65; i > 29; i--) {
topServo.write(i);
delay(2);
}
delay(200);
for(int i = 29; i < 115; i++) {
topServo.write(i);
delay(2);
}
color=0;
}
// Función personalizada - readColor()
int readColor() {
// Configuración de fotodiodos con filtro rojo para lectura
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// Lectura de la frecuencia de salida
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
// Impresión del valor en el monitor serial
Serial.print("R= ");//nombre
Serial.print(frequency);//frecuencia color ROJO
Serial.print(" ");
delay(50);
// Configuración de fotodiodos con filtro verde para lectura
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// Lectura de la frecuencia de salida
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
// Impresión del valor en el monitor serial
Serial.print("G= ");//nombre
Serial.print(frequency);//frecuencia color ROJO
Serial.print(" ");
delay(50);
// Configuración de fotodiodos con filtro azul para lectura
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
// Lectura de la frecuencia de salida
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
// Impresión del valor en el monitor serial
Serial.print("B= ");//nombre
Serial.print(frequency);//frecuencia color ROJO
Serial.println(" ");
delay(50);
if(R<45 & R>32 & G<65 & G>55){ color = 1; // Rojo }
if(G<55 & G>43 & B<47 &B>35){ color = 2; // Naranja }
if(R<53 & R>40 & G<53 & G>40){ color = 3; // Verde }
if(R<38 & R>24 & G<44 & G>30){ color = 4; // Amarillo }
if(R<56 & R>46 & G<65 & G>55){ color = 5; // Marrón }
if (G<58 & G>45 & B<40 &B>26){ color = 6; // Azul }
return color;
}Lenguaje: Arduino (arduino)
Finalizando el Diseño


Proceso de manufactura
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Detector de frecuencia de audio con Arduino – Mide los picos de sonido más intensos
- Construye tu Propio Tamagotchi con Arduino: Mascota Digital DIY
- Controlador Inalámbrico Inteligente de Interruptores: Manipulador Remoto Basado en Arduino
- Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
- Mezclador de Colores RGB con Arduino – Proyecto DIY para Principiantes
- Girasol Arduino: Construye un Girasol Electrónico que Sigue al Sol
- Construye tu Propio Coche RC Porsche con Arduino: Guía Paso a Paso