Skip to Content

Interfaz ESP32 y sensor de color RGB TCS34725 – Un tutorial completo

Interfaz ESP32 y sensor de color RGB TCS34725 – Un tutorial completo

En este artículo, te mostraré cómo usar el sensor de color RGB TCS34725 con un microcontrolador ESP32 para medir la temperatura de color de un objeto y la información de lux.

El sensor de color TCS34725 se utiliza en el control de procesos industriales, industrias de procesamiento de alimentos, instalaciones de clasificación, smartphones, tablets, grandes monitores de TV y electrodomésticos para la detección de luz ambiental.

El sensor RGB TCS34725 es un sensor preciso y potente. La sensibilidad es excelente, por lo que puedes mantener el sensor dentro de un vidrio, protegerlo y aún así hacerlo funcionar para aplicaciones de detección de color y luz ambiental.

También cuenta con características interesantes, lo que lo convierte en mi opción número uno para aplicaciones de detección de color.

Este artículo te mostrará cómo usar un sensor de color TCS34725 con un ESP32. Compartiré una guía de conexión, código de ejemplo para ESP32 con el sensor de color y también responderé algunas preguntas frecuentes sobre el TCS34725.

¡Vamos a empezar!

Componentes necesarios para construir el proyecto ESP32 y sensor RGB TCS34725

Componentes de hardware

Software

Guía

Fundamentos del sensor de color RGB TCS34725

Vamos a entender el principio básico de funcionamiento, características, pines y aplicaciones del sensor de color RGB. Conocer estos detalles te dará confianza para elegir el sensor RGB TCS34725 para aplicaciones adecuadas.

El TCS34725 es un sensor color a digital. Puede detectar:

  • Rojo
  • Verde
  • Azul
  • Y luz clara

A un nivel alto, el diagrama a continuación ilustra lo que hace el TCS34725. La luz entra al sensor a través de un filtro infrarrojo (IR). Los cuatro sensores independientes son sensibles solo a un color de luz específico.

Color Sensing
Detección de color

Los sensores entregan un valor analógico que es convertido en digital por 4 convertidores analógico-digitales (ADC) internos al sensor de color. Los datos se pueden leer usando I2C.

 Ahora puedes usar esta información para construir sensores de color y luz ambiental y otros proyectos útiles.

Aquí está el diagrama de bloques del sensor.

Block diagram of TCS34725
Diagrama de bloques del TCS34725

¡Te explicaré los conceptos clave que necesitas conocer!

Características

Se usan fotodiodos para detectar la cantidad de luz que incide sobre ellos. La corriente del fotodiodo varía según la luz que recibe. Tomemos las características del fotodiodo como ejemplo.

Light sensing characteristics of TCS34725
Características de detección de luz del TCS34725

El diagrama anterior muestra que a medida que aumenta la intensidad de luz, la corriente inversa aumenta. En el caso del sensor de color, los fotodiodos tienen filtro rojo, filtro verde, filtro azul y sin filtro.

Así, el fotodiodo con filtro rojo solo ve el color ROJO y nada más. En otras palabras, el diodo solo responde al color ROJO.

De manera similar, los fotodiodos verde y azul solo responden a los colores verde y azul. El cuarto fotodiodo responde a todos los colores (sin filtro). ¿Suena fácil?

4 ADCs convierten simultáneamente esta corriente del fotodiodo en valores digitales, que puedes leer con el ESP32.

Responsividad

Para una fuente de luz de prueba, así responde el sensor TCS34725.

Spectral Responsivity of TCS34725
Responsividad espectral del TCS34725

Puedes ver cómo los cuatro sensores de color son sensibles a los colores correspondientes.

Por ejemplo, el sensor azul tiene su pico por encima de 450 nm y hasta 500 nm. De manera similar, los sensores de luz verde y roja tienen picos en longitudes de onda específicas.

Consulta la tabla a continuación para los colores y rangos de longitud de onda correspondientes.

Wavelength ranges of TCS34725
Rangos de longitud de onda del TCS34725

Ahora te enseñaré sobre todos los registros internos del sensor de color TCS34725. Esto te ayudará a configurarlos en el futuro según tus necesidades, como agregar más tiempo de espera o aumentar la ganancia (para condiciones de poca luz), etc.

Antes de presentar todos los registros, quiero mostrarte una tabla donde puedes entender cómo la configuración de los registros afecta el tiempo de conversión y el consumo de corriente.

En la tabla a continuación, puedes ver cómo varía el consumo promedio de corriente del dispositivo al habilitar diferentes duraciones de espera usando los bits WEN, WTIME y WLONG.

WEN WTIME WLONG ESTADO DE ESPERA CORRIENTE PROMEDIO DD CORRIENTE
0 n/a n/a 0 ms 291 μA
1 0xFF 0 2.40 ms 280 μA
1 0xEE 0 43.2 ms 152 μA
1 0x00 0 614 ms 82 μA
1 0x00 1 7.37 s 67 μA

¡Tú eliges el equilibrio entre consumo de corriente y velocidad!

Registros del TCS34725

A continuación, encontrarás los registros y su significado. Te haré un resumen de todos los registros en la siguiente sección.

Dirección Nombre del registro Función del registro Valor de reinicio
−− COMANDO Especifica la dirección del registro 0x00
0x00 ENABLE Habilita estados e interrupciones 0x00
0x01 ATIME Tiempo RGBC 0xFF
0x03 WTIME Tiempo de espera 0xFF
0x04 AILTL Umbral bajo de interrupción baja byte 0x00
0x05 AILTH Umbral bajo de interrupción alta byte 0x00
0x06 AIHTL Umbral alto de interrupción baja byte 0x00
0x07 AIHTH Umbral alto de interrupción alta byte 0x00
0x0C PERS Filtro de persistencia de interrupción 0x00
0x0D CONFIG Configuración 0x00
0x0F CONTROL Control 0x00
0x12 ID ID del dispositivo ID
0x13 STATUS Estado del dispositivo 0x00
0x14 CDATAL Dato claro byte bajo 0x00
0x15 CDATAH Dato claro byte alto 0x00
0x16 RDATAL Dato rojo byte bajo 0x00
0x17 RDATAH Dato rojo byte alto 0x00
0x18 GDATAL Dato verde byte bajo 0x00
0x19 GDATAH Dato verde byte alto 0x00
0x1A BDATAL Dato azul byte bajo 0x00
0x1B BDATAH Dato azul byte alto 0x00

Registro de comando

El registro de comando especifica la dirección del registro objetivo para futuras operaciones de lectura y escritura. Usas este comando para seleccionar el tipo de transacción del protocolo.

Eliges qué registro quieres leer o escribir usando este registro de comando.

Registro Enable

El registro Enable se usa principalmente para encender y apagar el dispositivo TCS3472, y para habilitar funciones e interrupciones.

Registro de tiempo RGBC

El registro de tiempo RGBC controla el tiempo de integración interno de los ADCs de los canales RGBC claro e IR en incrementos de 2.4 ms.

Aumentar el tiempo de integración mejora la sensibilidad a costa de tiempo. Si puedes esperar unos cientos de ms, recomiendo elegir tiempos de integración más largos.

Registro de tiempo de espera

Usas el registro de tiempo de espera para insertar pausas entre conversiones. Esto ayuda a reducir el consumo promedio de corriente.

Registros de umbral de interrupción RGBC

Usas estos registros para establecer los umbrales de señal del ADC. El IC del sensor de color activará la señal INT (interrupción) si la lectura de color cruza este umbral. Útil para actuar cuando el proceso de mezcla de colores falla (por ejemplo, en producción industrial).

Registro de persistencia

El registro de persistencia controla cómo el dispositivo filtra las interrupciones. Puedes configurarlo para recibir una interrupción después de cada ciclo de integración o cuando la integración exceda los valores establecidos por el registro de umbral durante un período específico.

Registro de configuración

Este registro te ayuda a configurar el tiempo de espera largo. Si escribes 1 en el bit WLONG, el retardo (programado en el registro WTIME) se multiplicará por 12x.

Registro de control

El registro de control te da ocho bits para controlar varias funciones en el bloque analógico. Estos bits se usan para ajustar la ganancia y otras funciones similares.

Registro ID

Proporciona el ID del IC. Es un registro de solo lectura. Para el TCS34725 el ID es 0x44. Para el TCS34723, es 0x4D.

Registro de estado

Puedes leer el estado interno del IC usando este registro.

Registros de datos del canal RGBC

Por último, este es el registro que leerás todo el tiempo. Aquí obtienes los datos digitales del sensor para rojo, verde, azul y luz clara.

¿Cómo programar un tiempo de integración particular?

Supongamos que quieres integrar los datos del sensor durante 100 ms. Entonces, el valor a programar en el registro ATIME se calcula como sigue.

valor = 256 – (100/2.4) = 256 – 42 = 214 = 0xD6

Gestión de energía en el sensor de color RGB TCS34725

Como sabes que el sensor consume solo 65 uA durante el estado de espera, puedes usar esta información para gestionar el consumo de energía.

Puedes añadir más estados de espera para reducir el consumo promedio de corriente. Esto es muy útil cuando alimentas el sensor con batería.

Variando los estados de espera, puedes controlar la corriente promedio total del sensor.

La imagen anterior te da una idea de cómo los diferentes valores WAIT, junto con el bit WLONG, pueden ayudarte a reducir la corriente promedio de alimentación del sensor casi al mismo nivel que la corriente en espera.

En las siguientes secciones, veamos el pinout del sensor de color RGB seguido de la guía de conexión.

Características del sensor de color RGB TCS34725

Aquí están las características clave del sensor de color TCS34725 resumidas en una tabla:

Parámetro Rango
Corriente de alimentación (Activo) 330 uA (máximo)
Corriente en reposo 10 uA (máx)
Tamaño del paso de integración ADC 2.56 ms
Cuenta ADC por paso 1024 cuentas
Valor máximo de cuenta ADC 65535 cuentas
Tamaño del paso de espera 2.4 ms
Frecuencia del reloj I2C 400 kHz
Voltaje de alimentación 2.7 V a 3.6 V
Temperatura de operación -30 ℃ a 70 ℃

Aplicaciones del sensor de color RGB TCS34725

Hay muchas aplicaciones diferentes para el sensor de color RGB TCS34725, incluyendo:

  1. Electrónica de consumo: El sensor TCS34725 es un excelente candidato para detectar la luz ambiental disponible y ajustar automáticamente el brillo o modo de pantalla (regular / modo nocturno).
  1. Industria automotriz – Puedes usar el sensor para ajustar las luces programables según el garaje o el lugar de fondo donde esté el vehículo.
  1. Salud – Puedes usar el sensor de color RGB TCS34725 para monitorear el color de fluidos de prueba como orina y sangre para diagnósticos automáticos más rápidos.
  1. Procesamiento de alimentos – ¡Fríe hasta que las cebollas estén doradas! El sensor puede ayudarte a detectarlo. También puede ayudarte a clasificar frutas según su color (maduras o no).
  1. Robótica – puedes usar codificación por color y pedir a los robots que realicen tareas específicas según el código de color en el dispositivo / caja.

¿Para qué usas el sensor? Cuéntamelo en la sección de comentarios abajo.

Definición de pines del sensor de color RGB TCS34725

La imagen a continuación muestra la vista superior del IC TCS34725 con los detalles de los pines.

Pinout of TCS34725
Pinout del TCS34725

La siguiente tabla proporciona los detalles de los pines del sensor de color TCS34725.

Número de pin Nombre del pin Función del pin
1 VDD Voltaje de alimentación
2 SCL Línea de reloj I2C para comunicación serial I2C
3 GND Tierra
4 NC Sin conexión – No conectes nada a este pin.
5 INT Interrupción – drenaje abierto (activo bajo)
6 SDA Línea de datos I2C para comunicación serial I2C

Cómo conectar el módulo sensor de color RGB TCS34725 con ESP32

Ahora, te mostraré cómo construir un proyecto usando un ESP32 y el sensor de color RGB TCS34725. Empecemos con las conexiones de hardware.

Hay muchas variantes disponibles para las placas del sensor. Como ya conoces bien los fundamentos y la definición de pines, no hay de qué preocuparse.

 Tendrás confianza para usar las placas siguiendo la guía de conexión. Empecemos.

Paso 1: Completa las conexiones de hardware

El sensor de color TCS34725 se comunica por I2C. Como mínimo, necesitas conectar alimentación, tierra y las líneas I2C. Las conexiones son simples de entender y seguir, como se ve en el diagrama anterior.

Siempre comienza con las conexiones a tierra. Alimenta todo el sistema solo después de completar todas las conexiones.

Estoy usando GPIO21 y GPIO22 en mi ejemplo. Puedes elegir otros pines también.  Si usas pines diferentes, edita el código en consecuencia.

El resumen de conexiones entre el sensor de color RGB TCS34725 y ESP32 está en la tabla a continuación.

SDA Línea de datos I2C
SCL Línea de reloj I2C
3V3 Alimentación de 3.3 V
GND Conexiones a tierra

En el siguiente paso, programaremos la placa ESP32.

Paso 2: Programa el ESP32 con el código del sensor RGB a continuación

Sigue el siguiente paso para entender la implementación del código. Puedes usar el código a continuación para probar el módulo ESP32 y el módulo sensor RGB conectado basado en el sensor de color TCS34725.

#include "Wire.h"
#include "Adafruit_TCS34725.h"
/*
  Connect SCL to analog 5
  Connect SDA to analog 4
  Connect VDD to 3.3V DC
  Connect GROUND to common ground */

/* Initialise with default values (int time = 2.4ms, gain = 1x) */
// Adafruit_TCS34725 tcs = Adafruit_TCS34725();

/* Initialise with specific int time and gain values */
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);

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

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  // Now we're ready to get readings!
}

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

  tcs.getRawData(&r, &g, &b, &c);
  colorTemp = tcs.calculateColorTemperature(r, g, b);
  lux = tcs.calculateLux(r, g, b);

  Serial.print("Color Temp: "); Serial.print(colorTemp, DEC);
  Serial.print(" K - ");
  Serial.print("Lux: "); Serial.print(lux, DEC); Serial.print(" - ");
  Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");
  Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");
  Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");
  Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");
  Serial.println(" ");
}

Paso 3: Recorrido del código para el sensor de color TCS34725

Vamos a recorrer el código. Este ejemplo es para el sensor de color RGB TCS34725. Comienzas el código incluyendo la librería wire para comunicación I2C y la librería TCS34725 de Adafruit.

Puedes construir tu proyecto sobre este código para contar o clasificar objetos que controlen módulos de relé basados en el valor leído por los sensores de color.

(Piensa en clasificar tomates entre maduros y no maduros)

#include "Wire.h"
#include "Adafruit_TCS34725.h"

Hay dos formas de inicializar el sensor de color: con valores por defecto (tiempo de integración de 2.4 ms y ganancia de 1x) o con valores específicos de tiempo de integración y ganancia.

El método usado en este código es el segundo, con un tiempo de integración de 700 ms y ganancia de 1x.

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

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  // Now we're ready to get readings!
}

En la función setup() se inicializa la comunicación serial a 9600 baudios. Luego, se llama a la función tcs.begin() para inicializar el sensor de color. Se imprime el mensaje « Found sensor » en el monitor serial si se encuentra el sensor.

De lo contrario, se imprime el mensaje « No TCS34725 found … check your connections » y el programa queda atrapado en un bucle infinito.

while (1);

Necesita un reinicio después de revisar el cableado.

En la función loop(), se obtienen las lecturas del sensor de color llamando a la función

tcs.getRawData(&r, &g, &b, &c), que almacena los valores rojo, verde, azul y claro en las variables r, g, b y c, respectivamente.

Luego, calculas la temperatura de color y los valores de lux usando las funciones tcs.calculateColorTemperature(r, g, b) y tcs.calculateLux(r, g, b), respectivamente.

Finalmente, se imprimen la temperatura de color, lux, rojo, verde, azul y valores claros en el monitor serial.

Espero que la explicación del código del sensor de color RGB TCS34725 te haya sido útil.

Preguntas frecuentes sobre el sensor RGB TCS34725

He incluido una lista de las preguntas más frecuentes sobre el sensor de color TCS34725.

¿Cuál es la interfaz de comunicación usada por el TCS34725?

Puedes usar la interfaz I2C para comunicarte con el sensor. El sensor soporta modo rápido (hasta 400 kbits/s).

¿Cuál es el rango de voltaje de operación del sensor de color TCS34725?

El TCS34725 opera en un rango de voltaje de 2.7 V a 3.6 V. Si el bus I2C está conectado a 1.8 V, el voltaje máximo es 3.3 V.

¿Cuál es la respuesta espectral del TCS34725?

La respuesta espectral del sensor es similar a la del ojo humano.

Consulta la sección de Fundamentos en este artículo para saber más sobre la sensibilidad al color y otra información interesante sobre el sensor.

¿Cuál es la resolución del TCS34725?

El TCS34725 tiene una resolución de 16 bits por canal, permitiendo más de 16 millones de combinaciones de color diferentes. Cada color tiene un ADC dedicado seguido del fotosensor. Además de los bits RGB, también tienes 16 bits de información sobre la luz clara.

¿Para qué aplicaciones se usa el TCS34725?

El TCS34725 se usa en aplicaciones de detección de color y luz ambiental. Para entender por qué el sensor TCS3725 es tan adecuado, consulta la sección de fundamentos de este artículo.

  • Productos de salud/fitness
  • Detección de luz ambiental (para ajustar automáticamente el brillo del televisor, por ejemplo)
  • Control de procesos industriales (para monitorear la calidad de productos según el color)
  • Automatización de diagnósticos médicos y más.

¿Es el TCS34725 compatible con ESP32?

Sí, el TCS34725 es totalmente compatible con ESP32. No necesitas usar convertidores de nivel. En mi opinión, el sensor puede ser más compatible con ESP32 que con Arduino UNO.

Conclusión

Este artículo ha cubierto toda la información esencial sobre el sensor RGB TCS34725, incluyendo cómo funciona, detalles de pines, información de registros, características clave y aplicaciones.

Conocer información detallada sobre los sensores te ayuda a decidir y construir proyectos más potentes usando el sensor TCS34725.

También compartí una guía de conexión para ESP32 y un código de ejemplo con explicación, que puedes usar para probar y adaptar a tus propios proyectos.

Si tienes más preguntas sobre los sensores, por favor publícalas en la sección de comentarios.

¡Me encantaría saber de ti! Cuéntanos si hay algo más que te gustaría que cubriera en futuros artículos.