Detector de Colores
con Arduino

Proyecto escolar completo con explicaciones detalladas

Secundaria Vasco de Quiroga

Yurécuaro, Michoacán

👩‍🎓 Estudiantes

Sofía Curiel
Celeste Aguilar
Guadalupe Aguilar
María Paula Godínez
Sarahí Guzmán

🎉 Bienvenidos al Proyecto

🏫 Proyecto de la Escuela Secundaria Vasco de Quiroga

Estudiantes: Sofía Curiel • Celeste Aguilar • Guadalupe Aguilar • María Paula Godínez • Sarahí Guzmán

Ubicación: Yurécuaro, Michoacán

Este es un proyecto educativo completo para aprender Arduino, sensores y programación de una manera práctica y divertida.

¿Qué vas a aprender?

🎨

Detección de Colores

Cómo un sensor detecta colores usando los valores RGB.

⚙️

Control de Servos

Aprende a controlar un servo motor con precisión usando Arduino.

💡

Lógica de Programación

Entiende cómo tomar decisiones en código usando IF, comparaciones y bucles.

🔧

Electrónica Básica

Conecta componentes electrónicos de forma segura y correcta.

📦 Material Necesario

  • Arduino UNO - El cerebro del proyecto
  • Sensor TCS3200 (GY-531) - Detecta colores
  • Servo Motor SG90 - Gira según el color
  • Cables de conexión (jumpers)
  • Lunetas de colores - Para las pruebas

🚀 Cómo empezar

  1. Ve a la sección "Guía Paso a Paso" e instala Arduino IDE
  2. Haz todas las conexiones siguiendo el diagrama
  3. Copia el programa desde la sección "Programa"
  4. Calibra el sensor con las lunetas de colores
  5. ¡Prueba tu proyecto!

💻 Código Arduino Completo

Este es el código completo que debes cargar en tu Arduino. Está totalmente anotado para que entiendas cada parte.

📋 Instrucciones:
  1. Abre Arduino IDE
  2. Ve a Archivo → Nuevo
  3. Copia todo el código de abajo
  4. Haz clic en "Cargar" (flecha hacia la derecha)
  5. Espera a que diga "Done uploading"

Estructura del Código

  • Librerías: #include <Servo.h>
  • Pines: Definición de todos los pines usados
  • setup(): Se ejecuta UNA SOLA VEZ al encender
  • loop(): Se repite infinitamente
  • Funciones personalizadas: readColor(), detectColor(), moverServo()

Código Completo

#include <Servo.h>

Servo miServo;

const int S0 = 8, S1 = 9, S2 = 12, S3 = 11, OUT = 10, SERVO_PIN = 3;
int redValue = 0, greenValue = 0, blueValue = 0;

void setup() {
  pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT); pinMode(OUT, INPUT);
  
  miServo.attach(SERVO_PIN);
  miServo.write(90);
  Serial.begin(9600);
  
  Serial.println("════════════════════════════════════════════════════");
  Serial.println("     DETECTOR DE COLORES CON SERVO MOTOR");
  Serial.println("════════════════════════════════════════════════════");
  Serial.println("Sistema listo. Apunta el sensor a un color...");
  
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
}

unsigned long readColor(int S2pin, int S3pin) {
  digitalWrite(S2, S2pin);
  digitalWrite(S3, S3pin);
  delay(50);
  
  unsigned long count = 0;
  unsigned long startTime = millis();
  
  while (millis() - startTime < 1000) {
    if (digitalRead(OUT) == LOW) {
      count++;
      while (digitalRead(OUT) == LOW);
    }
  }
  
  return count;
}

String detectColor(int red, int green, int blue) {
  int maxColor = max(red, max(green, blue));
  
  if (red == maxColor && red > green && red > blue) return "ROJO";
  else if (green == maxColor && green > red && green > blue) return "VERDE";
  else if (blue == maxColor && blue > red && blue > green) return "AZUL";
  else if (red > blue && green > blue) return "AMARILLO";
  else if (red > green && blue > green) return "MAGENTA";
  else if (green > red && blue > red) return "CYAN";
  else return "BLANCO/GRIS";
}

void moverServo(String color) {
  if (color == "ROJO") {
    Serial.println("  ➜ ROJO detectado → Servo a la IZQUIERDA");
    miServo.write(30);
  }
  else if (color == "AZUL") {
    Serial.println("  ➜ AZUL detectado → Servo a la DERECHA");
    miServo.write(150);
  }
  else if (color == "VERDE") {
    Serial.println("  ➜ VERDE detectado → Servo al CENTRO");
    miServo.write(90);
  }
  else {
    Serial.println("  ➜ Color no identificado → Servo al CENTRO");
    miServo.write(90);
  }
}

void loop() {
  Serial.println("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
  Serial.println("📍 Leyendo colores del sensor...");
  
  redValue = readColor(LOW, LOW);
  Serial.print("🔴 Rojo: "); Serial.println(redValue);
  
  greenValue = readColor(HIGH, LOW);
  Serial.print("🟢 Verde: "); Serial.println(greenValue);
  
  blueValue = readColor(LOW, HIGH);
  Serial.print("🔵 Azul: "); Serial.println(blueValue);
  
  String colorDetectado = detectColor(redValue, greenValue, blueValue);
  Serial.print("🎨 Color detectado: ");
  Serial.println(colorDetectado);
  
  moverServo(colorDetectado);
  delay(1000);
}
⚠️ Importante: Antes de cargar el código, asegúrate de que Arduino está conectado y has seleccionado la placa "Arduino UNO" y el puerto correcto.

📖 Guía Paso a Paso

Paso 1: Descargar e Instalar Arduino IDE

  1. Ve a: https://www.arduino.cc/en/software
  2. Descarga la versión para tu sistema (Windows, Mac o Linux)
  3. Instala normalmente y abre Arduino IDE

Paso 2: Conexiones del Sensor TCS3200

Pin del Sensor Conectar a
VCC5V (Arduino)
GNDGND (Arduino)
S0Pin 8
S1Pin 9
S2Pin 12
S3Pin 11
OUTPin 10

Paso 3: Conexiones del Servo Motor

Cable del Servo Conectar a
Rojo (5V)5V (Arduino)
Negro (GND)GND (Arduino)
Amarillo (Señal)Pin 3 (PWM) ⭐
⚠️ CRÍTICO: El pin 3 DEBE ser PWM (tiene ~). Los pines PWM son: 3, 5, 6, 9, 10, 11

Paso 4: Calibración del Sensor

  1. Abre el Monitor Serial (Ctrl+Shift+M)
  2. Coloca una luneta ROJA cerca del sensor
  3. Observa los valores que aparecen
  4. Anota los valores de rojo, verde y azul
  5. Repite con lunetas VERDE y AZUL
  6. Los valores ideales están entre 50 y 300

Paso 5: Pruebas Finales

  • ROJO detectado → servo gira a IZQUIERDA (30°)
  • AZUL detectado → servo gira a DERECHA (150°)
  • VERDE detectado → servo en CENTRO (90°)

🎯 Tarjeta de Referencia Rápida

Rango del Servo Motor

   0° ← IZQUIERDA MÁXIMA
  30° ← IZQUIERDA (Rojo)
  90° ← CENTRO (Verde)
 150° ← DERECHA (Azul)
 180° ← DERECHA MÁXIMA

Detección de Colores

Ejemplo:
Rojo: 150, Verde: 75, Azul: 45
→ El ROJO es más alto = RESULTADO: ROJO

Atajos de Teclado:
Cargar: Ctrl+U
Verificar: Ctrl+R
Monitor Serial: Ctrl+Shift+M

Valores Esperados

Color Rojo Verde Azul
ROJO150-20040-6020-40
VERDE40-60150-20030-50
AZUL20-4040-60150-200

Checklist Antes de Empezar

  • Arduino conectado por USB
  • Placa seleccionada: "Arduino UNO"
  • Sensor TCS3200 conectado (7 cables)
  • Servo motor conectado (3 cables)
  • Código copiado en Arduino IDE
  • Monitor Serial a 9600 baudios

📚 Conceptos Educativos Clave

1. ¿Qué es Arduino?

Arduino es una mini computadora que puedes programar para controlar cosas del mundo real (motores, luces, sensores, etc.).

2. ¿Qué es PWM?

PWM = Pulse Width Modulation - Es encender y apagar algo muy rápidamente. Así controlas la intensidad.

3. ¿Qué es un Sensor?

Un sensor detecta algo del mundo real y lo convierte en datos que Arduino puede entender. Nuestro sensor TCS3200 detecta colores.

4. ¿Qué es un Servo Motor?

Un servo es un motor pequeño que sabes exactamente en qué ángulo está. Puedes controlarlo con precisión de 0 a 180 grados.

5. Funciones principales en el código

setup(): Se ejecuta UNA SOLA VEZ al encender

loop(): Se repite infinitamente

readColor(): Lee un color del sensor

detectColor(): Compara RGB y devuelve el color

moverServo(): Mueve el servo según el color

6. Operadores Lógicos

Operador Significado
==Igual a
>Mayor que
<Menor que
&&Y (ambas verdaderas)
||O (una verdadera)

7. Preguntas de Reflexión

Nivel 1 (Fácil):

  • ¿Cuáles son los tres colores primarios que detecta el sensor?
    Respuesta: Rojo, Verde, Azul

Nivel 2 (Medio):

  • ¿Por qué el Pin 3 debe ser PWM?
    Respuesta: Porque el servo necesita una señal PWM para controlar el ángulo

Nivel 3 (Difícil):

  • ¿Por qué loop() se ejecuta infinitamente?
    Respuesta: Porque Arduino necesita estar leyendo sensores constantemente