El sensor de color GY-33 es un detector de color a todo color que incluye un microcontrador (MCU), un chip sensor TCS34725 RGB y dos luces LED blancas. El GY-33 puede detectar y medir casi toda la luz visible dentro de un cierto rango. Es adecuado para aplicaciones de medición de colorímetro, como la impresión en color, el diagnóstico médico, la calibración del monitor de color por computadora y el control de procesos de pinturas, textiles, cosméticos y materiales impresos.
El color del objeto que se ve generalmente es en realidad que la superficie del objeto absorbe una parte del componente coloreado de la luz blanca (luz diurna) que se irradia sobre él, y la otra parte del color reflejado refleja la reacción de la luz coloreada en el ojo humano. El blanco se compone de luz visible de varias frecuencias, es decir, la luz blanca contiene luz de color de varios colores (como rojo R, amarillo Y, verde G, azul V, azul B, púrpura P). De acuerdo con la teoría de los tres colores primarios del físico alemán Helmholtz, los diversos colores son una mezcla de tres colores primarios (rojo, verde, azul) en diferentes proporciones.
De acuerdo con el principio de detección de tres colores primarios anterior, si se conocen los valores de los tres colores primarios que constituyen los colores respectivos, se puede conocer el color del objeto a probar. Para el GY-33, cuando se selecciona un filtro de color, solo permite que pase un cierto color primario, impidiendo el paso de otros colores primarios. Por ejemplo, cuando se selecciona el filtro rojo, solo el rojo puede pasar a través de la luz incidente, y tanto el azul como el verde se bloquean, de modo que se puede obtener la intensidad de la luz roja. De igual forma, al seleccionar otros filtros, luz azul y la intensidad de la luz verde. A través de estos tres valores de intensidad de luz, se puede analizar el color de la luz reflejada en el chip en el sensor.
El módulo se puede alimentar de 3 V a 5 V, y tiene un consumo de 15 mA. Los datos de color mediante el módulo GY-33 se pueden recibir de tres formas diferentes:
La frecuencia de actualización de datos del módulo es de aproximadamente 10 Hz. El módulo incorpora un puerto serie y un módulo de salida IIC a través del MCU, que de manera predeterminada se establece en el modo de puerto serie, y un puerto IIC para comunicarse directamente con el sensor TCS34725.
| Nombre | Parámetro |
|---|---|
| Rango de medida | RGB 0-255 |
| Respuesta en frecuencia | 10 Hz |
| Voltaje de trabajo | 3 a 5 V |
| Corriente nominal | 15 mA |
| Temperatura de trabajo | -20º a +85º |
| Temperatura de almacenamiento | -40º a +125º |
| Dimensiones | 24,3 mm x 26,7 mm |
| Chip sensor | TCS34725 |


| # | NOMBRE | FUNCIÓN |
|---|---|---|
| 1 | VCC | Alimentación + (3V-5V) |
| 2 | CT | Modo Puerto serie TTL UART_TX (S0=1) (defecto) / Modo IIC SCL (S0=0) |
| 3 | DR | Modo Puerto serie TTL UART_RX (S0=1) (defecto) / Modo IIC SDA (S0=0) |
| 4 | GND | Masa GND |
| 5 | NC | Reservado, no conectar |
| 6 | INT | TCS34725 Interrupt (S1=0, puente a G) |
| 7 | SDA | TCS34725 IIC SDA (S1=0, puente a G) |
| 8 | SCL | TCS34725 IIC SCL (S1=0, puente a G) |
| A | S0 | Selección MCU pins 2 y 3: Modo Serie → S0=1 / Modo IIC → S0=0 |
| B | S1 | Selección MCU+TCS34725 pins 7 y 8: Sin uso → S1=1 / solo TCS34725 Modo IIC → S1=0 |


S0 con G y/o S1 con G. El terminal G es masa, por lo que si no se puentean tienen un 1 y si se puentean un 0: | S1 | S0 | Funcionamiento | Conexión al Arduino Nano | Librerías necesarias |
|---|---|---|---|---|
| 0 | 1 | Sólo chip de color. Usar conexiones SDA y SCL de la placa. | SDA a A4, SCL a A5 | Wire.h, Adafruit_TCS34725.h |
| 1 | 0 | MCU. Modo I2C: DR = SDA / CT = SCL | DR a A4, CT a A5 | ? Sin probar |
| 1 | 1 | MCU. Modo puerto serie UART niveles TTL: DR = RX / CT = TX. Por defecto (Sin puente alguno) | CT a RX, DR a TX | ? Sin probar |
Para poder utilizar la comunicación directa mediante IIC con el sensor TCS34725, hay que conectar a masa (GND) el pin S1 del GY-33 (S1=0). A partir de ese momento podemos acceder directamente al TCS34725 mediante los pines SCL, SDA e INT. La comunicación con el MPU se mantiene según la configuración del pin S0 (S0=1 –> serie; S0=0 –> IIC).
La dirección IIC por defecto del sensor TCS34725 es 0x29. La explicación de los registros se encuentra en el datasheet, pero hay que tener en cuenta el uso del registro de comandos. Al especificar una dirección, hay que añadirle el valor de configuración del registro de comandos, con lo que los tres bits más altos corresponde al valor del comando, y los 5 bits restantes a la dirección. Por ejemplo, si la configuración del comando es acceder al registro de comandos (Bit 7=1), los datos de transacción del protocolo se van autoincrementando (Bits 6=0, Bit 5=1), y queremos acceder al registro del identificador del dispositivo “Device ID” que es el 0x12 (Bits 4:0=10010), hay que indicar que el registro es 0xB2 (10110010).
Aquí tenemos la tabla con los diferentes registros, indicando la dirección original y la direccion + comando, suponiendo que el comando es indicado en el ejemplo donde se accede al registro de comandos y los datos se autoincrementan (Bits 7:5=101):
| Dirección original | Dirección + comando | R/W | Nombre del registro | Función del registro | Valor de reset |
|---|---|---|---|---|---|
| - | - | W | COMMAND | Specifies register address | 0x00 |
| 0x00 | 0xA0 | R/W | ENABLE | Enables states and interrupts | 0x00 |
| 0x01 | 0xA1 | R/W | ATIME | RGBC time | 0xFF |
| 0x03 | 0xA3 | R/W | WTIME | Wait time | 0xFF |
| 0x04 | 0xA4 | R/W | AILTL | Clear interrupt low threshold low byte | 0x00 |
| 0x05 | 0xA6 | R/W | AILTH | Clear interrupt low threshold high byte | 0x00 |
| 0x06 | 0xA6 | R/W | AIHTL | Clear interrupt high threshold low byte | 0x00 |
| 0x07 | 0xA7 | R/W | AIHTH | Clear interrupt high threshold high byte | 0x00 |
| 0x0C | 0xAC | R/W | PERS | Interrupt persistence filter | 0x00 |
| 0x0D | 0xAD | R/W | CONFIG | Configuration | 0x00 |
| 0x0F | 0xAF | R/W | CONTROL | Control | 0x00 |
| 0x12 | 0xB2 | R | ID | Device ID | 0x00 |
| 0x13 | 0xB3 | R | STATUS | Device status | 0x00 |
| 0x14 | 0xB4 | R | CDATAL | Clear data low byte | 0x00 |
| 0x15 | 0xB5 | R | CDATAH | Clear data high byte | 0x00 |
| 0x16 | 0xB5 | R | RDATAL | Red data low byte | 0x00 |
| 0x17 | 0xB7 | R | RDATAH | Red data high byte | 0x00 |
| 0x18 | 0xB8 | R | GDATAL | Green data low byte | 0x00 |
| 0x19 | 0xB9 | R | GDATAH | Green data high byte | 0x00 |
| 0x1A | 0xBA | R | BDATAL | Blue data low byte | 0x00 |
| 0x1B | 0xBB | R | BDATAH | Blue data high byte | 0x00 |
0x5A, luego la dirección de 8 bits es 0xB4.| 0x00 | Solo Lectura | RAW_RED_H | Parte alta del valor original rojo (8 bits) |
| 0x01 | Solo Lectura | RAW_RED_L | Parte baja del valor original rojo (8 bits) |
| 0x02 | Solo Lectura | RAW_GREEN_H | Parte alta del valor original verde (8 bits) |
| 0x03 | Solo Lectura | RAW_GREEN_L | Parte baja del valor original verde (8 bits) |
| 0x04 | Solo Lectura | RAW_BLUE_H | Parte alta del valor original azul (8 bits) |
| 0x05 | Solo Lectura | RAW_BLUE_L | Parte baja del valor original azul (8 bits) |
| 0x06 | Solo Lectura | RAW_CLEAR_H | Parte alta del valor original clear (8 bits) |
| 0x07 | Solo Lectura | RAW_CLEAR_L | Parte baja del valor original clear (8 bits) |
| 0x08 | Solo Lectura | Lux_H | Parte alta del brillo (8 bits) |
| 0x09 | Solo Lectura | Lux_L | Parte baja del brillo (8 bits) |
| 0x0A | Solo Lectura | CT_H | Parte alta de la temperatura de color (8 bits) |
| 0x0B | Solo Lectura | CT_L | Parte baja de la temperatura de color (8 bits) |
| 0x0C | Solo Lectura | R | Valor de rojo tras tratar por el MCU (8 bits) |
| 0x0D | Solo Lectura | G | Valor de verde tras tratar por el MCU (8 bits) |
| 0x0E | Solo Lectura | B | Valor de azul tras tratar por el MCU (8 bits) |
| 0x0F | Solo Lectura | Color | Estado de color simple |
| 0x10 | Lectura/Escritura | Configuración | Registro de configuración |
0x0F: | 0x0F | Bit | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|---|---|
| Color | Azul | Azul Oscuro | Verde | Negro | Blanco | Rosa | Amarillo | Rojo |
1 indica el color del bit, por ejemplo, Color = 0x02 indica que el objeto actual es amarillo.0x10: | 0x10 | Bit | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|---|---|
| Configuración | D4 | D3 | D2 | D1 | NC | NC | NC | Balance de blancos |
1 calibración del balance de blancos; un 0 sin balance de blancos.Para enviar comandos al módulo sensor, el formato que se ha de enviar al módulo ha de ser de la forma: Preámbulo + Comando + Suma (8bits).
Por ejemplo, para configurar la velocidad a 9600: 0xA5 + 0xAE + 0x53.
Se envía primero 0xA5, después 0xAE, y finalmente 0x53 que corresponde a la suma 0XA5+0xAE=0x153, pero solo se envían los 8 bits inferiores.
| Comando | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|---|
| Salida | Auto | 0 | 0 | 0 | 0 | RGBC | LCC | RGB |
0xA5 + 0x6X + sumaX puede tener un valor entre 0 y 10 (0x60 - 0x6A).0x63.Teniendo en cuenta los parámetros de configuración del puerto serie, con valor predeterminado de la velocidad en baudios 9600bps, sin control de paridad, 8 bits de datos y 1 bit de parada (8N1), se recibirán datos por el puerto serie mediante tramas en hexadecimal de 8-13 bytes de longitud:
| Byte 2 | 0x15 | 0x25 | 0x45 | 0x55 |
|---|---|---|---|---|
| Significado | RGBC original | Brillo, temperatura de color, color simple | RGB procesado por MCU | Dirección IIC |
<5A-5A-15-08-01-78-01-92-00-4C-05-05-33> R=(0x01<<8)|0x78=0x0178=376dec G=(0x01<<8)|0x92=0x0192=402dec B=(0x00<<8)|0x4c=0x004C=76dec C=(0x05<<8)|0x05=0x0505=1285dec
| Bit | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|---|
| Color | Azul | Azul Oscuro | Verde | Negro | Blanco | Rosa | Amarillo | Rojo |
<5A-5A-25-06-02-CC-0C-5D-00-02-18> Lux = (0x02 << 8) | 0xcc = 0x2CC = 716dec (lux) CT = (0x0c << 8) | 0x5d = 0x0C5D = 3165dec (K) Color = (0x00 << 8) | 0x02 = 0x0002 = 2dec (actualmente amarillo)
<5A-5A-45-03-FF-FF-4C-46> R = FF = 255; G = FF = 255; B = 4C = 76;
Modo I2C por MPU