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
- ESP32 Wroom 2.4 GHz with integrated Antenna x 1
- RGB Color Sensor Module – TCS34725 x 1
- Dupont wire x 1 set
- Micro USB Cable for ESP32 (para alimentar el ESP32 y programarlo) x 1
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.

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.

¡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.

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.

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.

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:
- 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).
- 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.
- 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.
- 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).
- 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.

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.


