Tabla de Contenidos

[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:

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

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

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

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.

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:

Métodos de cálculo de datos

Ejemplos de conexionado con un controlador

Modo serie

Modo I2C por MPU