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


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

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
  • La dirección IIC predeterminada de 7 bits es 0x5A, luego la dirección de 8 bits es 0xB4.
  • 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.
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 1 indica el color del bit, por ejemplo, Color = 0x02 indica que el objeto actual es amarillo.
  • 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 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.

  • 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 led0xA5 + 0x6X + suma
    • La X puede tener un valor entre 0 y 10 (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).

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é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).
Modo serie

Modo I2C por MPU

  • doc/tec/lab/bus_i2c/color_gy33_0/inicio.1774719263.txt.gz
  • Última modificación: 2026/03/28 18:34
  • por fepg