Como interpretar el valor del sensorEL modelo de color del CIE involucra el calculo de una integral bajo las curvas del diagrama espectral, con lo que se consegirian los valores triestimulo X, Y y Z. Para usar el TCS230 en la estimación de color es un calculo similar, es necesario integrar las curvas de sensitividad del sensor para encontrar los valores RGB.
Realmente la integracion puede ser sustituida por una operacion de matrices, lo que hace mas sencillo el cálculo, ademas de que puede colocarse dentro de un microcontrolador.
Esto es, utilizamos una matriz de correción para obtener los datos X, Y, Z.
La matriz a utilizar no es una sola, hay que encontrar la que mejor se adapte. Esta matriz puede ser calculada a partir de un luminante de referencia como es el D65 en el
articulo de sensado de colorarticulo de sensado de color viene la forma exacta de hacer este procedimiento, en nuestro caso solo utilizaremos una ya calculada.
Pasos para encontrar los valores RGB.1.- Obtener la frecuencia del sensor para cada uno de los tres filtros.
2.- Realizar una multiplicacion de una matriz por un vector para obtener el tri-estimulo
3.- Realiar una normalizacion para obtener x e y
Obteniendo los datos x e y se tiene el primer estandar CIE1931, apartir de este dato es posible pasar a cualquier estandar, todo depende de lo que necesitemos.
El primer paso puede ser resuelto con la siguiente rutina que viene de un ejemplo con el CCS claro yo copie ese codigo y lo transforme en una rutina de facil manejo asi solo se llama X=lee_frecuencia(); claramente hay que realizar una rutina para el cambio de filtro.
int32 lee_frecuencia(void)
{
int cycles8, cycles;
int32 freq;
long freqc_high;
long freqc_low;
cycles8=0;
cycles=0;
freqc_high=0;
t1_overflow=0;
set_timer1(0);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
while (cycles!=0xFF)
{
cycles8=0;
while (cycles8!=0xFF)
{
if (t1_overflow)
{
t1_overflow=0;freqc_high++;
}
else
{
delay_cycles(5);
}
delay_cycles(62);
cycles8++;
}
delay_cycles(216);
cycles++;
}
delay_cycles(211);
setup_timer_1(T1_DISABLED);
if (t1_overflow)
freqc_high++;
freqc_low=get_timer1();
freq=make32(freqc_high,freqc_low);
return (freq);
}
El segundo paso la matriz pude convertirse en un sistema de 3 ecuaciones:
X=0.265793*Rn+0.437094*Gn*0.271800*Bn;
Y=0.194236379*Rn+0.856911813*Gn-0.071039999*Bn;
Z=0.054811*Rn-0.392218*Gn+1.403742*Bn;
donde Rn, Gn y Bn son los datos obtenidos del sensor.
Les dejo la libreria TCS230.h la cual es muy sencilla y cuenta con las funciones de seleccion de escala y filtro.
Con las coodenadas CIE1931 es posible determinar el color del objeto o de la luz que se este sensando.
Mas adelante tratare de colocar un programa que realize la funcion de leer los datos del sensor y enviarlos por puerto serie a la computadora para tratarlos ahí.
Hasta el siguiente post
FJPPitta