Control de Banda Transportadora con Sensor de Color TCS230 y Compuerta Automática
En la era de la automatización, el control eficiente de sistemas de transporte es fundamental para optimizar procesos industriales y mejorar la productividad. En este tutorial, te mostraremos cómo construir un sistema de control de banda transportadora utilizando el sensor de color TCS230 y una compuerta automática. Aprenderás a integrar estos componentes para detectar colores y accionar la compuerta de manera precisa, permitiendo la clasificación automática de objetos según su color.
A lo largo de este artículo, te guiaremos paso a paso en el proceso de montaje, desde la selección de materiales hasta la programación del microcontrolador. Ya seas un entusiasta de la electrónica o un profesional en el campo, este proyecto te proporcionará una comprensión profunda de cómo combinar sensores y actuadores para crear soluciones innovadoras en el mundo real. ¡Comencemos a construir tu sistema de control de banda transportadora!
Materiales Necesarios:
Diagramas de Conexión:
En esta sección, presentaremos los diagramas de conexión necesarios para integrar los componentes clave de nuestro proyecto: el sensor de color TCS230, el puente H L298N y el servomotor. Estos esquemas te guiarán en el proceso de conexión, asegurando que cada componente esté correctamente instalado y listo para funcionar. A continuación, encontrarás los diagramas correspondientes a cada uno de los componentes.
Conexión del Sensor de Color TCS230
Este diagrama muestra cómo conectar el sensor de color TCS230 a tu microcontrolador. Asegúrate de seguir las conexiones de los pines correctamente para garantizar un funcionamiento óptimo.

Conexión del Puente H L298N
En este esquema, se detallan las conexiones necesarias para integrar el puente H L298N, que controla el motor. Verifica que los pines de control estén conectados adecuadamente.
Conexión del Servomotor
Este diagrama ilustra cómo conectar el servomotor a tu sistema. Asegúrate de conectar correctamente los pines de alimentación y control.

Explicación Código:
Primero abriremos Arduino IDE, si tienes dudas sobre como utilizar esta aplicación por favor revisa la siguiente guía dedicada donde encontraras la versión recomendada para Arduino de origen Chino o genuinos.
¿Cómo Cargar Códigos a Arduino?
Código Completo:
En esta sección, presentaremos el código completo para el proyecto de control de la banda transportadora utilizando el sensor de color TCS230, el puente H L298N y el servomotor. Este código ha sido diseñado para facilitar la integración de todos los componentes y permitir un funcionamiento eficiente del sistema. A continuación, podrás ver el código en su totalidad, listo para ser utilizado en tu propio proyecto.
#include <Servo.h>
// Definición de los pines para el sensor de color TCS230
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define salidaSensor 8
// Definición del pin para el servomotor
#define pinServo 9
// Definición de los pines para el puente H L298N
#define motorPin1 10 // Pin de control 1 para el motor
#define motorPin2 11 // Pin de control 2 para el motor
Servo miServo;
int modo = 0; // 0: No establecido, 1: Detección de colores, 2: Datos en bruto, 3: Calibración del servomotor, 4: Instrucciones
void setup() {
// Configurar los pines del TCS230 como salidas
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(salidaSensor, INPUT);
// Configurar los pines del puente H como salidas
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
// Apagar el motor al inicio
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Establecer la escala de frecuencia al 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
// Adjuntar el servomotor al pin y establecerlo en 90 grados
miServo.attach(pinServo);
miServo.write(90); // Iniciar el servomotor a 90 grados
// Iniciar la comunicación serial a 115200 baudios
Serial.begin(115200);
mostrarMenu();
}
void loop() {
if (modo == 0) {
// Esperar a que el usuario seleccione un modo
if (Serial.available() > 0) {
char entrada = Serial.read();
if (entrada == '1') {
modo = 1;
Serial.println(F("Modo: Detección de colores y control de servomotor."));
} else if (entrada == '2') {
modo = 2;
Serial.println(F("Modo: Visualización de datos en bruto."));
} else if (entrada == '3') {
modo = 3;
Serial.println(F("Modo: Calibración del servomotor."));
} else if (entrada == '4') {
modo = 4;
mostrarSubMenuInstrucciones();
} else {
Serial.println(F("Opción no válida. Por favor, elige 1, 2, 3 o 4."));
}
}
} else if (modo == 1) {
// Encender el motor en la opción 1
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
// Función de detección y control omitida
} else if (modo == 2) {
// Apagar el motor en otras opciones
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Función de visualización de datos omitida
} else if (modo == 3) {
// Apagar el motor en otras opciones
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Función de calibración omitida
} else if (modo == 4) {
// Apagar el motor en otras opciones
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
mostrarSubMenuInstrucciones();
}
}
void mostrarMenu() {
Serial.println(F("====================================="));
Serial.println(F(" MENÚ PRINCIPAL "));
Serial.println(F("====================================="));
Serial.println();
Serial.println(F("Selecciona una opción:"));
Serial.println(F("1: Detección de colores y control de servomotor"));
Serial.println(F("2: Visualización de datos en bruto del sensor"));
Serial.println(F("3: Calibración del servomotor"));
Serial.println(F("4: Instrucciones de conexión y funcionamiento"));
Serial.println(F("r: Volver al menú principal"));
Serial.println();
Serial.println(F("====================================="));
}
// Funciones
// void detectarYControlar() { ... }
// void mostrarSubMenuInstrucciones() { ... }
// int leerFrecuenciaColor(int estadoS2, int estadoS3) { ... }
// String detectarColor(int rojo, int verde, int azul) { ... }
Descarga del Código Completo
Para facilitarte el acceso, puedes descargar el código completo haciendo clic en el siguiente botón:
Inclusión de Bibliotecas y Definición de Pines
#include <Servo.h>
- Servo.h: Esta biblioteca se utiliza para controlar servomotores. Permite mover el servomotor a posiciones específicas mediante el uso de funciones simples.
#define S0 4 #define S1 5 #define S2 6 #define S3 7 #define salidaSensor 8 #define pinServo 9 #define motorPin1 10 #define motorPin2 11
- Definición de Pines: Aquí se definen los pines del microcontrolador que se conectarán a los diferentes componentes: el sensor de color TCS230, el servomotor y el puente H L298N. Esto facilita el cambio de pines si es necesario, sin modificar el código en múltiples lugares.
Declaración de Variables Globales
Servo miServo; int modo = 0;
Servo miServo: Crea una instancia del objeto Servo, que se utilizará para controlar el servomotor.
int modo: Variable que almacena el estado actual del sistema. Los valores posibles son:
- 0: No establecido.
- 1: Detección de colores.
- 2: Visualización de datos en bruto.
- 3: Calibración del servomotor.
- 4: Instrucciones.
Configuración Inicial en setup()
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(salidaSensor, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
miServo.attach(pinServo);
miServo.write(90);
Serial.begin(115200);
mostrarMenu();
}
- Configuración de Pines: Los pines del sensor de color se configuran como salidas, excepto salidaSensor, que es una entrada. Los pines del puente H también se configuran como salidas.
- Inicialización del Servomotor: Se adjunta el servomotor al pin especificado y se establece en 90 grados, que es la posición neutral.
- Comunicación Serial: Se inicia la comunicación serial a 115200 baudios para interactuar con el usuario a través del monitor serial.
- Mostrar Menú: Llama a la función mostrarMenu() para imprimir el menú principal en el monitor serial.
Bucle Principal en loop()
void loop() {
if (modo == 0) {
if (Serial.available() > 0) {
char entrada = Serial.read();
if (entrada == '1') {
modo = 1;
Serial.println(F("Modo: Detección de colores y control de servomotor."));
} else if (entrada == '2') {
modo = 2;
Serial.println(F("Modo: Visualización de datos en bruto."));
} else if (entrada == '3') {
modo = 3;
Serial.println(F("Modo: Calibración del servomotor."));
} else if (entrada == '4') {
modo = 4;
mostrarSubMenuInstrucciones();
} else {
Serial.println(F("Opción no válida. Por favor, elige 1, 2, 3 o 4."));
}
}
} else if (modo == 1) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
// Función de detección y control omitida
} else if (modo == 2) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Función de visualización de datos omitida
} else if (modo == 3) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Función de calibración omitida
} else if (modo == 4) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
mostrarSubMenuInstrucciones();
}
}
- Modo de Operación: El bucle principal revisa el valor de modo y ejecuta la lógica correspondiente. Si modo es 0, espera la entrada del usuario para cambiar de modo.
- Control del Motor: Dependiendo del modo, el motor se enciende o apaga. En el modo 1, el motor se enciende para la detección de colores.
- Interacción con el Usuario: Utiliza Serial.read() para recibir la entrada del usuario y cambiar el modo del sistema.
Función mostrarMenu()
void mostrarMenu() {
Serial.println(F("====================================="));
Serial.println(F(" MENÚ PRINCIPAL "));
Serial.println(F("====================================="));
Serial.println();
Serial.println(F("Selecciona una opción:"));
Serial.println(F("1: Detección de colores y control de servomotor"));
Serial.println(F("2: Visualización de datos en bruto del sensor"));
Serial.println(F("3: Calibración del servomotor"));
Serial.println(F("4: Instrucciones de conexión y funcionamiento"));
Serial.println(F("r: Volver al menú principal"));
Serial.println();
Serial.println(F("====================================="));
}
Impresión del Menú: Esta función imprime el menú principal en el monitor serial, permitiendo al usuario seleccionar una opción. Es fundamental para la interacción del usuario con el sistema.
Resumen de Funciones Esenciales:
- detectarYControlar(): Esta función se encarga de leer las frecuencias de los colores detectados por el sensor TCS230 y determinar el color. Luego, ajusta el servomotor en función del color detectado. Es crucial para la funcionalidad de detección de colores.
- mostrarSubMenuInstrucciones(): Imprime un submenú con instrucciones detalladas sobre cómo conectar los componentes y cómo funciona el sistema. Permite al usuario obtener más información sobre el hardware y el software.
- leerFrecuenciaColor(int estadoS2, int estadoS3): Configura los pines S2 y S3 para seleccionar el filtro de color y luego mide la frecuencia de salida del sensor. Esta frecuencia es proporcional a la intensidad del color detectado.
- detectarColor(int rojo, int verde, int azul): Analiza las frecuencias de los colores rojo, verde y azul para determinar el color predominante. Devuelve una cadena que representa el color detectado, como «Rojo», «Verde», «Azul», o «Desconocido».















