🎉 Bienvenidos al Proyecto
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
- Ve a la sección "Guía Paso a Paso" e instala Arduino IDE
- Haz todas las conexiones siguiendo el diagrama
- Copia el programa desde la sección "Programa"
- Calibra el sensor con las lunetas de colores
- ¡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.
- Abre Arduino IDE
- Ve a Archivo → Nuevo
- Copia todo el código de abajo
- Haz clic en "Cargar" (flecha hacia la derecha)
- 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);
}
📖 Guía Paso a Paso
Paso 1: Descargar e Instalar Arduino IDE
- Ve a: https://www.arduino.cc/en/software
- Descarga la versión para tu sistema (Windows, Mac o Linux)
- Instala normalmente y abre Arduino IDE
Paso 2: Conexiones del Sensor TCS3200
| Pin del Sensor | Conectar a |
|---|---|
| VCC | 5V (Arduino) |
| GND | GND (Arduino) |
| S0 | Pin 8 |
| S1 | Pin 9 |
| S2 | Pin 12 |
| S3 | Pin 11 |
| OUT | Pin 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) ⭐ |
Paso 4: Calibración del Sensor
- Abre el Monitor Serial (Ctrl+Shift+M)
- Coloca una luneta ROJA cerca del sensor
- Observa los valores que aparecen
- Anota los valores de rojo, verde y azul
- Repite con lunetas VERDE y AZUL
- 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
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 |
|---|---|---|---|
| ROJO | 150-200 | 40-60 | 20-40 |
| VERDE | 40-60 | 150-200 | 30-50 |
| AZUL | 20-40 | 40-60 | 150-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
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