Explorando el mundo de los colores con el sensor TCS3472 y Arduino

Introducción 

En este blog aprenderás a utilizar el sensor TCS3472, capaz de identificar colores en formato RGB, medir la cantidad de luz en el ambiente y determinar la temperatura del color. Este conocimiento será útil para muchos proyectos de IoT, robótica, iluminación y más.

¿Qué es el sensor TCS3472?

El TCS3472 es un sensor de color RGB y luz ambiental de alta precisión fabricado por AMS. Este sensor puede detectar y medir la cantidad de luz roja, verde, azul y clara (RGB+C) que incide sobre él, permitiendo a los dispositivos electrónicos percibir el color y la luz de la misma manera que los humanos.

El TCS3472 utiliza una matriz de fotodiodos y un convertidor analógico a digital integrado para convertir la luz en una señal digital. Los cuatro tipos de fotodiodos (rojo, verde, azul y claro) permiten medir la intensidad de la luz en estos diferentes espectros y calcular el color y la intensidad de la luz en una escena.

El TCS3472 es capaz de comunicarse con microcontroladores y otros dispositivos electrónicos a través de una interfaz I2C. Es utilizado en una variedad de aplicaciones, incluyendo el ajuste automático del balance de blancos y la medición de luz ambiental en teléfonos móviles, la detección de color en proyectos de robótica y la calibración de color en pantallas y monitores.

Requisitos del Proyecto 

Para ejecutar este tutorial, necesitarás lo siguiente:

  • Una placa Arduino (como Arduino Uno)
  • Un módulo de sensor TCS3472
  • Cables de conexión
  • Arduino IDE instalado en tu computadora

Montaje del hardware

Deberás conectar el sensor TCS3472 a tu Arduino. La conexión exacta puede variar dependiendo de tu módulo específico, pero en general tendrás que conectar la alimentación (VCC a 3.3V, GND a GND) y la comunicación I2C (SDA a SDA, SCL a SCL).

Programación del sensor

Una vez que hayas conectado el sensor, deberás programar tu Arduino para comunicarse con él. Esto implica la lectura de los datos del sensor y su conversión en valores útiles.

Como primer paso hay que importar la librería "Adafruit_TCS34725". Desde el IDE de Arduino ve a Sketch -> Include Library -> Manage Libraries, luego busca "Adafruit_TCS34725" en la barra de búsqueda y haz clic en "Install".

Si te pide que instales librerías dependientes adicionales hazlo.

  A continuación, te proporcionaré un código de ejemplo que puedes usar para leer los datos del sensor. Este código leerá los datos de color y de luz del sensor y los imprimirá en el Monitor Serial. También incluirá una explicación de cada parte del código para que puedas entender cómo funciona.

1. Incluye las bibliotecas necesarias y crea una instancia del sensor TCS34725 con un tiempo de integración de 614ms y una ganancia de 1X.

 

#include <Wire.h>

#include "Adafruit_TCS34725.h"

Adafruit_TCS34725 tcs = Adafruit_TCS34725 (TCS34725_INTEGRATIONTIME_614MS, TCS34725_GAIN_1X);

2. En la función setup(), se inicializa la comunicación serial y se inicia la comunicación con el sensor TCS34725.
 

  Serial.begin(9600);

  tcs.begin();

3. En la función loop(), se leen de forma continua los valores crudos de los canales rojo, verde, azul y claro (c) del sensor con "getRawData()". Se calcula la temperatura de color y la lux con los valores crudos, después se normalizan los valores de los colores con respecto al valor claro y se escalan a un rango de 0-255.
  uint16_t r_raw, g_raw, b_raw, c, colorTemp, lux;
  float r, g, b;
  tcs.getRawData(&r_raw, &g_raw, &b_raw, &c);
  colorTemp = tcs.calculateColorTemperature_dn40(r_raw, g_raw, b_raw, c);
  lux = tcs.calculateLux(r_raw, g_raw, b_raw);
  float rNorm = (float)r_raw / c;
  float gNorm = (float)g_raw / c;
  float bNorm = (float)b_raw / c;
  uint8_t rScaled = rNorm * 255;
  uint8_t gScaled = gNorm * 255;
  uint8_t bScaled = bNorm * 255;

 

4. Se crea la función printColor() con los valores RGB escalados. Esta función compara los valores de rojo, verde y azul, e imprime el color que tiene el valor más alto. Si ninguno de los colores es el más alto, imprime "Color no identificado".

void printColor(uint16_t red, uint16_t green, uint16_t blue) {
  if (red > green && red > blue) {
    Serial.println("Rojo");
  } else if (green > red && green > blue) {
    Serial.println("Verde");
  } else if (blue > red && blue > green) {
    Serial.println("Azul");
  } else {
    Serial.println("Color no identificado");
  }
}

 

Ten en cuenta que la detección de color con "printColor()" es muy básica y solo sirve para colores puros (rojo, verde, azul). Para una detección más precisa, necesitas un algoritmo más complejo.

 El código completo queda de la siguiente forma:

Resultados

Después de subir el sketch al arduino y abrir el monitor serial a 9600 bauds debes obtener resultados parecidos, prueba con objetos de diferentes tonos y ve que valores obtienes.

Aquí tienes una herramienta que te muestra una tabla de colores RGB que con solo pasar el cursor del ratón por encima, te mostrará el código del color que corresponde a ese tono.

También puedes probar a conectar y desconectar a GND el pin LED que por defecto esta encendido pero se puede controlar desde un pin digital de arduino.

Conclusiones

 Este ejemplo puede servirte de base para explorar y crear nuevos proyectos por tu cuenta, por ejemplo, puedes construir un dispositivo que ayude a las personas con daltonismo a identificar colores, un sistema de clasificación de colores que use el TCS3472 para clasificar objetos de diferentes colores en diferentes compartimentos o un dispositivo que utiliza el sensor para determinar si una fruta ha madurado en función de su color.

 

Productos Relacionados

Ver artículo

Ver artículo

Sensor de color

Deja un comentario