En este proyecto aprenderemos a utilizar el sensor GY-9960 junto con Arduino para detectar colores básicos como rojo, verde y azul. Además, veremos cómo encender un LED correspondiente al color detectado, ideal para aplicaciones como robots clasificadores, control de iluminación o proyectos interactivos.



¿Qué es el sensor GY-9960 y cómo funciona?

El GY-9960 es un sensor compacto que combina funciones de detección de colores, proximidad y gestos. Utiliza un fotodiodo RGB y un filtro óptico para medir la intensidad de la luz roja, verde y azul que refleja un objeto. Su comunicación I2C lo hace fácil de integrar con Arduino, y gracias a su capacidad para discriminar colores, es perfecto para proyectos que requieren interacción visual.

El principio básico del sensor es la medición de la intensidad de luz reflejada en los canales rojo, verde y azul. Dependiendo del equilibrio de estas intensidades, podemos determinar el color predominante del objeto frente al sensor.


Materiales necesarios:

  • Arduino Uno.
  • Sensor GY-9960 (APDS-9960).
  • Tres LED (rojo, verde y azul).
  • Resistencias de 220 ohmios para los LED.
  • Protoboard y cables de conexión.

Esquema de conexión:

Circuito-Detector-de-Colores-Diagrama-de-Conexión


  1. Sensor GY-9960:

    • VCC → 3.3V en Arduino.
    • GND → GND en Arduino.
    • SDA → A4 en Arduino.
    • SCL → A5 en Arduino.
  2. LEDS:

    • Conecta cada LED a un pin digital:
      • LED rojo → Pin 8.
      • LED verde → Pin 9.
      • LED azul → Pin 10.
    • El otro extremo de cada LED va a través de una resistencia de 220 ohmios hacia GND.

Código para Arduino

Para el funcionamiento de nuestro código deberemos tener instaladas en nuestra IDE las librerías <Wire.h><Adafruit_APDS9960.h>

Método 1: Instalación desde el Administrador de Librerías

  1. Abre el IDE de Arduino.
  2. Ve a Herramientas > Administrar Librerías
    s...
    .
  3. En el buscador, escribe APDS9960.
  4. Busca la librería llamada AdafruitAPDS9960 by Adafruit y haz clic en Instalar .

Método 2: Manual de instalación

Si no encuentras la librería en el Administrador de Librerías

, puedes instalarla manualmente:

  1. Descarga la librería AdafruitAPDS9960 by Adafruit desde el repositorio de GitHub :
    • Haz clic en el botón Código > Descargar ZIP .
  2. Abre el IDE de Arduino.
  3. Ve a Sketch > Incluir librería > Añadir Librería
     .ZIP...
    .
  4. Selecciona el archivo ZIP descargado y confirma.
El mismo procedimiento deberás seguir para instalar la librería <Wire.h>
#include <Wire.h>
#include <Adafruit_APDS9960.h>

Adafruit_APDS9960 apds;

const int ledRojo = 5;    // Pin para el LED rojo
const int ledVerde = 6;   // Pin para el LED verde
const int ledAzul = 7;    // Pin para el LED azul

void setup() {
  Serial.begin(9600);

  // Inicializa el sensor
  if (!apds.begin()) {
    Serial.println("Error: No se pudo inicializar el sensor APDS9960.");
    while (1);
  }

  Serial.println("Sensor APDS9960 iniciado correctamente.");

  // Configuración del sensor para lecturas de color
  apds.enableColor(true); // Habilita el sensor de color
  apds.setADCIntegrationTime(10); // Reduce el tiempo de integración para lecturas rápidas

  // Configuración de los pines de los LEDs
  pinMode(ledRojo, OUTPUT);
  pinMode(ledVerde, OUTPUT);
  pinMode(ledAzul, OUTPUT);
  apagarTodos(); // Asegúrate de que los LEDs estén apagados al inicio
}

void loop() {
  uint16_t r, g, b, c;

  // Verifica si hay datos de color listos
  if (apds.colorDataReady()) {
    // Obtiene los valores de color
    apds.getColorData(&r, &g, &b, &c);

    // Imprime los valores en el monitor serie
    Serial.print("Rojo: ");
    Serial.print(r);
    Serial.print(" Verde: ");
    Serial.print(g);
    Serial.print(" Azul: ");
    Serial.print(b);
    Serial.print(" Claro: ");
    Serial.println(c);

    // Lógica para encender los LEDs
    if (g > 250) {          // Verde predominante
      encenderLED(ledVerde);
    } else if (r > 100) {   // Rojo predominante
      encenderLED(ledRojo);
    } else if (b > 120) {   // Azul predominante
      encenderLED(ledAzul);
    } else {                // Sin color predominante
      apagarTodos();
    }
  } else {
    Serial.println("Esperando datos del sensor...");
  }

  delay(500); // Pausa entre lecturas
}

// Función para encender un LED y apagar los demás
void encenderLED(int led) {
  digitalWrite(ledRojo, LOW);
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAzul, LOW);

  digitalWrite(led, HIGH);
}

// Función para apagar todos los LEDs
void apagarTodos() {
  digitalWrite(ledRojo, LOW);
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAzul, LOW);
}

Cómo funciona el programa:

  1. Inicialización del sensor: El código activa la función de detección de colores del GY-9960 mediante la librería Adafruit_APDS9960.
  2. Lectura de datos: Se capturan los valores de luz reflejada en los canales rojo, verde y azul.
  3. Condiciones de detección: Según cuál canal tenga mayor intensidad, se determina el color predominante y se enciende el LED correspondiente.
  4. Visualización: Los datos de color también se imprimen en el Monitor Serie, permitiendo ver los valores exactos detectados por el sensor.

Posibles aplicaciones:

  • Clasificación de objetos según su color.
  • Detección de colores para proyectos educativos.
  • Control de iluminación reactivado basado en colores detectados.

Conclusión:

El sensor GY-9960 es una herramienta poderosa para proyectos de detección de colores con Arduino. Con su capacidad para medir colores y proximidad, puede ampliar este proyecto agregando funciones como control por gestos o activación automática según la distancia.

¿Te ha gustado este proyecto? ¡Déjanos tu opinión en los comentarios y comparte tus resultados!