¡Esta es una revisión vieja del documento!
[I2C] Módulo sensor de color GY-33: Descripción
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:
- Lectura directa de los datos RGBC sin procesar.
- Brillo, temperatura de color, color simple, procesado por el MCU.
- Valor RGB después del procesamiento por el MCU.
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 |
Patillaje


| # | 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 |
Modos de funcionamiento

- 1) Modo de puerto serie por MPU (predeterminado)
- El pin S0 se encuentra en estado desconectado y en modo serie.
- 2) Modo de comunicación MCU_IIC
- Conectar el pin S0 a GND, el módulo ingresa al modo IIC y el reloj de comunicación IIC debe estar entre 40 KHz y 200 KHz. Al leer el registro correspondiente, el intervalo de lectura de datos debe ser inferior a 10 Hz.
- El IIC admite el “ajuste de brillo del LED” y la “calibración del balance de blancos” para la configuración del módulo.
- 3) Modo de uso directo del chip de sensor TCS34725
- Conectar el pin S1 a GND. El módulo reserva los pines INT, SCL y SDA del chip TCS34725, que pueden controlar directamente el chip de color.
- En este modo, la MCU del módulo no realiza ninguna función en los datos de color, solo RGBC.
- Para la configuración y la lectura, el usuario también puede controlar el nivel de brillo del LED del módulo a través del puerto serie o IIC.
- En este modo, se utilizan directamente las direcciones y los registros del chip TCS34725.

- El modo de funcionamiento se controla por dos puentes:
S0conGy/oS1conG. El terminalGes masa, por lo que si no se puentean tienen un1y si se puentean un0: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=SCLDR 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 - Según el modo escogido serán necesarias diferentes librerías. En la tabla anterior se señalan algunas posibles, a falta de comprobar esta información.
Comunicación directa con TCS34725 mediante I2C
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 |
Registros I2C por MPU (S0=0)
Dirección I2C
- La dirección IIC predeterminada de 7 bits es
0x5A, luego la dirección de 8 bits es0xB4. - La dirección IIC se puede modificar a través de la configuración del puerto serie. Se pueden modificar y guardar 128 direcciones diferentes después del apagado.
Registros I2C
| 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 |
- Registro de estado de color simple
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 - Bit7-bit0: la posición del
1indica el color del bit, por ejemplo,Color = 0x02indica que el objeto actual esamarillo.
- Registro de configuración
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 - Bit7-bit4: 0-10 (0-A) Once niveles ajustan el brillo del LED, el nivel predeterminado es 3.
- Bit3-bit1: Mantener 0000.
- Bit 0: Un
1calibración del balance de blancos; un0sin balance de blancos.
Registros puerto serie MPU (S0=1)
Comandos de configuración por puerto serie
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.
- 1) Registro de configuración de salida serie
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 - Auto (por defecto 1)
- 1: Salidas tras el encendido según última configuración.
- 0: No sale automáticamente tras el encendido.
- Bit6 - Bit3 → Siempre cero: 0000
- RGBC (por defecto 0)
- 1: Salida continua del valor AD original RGBC.
- 0: Sin salida; cuando Auto está configurado en 1, ahorra energía.
- LLC (por defecto 0)
- 1: Salida continua de Brillo, temperatura de color, valor de color.
- 0: Sin salida; cuando Auto está configurado en 1, ahorra energía.
- RGB (por defecto 0)
- 1: Salida continua del valor RGB de 8 bits procesado.
- 0: Sin salida; cuando Auto se establece en 1, se ahorra energía.
- Ejemplo de comando: 0xA5 + 0x81 + 0x26, lo que significa que el valor RGB después del procesamiento de la MCU se emite continuamente, y la configuración se guarda después de un corte de energía. Después de volver a encender, los valores RGB procesados por la MCU se emitirán automáticamente de forma continua.
- El sensor TSC34725 devuelve los valores RGBC, con lo que LCC y RGB son conversiones del MCU.
- La tecnología de los sensores RGBC se basa en la substitución del pixel verde (G) extra de los sensores RGB por otros “limpios” o “clear” (C), que dejan pasar luz, pero sin ninguna información de color que se extrapola mediante algoritmos.
- 2) Configuración del brillo del led →
0xA5+0x6X+suma- La
Xpuede tener un valor entre0y10(0x60-0x6A). - Cuanto más bajo sea el valor más alto es el brillo.
- La configuración no se guarda, y por defecto es
0x63.
- 3) Consulta las instrucciones de salida
- 0xA5 + 0x51 + 0xF6 : Valor de AD bruto de RGBC de salida (el tipo de datos de retorno del módulo es 0x15).
- 0xA5 + 0x52 + 0xF7 : Brillo de salida, temperatura de color, valor de color (el tipo de datos de retorno del módulo es 0x25).
- 0xA5 + 0x54 + 0xF9 : Valor RGB de 8 bits procesado de salida (el tipo de datos de retorno del módulo es 0x45).
- 0xAA + 0xF5 + 0x9F : Dirección IIC del módulo de salida (el tipo de datos de retorno del módulo es 0x55).
- Nota: Si usa el resultado de la consulta, tenga en cuenta si el registro comando = 0x00 del TCS34725 está configurado antes de esto.
- 4) Configuración de velocidad de puerto serie
- 0xA5 + 0xAE + 0x53 : 9600 bauds (defecto)
- 0xA5 + 0xAF+ 0x54 : 115200 bauds
- 5) Instrucciones de calibración de balance de blancos
- 0xA5 + 0xBB + 0x60 : Se usa en la calibración del balance de blancos en color (este comando guarda el resultado de la calibración cuando la alimentación está apagada).
- Cuando se ajusta el brillo del LED, se requiere la calibración del balance de blancos. El método consiste en encontrar un objeto blanco y, una vez que el objeto está cerca del objeto, el puerto serie puede enviar un comando de calibración del balance de blancos.
- 6) Establece la instrucción de dirección IIC
- Esta instrucción guarda la dirección IIC modificada cuando la alimentación está apagada.
- 0xAA + XX + suma : XX indica la dirección IIC de 7 bits, la suma es igual a los 8 bits inferiores de la suma de 0xAA + XX.
- Por ejemplo, la dirección IIC original de 7 bits es 0x5A, luego se envía 0xAA + 0x5A + 0x04 al módulo. La dirección de 7 bits se desplaza hacia la izquierda un bit, de modo que la dirección IIC de 8 bits del módulo es 0xB4 (0x5A«1=0xB4).
Datos de lectura por puerto serie
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:
- Byte0: 0x5A Flag de encabezado
- Byte1: 0x5A Flag de encabezado
- Byte2: 0X25 Datos de la trama. El significado de Byte2 representa:
Byte 2 0x15 0x25 0x45 0x55 Significado RGBC original Brillo, temperatura de color, color simple RGB procesado por MCU Dirección IIC - Byte3: 0x06 cantidad de datos (los siguientes tres datos, por ejemplo)
- Byte4: 0x00 ~ 0xFF Data 1 high 8 bits
- Byte5: 0x00 ~ 0xFF Datos 1 bajo 8 bits
- Byte6: 0x00 ~ 0xFF Data 2 high 8 bits
- Byte7: 0x00 ~ 0xFF Datos 2 bajos 8 bits
- Byte8: 0x00 ~ 0xFF Data 3 high 8 bits
- Byte9: 0x00 ~ 0xFF Data 3 low 8 bits
- Byte10: Suma de control 0x00 ~ 0xFF (los datos anteriores se agregan y se acumulan, solo quedan 8 bits)
Métodos de cálculo de datos
- Método de cálculo RGBC original (cuando Byte2 = 0x15)
- R: Rojo = (alto 8 bits « 8) | bajo 8 bits indica el valor AD después de pasar el filtro rojo
- G: Verde = (Alto 8 bits « 8) | Bajo 8 bits Indica el valor AD después de pasar el filtro verde
- B: Azul = (8 bits más altos « 8) | 8 bits más bajos indica el valor AD después de pasar el filtro azul
- C: Clear = (alto 8 bits « 8) | bajo 8 bits significa valor AD sin ningún filtro
- Ejemplo, trama de datos:
<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
- Método de cálculo de brillo, temperatura del color, color simple (cuando Byte2 = 0x25)
- Brillo: Lux = (alto 8 bits « 8) | unidad baja de 8 bits lux
- Temperatura de color: CT = (alto 8 bits <8) | unidad baja de 8 bits K (Kelvin)
- Los 7 colores simples se muestran en la siguiente tabla:
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 - Bit7-bit0: la posición 1 indica el color del bit
- Color: color = (alto 8 bits « 8) | bajo 8 bits
- Ejemplo, trama de datos:
<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)
- Método de cálculo del valor RGB procesado por el MCU (cuando Byte2 = 0x45)
- R: R = Byte4; indica el valor de 8 bits después de procesar R
- G: G = Byte5; indica el valor de 8 bits después del procesamiento de G
- B: B = Byte6; indica el valor de 8 bits después del procesamiento B
- Ejemplo, trama de datos:
<5A-5A-45-03-FF-FF-4C-46> R = FF = 255; G = FF = 255; B = 4C = 76;
- Dirección IIC (cuando Byte2 = 0x55)
- El bit de datos devuelto es la dirección IIC actual (0x5A o 0xB4).
Ejemplos de conexionado con un controlador
Modo I2C por MPU