TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: FJPPitta en 02 de Febrero de 2007, 21:25:01

Título: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 02 de Febrero de 2007, 21:25:01
Un saludo a todos, siempre he realizado preguntas y pues tambien quiero colaborar un poco con el foro, un tema que considero interesante es el de sensado de color de una fuente de luz. En esta ocasión deseo aportar datos del sensor TCS230 de Texas Advanced Optoelectronics (division de TI) el cual puede utilizarsa para sensar el color de un objeto e incluso el de una fuente de luz.

En internet hay poca información acerca de este sensor y del C (normalmente se encuentra en basic stamp) ademas de la teoria que hay detras de todo el proceso de sensado de color.

Si hay alguien interesado en este tema ire colocando información poco a poco y tratando de resolver las dudas que tengan, claro esta mientras el tiempo me lo permita.

También si alguien conoce algo acerca del sensor podriamos intercambiar información, ideas y codigo.

Mientras ire preparando un poco de teoria para iniciar claro esta si ustedes lo permiten y asi mismo se interesan en el tema.

Saludos y hasta el siguiente post.
FJPPitta
Título: Re: Sensor TCS230 de TAOS
Publicado por: micro_cadaver en 02 de Febrero de 2007, 21:38:13
hola yo toy interesado jejeje, podriamos explicar un poco de teoria o tambien puedo esperar el articulo q estas preparando. desde ya muchas gracias y muy buen aporte!!!  :-/
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 03 de Febrero de 2007, 12:48:38
No estaría de mas platicar un poco de teoria acerca del dispositivo para que todos lo conoscan.

Descripción

El dispositivo TCS230 es un convertidor programable de luz de color a frecuencia. En un solo circuito integrado se encuentran fotodiodos y un convertidor de corriente a frecuencia. La salida de este dispositivo es una onda cuadrada con un ciclo de trabajo del 50%, esta onda cuadrada es directamente proporcional a la intensidad de luz incidente en el dispositivo.

El TCS230 cuenta con tres escalas programables mediante dos pines de control. Las entradas y salidas digitales permiten una comunicacion directa con un microcontrolador o cualquier otro circuito logico. Tambien cuenta con una señal de habilitación, lo que permite compartir las lineas de E/S con otros dispositivos.

La configuracion interna contiene un arreglo de fotodiodos de 8x8, 16 de esos fotodiodos cuentan con un filtro azul, 16 fotodiodos tienen un filtro verde, 16 fotodiodos tienen un filtro rojo y 16 fotodiodos se encuentran sin filtro.

La seleccion de los fotodiodos es seleccionable durante el funcionamiento mediante dos pines.

Extracto de la hoja de datos (http://www.taosinc.com/images/product/document/TCS230-E23.pdf)

Bueno esta es una breve descripcion de lo que es el dispositivo, poco a poco tratare de ir abundando en su funcionamiento y teoria de color.

Saludos y hasta el siguiente post.
FJPPitta
Título: Re: Sensor TCS230 de TAOS
Publicado por: micro_cadaver en 03 de Febrero de 2007, 13:07:45
chevere, que aplicaciones se le puede dar amigo? :-/
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 03 de Febrero de 2007, 17:31:12
Hasta el momento he visto en otros sitios un separador de M&M, un colorimetro para el calibrado de monitores y proyectores. Yo lo estoy usando para sensar color de luz. Pero puede adaptarse a control de proceso, control de iluminación, detector de flama incluso analisis quimico.

El uso que le doy es aparte de detectar el color de la luz, puedo determinar las componentes de dicha luz.
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 06 de Febrero de 2007, 02:02:59
Un poco mas de teorica proveniente del articulo Sensing color with the TAOS TCS230 (http://www.taosinc.com/downloads/pdf/tcs230wp.pdf)


Introducción al color

En la retina se encuentran unas celulas fotoreceptores llamadas conos, las cuales son las responsables de la visión de color del humano.

Existen tres tipos de celulas conos sensibles a las longitudes de onda larga, mediana y corta del espectro electromagnetico visible. Debido a que la sensitividad de los conos son elevadas en las partes del espectro correspondiente a los colores rojo, verde y azul, los cientificos llamaron a esas celulas por sus letras iniciales en griego R, G, B.

La luz en el mundo físico puede ser caracterizado mediante su distribución espectral. El color de un objeto puede ser caracterizado mediante una curva de reflectancia y una comparación con un patron estandar. Sin embargo la vista es insensible a una longitud de onda exacta de un estimulo luminoso. De acuerdo a la teoria moderna, lo que vemos es el area bajo la curva de cada respuesta espectral.

Existen tres tipos de celulas conos que llevan una propiedad de tri-cromaticidad, la cual es indica que solo tres componentes son necesarios y suficientes para caracterizar el color.


En el siguiente post tratare de comentar un poco acerca de lo que esta al final del articulo lo cual indica como obtener el tri-estimulo necesario para la identificación del color. Si pueden hechar un ojo antes al articulo es mejor.
Título: Re: Sensor TCS230 de TAOS
Publicado por: micro_cadaver en 06 de Febrero de 2007, 09:33:24
wou, esto parece una enciclopedia, escelente aporte amigo fjppitta,
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 07 de Febrero de 2007, 01:12:02
Gracias, tratare de ir explicando los conceptos básicos ya que yo pase por eso y es dificil entender otras cosas cuando lo basico no se sabe aun por insignificante que se vea.
Título: Re: Sensor TCS230 de TAOS
Publicado por: micro_cadaver en 07 de Febrero de 2007, 01:16:16
cierto amigo, te confieso q tal ciencia me abruma tanto q no se me ocurre algo en q aplicarlo q este a mi alcance jijij pero quiero y lo intetntare, le pasare la voz a los demas amigos del forrro!!!  :-/ 
Título: Re: Sensor TCS230 de TAOS
Publicado por: jfmateos2 en 07 de Febrero de 2007, 07:39:17
Muy bueno FJPPita. Me interesa particularmente la posibilidad de utilizarlo como colorímetro para calibrar monitores. ¿sabes dónde encontrar más información a este respecto? Gracias
Título: Re: Sensor TCS230 de TAOS
Publicado por: Arbolito en 07 de Febrero de 2007, 11:30:42
Exelente aporte FJPPitta, estoy muy interesado en esto, alguna vez lei algo pero nunca encontre informacion mas o menos seria.

Podrias indicarme el costo del sensor  (yo soy de argentina, pero me sirve como referencia)

un saludo y gracias por el aporte.
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 07 de Febrero de 2007, 16:12:57
micro_cadaver:

Yo  lo uso para el sensado de una fuente de luz, y ademas implemente el colorimetro de los franceses, y puedes checar este separador de M&Ms (http://www.parallax.com/html_pages/resources/catapps/cat_mandm_sorter.asp)

(http://photos1.blogger.com/blogger/2331/1083/1600/M%26M%20sorting%20machine.0.gif)



jfmateos:

Saludos, si existe la posibilidad de usarlo como colorimetro, hay una pagina en donde dan la informacion, esquematicos y el programa y todo para armarlo. Pulsa aqui para acceder (http://www.homecinema-fr.com/colorimetre/index_en.php) viene en ingles unas cosas otras vienen en frances que es el idioma nativo.

Yo lo arme en un protoboard y funciona muy bien archivos que utilice para el colorimetro (http://www.megaupload.com/?d=PJ2ENFC8) en ese link dejo los archivos por si tienes algun problema para bajarlos de la pagina francesa.

Ahora bien si te interesa saber como hacerlo desde cero pues aqui ire comentando lo necesario para hacerlo.



juanacho_ar:

Yo compre en Future Electronics en USA ya que aquí en México no lo encontre, me salio en 5.4 $USD cada uno más el envio, como tuve que usar una empresa importadora, en total cada uno salio alrededor de los 11 $USD, es aproximado ya que compre otras cosas.



Un vistazo a la colorimetría del CIE

Ahora es posible conocer la respuesta espectral de los conos, pero en los años 20s los investigadores usaban experimentos psicofisicos para obtener tales datos. Para tener un estandar es necesario contar con un organismo que se encarge de regular esto, en este caso es el CIE. En 1931 adpto un estandar en donde se utiliza tres estimulos para obtener cualquier color dentro del espectro visible. Estos estimulos se denominan X, Y y Z. En matematicas lo que significaria esto es la integral de la curva de la respuesta espectral. En matematica discreta se utiliza la multiplicación de una matriz para obtener este tri-estimulo. Estos valor X, Y y Z son suficientes para caracterizar cualquier color. El valor Y es denominado luminancia y sus unidades son candela/metro cuadrado (cd/m2).

El estandar del CIE 1931 realiza una representacion en un diagrama llamado diagrama de cromaticidad y el valor tri-estimulo lo transforma a una coordenadas cartesianas [x, y]. La transformación se realiza por medio de:

(http://img442.imageshack.us/img442/9405/cie1931ay7.gif)

Con estas coordenas se puede obtener el punto de color por medio del diagrama de cromaticidad por ejemplo:

(http://img267.imageshack.us/img267/2742/9553pt8.jpg)



Disculpen un poco el atraso pero mis actividades escolares estan absorbiendo mi poco tiempo libre. :( pero aqui poco a poco ire posteando mas informacion.

Hasta el siguiente post.
FJPPitta

Título: Re: Sensor TCS230 de TAOS
Publicado por: Arbolito en 07 de Febrero de 2007, 16:18:27
Muchas gracias veré como importarlo, de momento seguiré tus clases y no te preocupes por el tiempo se esperara lo que sea necesario, de todas formas todos andamos mas o menos igual de tiempo.

saludos
Título: Re: Sensor TCS230 de TAOS
Publicado por: jfmateos2 en 08 de Febrero de 2007, 09:52:39
Muchas gracias FJPPita. Es un enlace estupendo el del colorímetro; aún no he acabado de digerir toda la información que contiene (mi francés es pésimo). Si lo veo claro, pediré unos cuantos sensores de este tipo y a construirme ese calibrador que tiene una pinta estupenda.

Seguiré tu post con mucha atención. Muchas gracias por aportar al foro.
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 12 de Febrero de 2007, 02:09:52
Como interpretar el valor del sensor

EL 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  (http://www.taosinc.com/downloads/pdf/tcs230wp.pdf) 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.

Código: [Seleccionar]
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:

Código: [Seleccionar]
     
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


Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 16 de Febrero de 2007, 18:51:41
Bueno como han visto es pura matematica. Espero haber explicado bien lo anterior. El chiste de hacer esa conversion a un estandar es que se pueden hacr mediciones de calidad de la luz, y además identificar colores.

Bueno de momento no es meterse de lleno a realizar mediciones de calidad pero si dejare dos conceptos acerca de como podemos hacerlo:

IRC - Indice de Rendimiento de Color
Es una medida que indica que tan bien son reproducidos los colores bajo cierta luz. Si se han dado cuanta ciertos objetos de color se ven diferentes con diversa iluminacion. El indice va de 0 a 100 en donde 100 es el mas alto y el cual lo tiene la luz solar ya que permite reprodicir con exactitud todos los colores del espectro visible. Una lampara incandescente tiene un IRC de 99, algunas fluerescentes de 80 a 90. Un indice bajo no necesariamente es malo, todo depende de la aplicacion por ejemplo las luminarias que utilizan en las calles tienen un IRC de 40.

CCT - Temperatura correlacionada de color
Es una medida que indica el color de la luz, con respecto  a la luz emitida por un metal el cual esta calentado a cierta temperatura en grados Kelvin. Esto tiene que ver en como denominar la luz si es fría o calida, un dato que normalmente viene en las cajas de las lamparas fluerescentes que compramos en las tiendas. Una luz calida es de color naranja-rojizo y una luz fría tiende al azul. Bueno en realidad si vemos que una luz calida tiene una temperatura de 2500°K y una luz fría de 9000°K nos preguntamos como va a ser fria una luz de elevada CCT, pues la razon es psicologica ya que algo azul da la sensación de frío, ya que azul es el agua, el hielo. Al calentar un metal va pasando por varios colores comenzando con el rojo, pasa a blanco y de ahi tiende al azul.



Bueno ahora lo que me imagino que todos queremos es armar circuitos y realizar programas. Bueno antes que nada es necesario armar en TCS230 en una pequeña placa, ya que como es un circuito SMD pues no se puede montar en protoboard. Lo que yo hice fue montar una pequeña placa con el TCS230 un capacitor entre sus terminales Vcc y GND y 8 pines para utilizar un cable plano y enviarlo al protoboard. Esta muy bien para las pruebas. El cable que va del TCS230 al microcontrolador no debe sobrepasar 30cm.

El PCB lo realize en eagle CAD y la tecnica del acetato.

En el siguiente post veremos algunos ejemplos sencillos con el TCS230 y en C con CCS.
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 22 de Febrero de 2007, 21:39:39
Despues de un rato sin poder actualizar este post ya que he tenido problemas inesperado en mi proyecto de tesis y apenas me da un respiro. Para comenzar con la tanda de programas aqui les dejo uno con el que pueden leer la frecuencia del sensor, hago uso de una libreria que yo mismo hice y que no es nada del otro mundo para controlar el tcs230.

Ademas estoy lidiando con el VB6 para obtener los datos del PIC pero ya va saliendo, como vi el VB2005 es muy diferente y no funciona lo que viene en la ayuda para el manejor de serialport de hecho abri un hilo para ver como podia hacer funcionar el serialport.

Por cierto comento que hay que usar un programa hecho para hacer ciertos calculos ya que en micros como el 16f873 o 16f876 no alcanza a memoria para hacer las transformaciones de estandar. Yo uso el primero y una aplicacion en VB para calcularlo (ver imagen), solo me hace falta graficar el punto (x,y) si alguien sabe de eso y quiere aportar se lo agradeceria mucho.

Primer programa de prueba, leer una frecuencia del sensor.
Código: [Seleccionar]
#include <16F873a.h>
#fuses HS,NOWDT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
#bit t1_overflow=0x0C.0


int32 frecuencia;

int32 lee_freq(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);
      delay_us(15625);
      setup_timer_1(T1_DISABLED);
      if (t1_overflow)
          freqc_high++;
      freqc_low=get_timer1();
      freq=make32(freqc_high,freqc_low);
      return (freq);

 }

void main()
{
while (TRUE)
{
frecuencia=lee_freq();
printf("%LU \r\n",frecuencia*32);
}
}

Proximamente pondre mas . . . mientras la escuela me lo permita.
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 28 de Febrero de 2007, 15:32:28
Saludos, debido a que me encuentro en la parte final de mi proyecto de tesis, no me ha dado tiempo de preparar una buena explicación sobre lo que hace falta, así que suspendere de momento la redacción, así espero que puedan hacerse de un TCS230 para hacer pruebas.

De mientras si hay alguna duda tratare de contestarla a medida de lo posible.

Si alguien esta interesado lo que haria falta:

- Rutina para leer las tres frecuencias
- Diseño de un programa que lea del micro las frecuecias y realize las conversiones necesarias
- Grabar las mediciones en un archivo
- Graficar

El colorimetro se basa principalmente en el programa que es el que realiza todo, sería bueno analizarlo para ver que funciones son utiles y diseñarlas a nuestras necesidades.

Hasta el siguiente post
Título: Re: Sensor TCS230 de TAOS
Publicado por: Arbolito en 28 de Febrero de 2007, 15:43:22
y o estaré esperando tu regreso al tema  8)

El trabajo que as realizado esta genial , veré si me es posible hacerme algo de tiempo para realizar las rutinas que faltan
un saludo maestro.
Título: Re: Sensor TCS230 de TAOS
Publicado por: PalitroqueZ en 28 de Febrero de 2007, 16:36:48
¡Gran aporte FJPPitta!  :-/ :-/

Salu2
Pedro
Título: Re: Sensor TCS230 de TAOS
Publicado por: FJPPitta en 28 de Febrero de 2007, 21:30:08
Bueno realmente no puedo quitarme la tentación de aportar algo al foro y pues como parte de mi proyecto de tesis es trabajar con el TCS230 aqui les dejo mis avances es algo general ya que yo estoy trabajando en otras cosas pero me ha servido mucho de guia este programita. Esta escrito en VB6 y funciona con el puerto COM1 les dejo el codigo que tengo hasta el momento y el primer ejecutable.

Del pic envio los datos con la siguiente instrucción:

Código: [Seleccionar]
printf ("R%LUOV%LUEA%LUZ.",FR, FV, FA);
en donde FR, FV y FA son las frecuencias del rojo, verde y azul respectivamente, mi pic siempre esta enviando esa información algo como: R746536OV745372EA637459Z. El programa toma la cadena y la decodifica uso una R y una O para encerrar la frecuencia del rojo; V y E para el verde;  A y Z para el azul y un punto de fin de cadena.

El programa a veces marca error ya que no lo he depurado y pues solo lo ocupo para visualizar datos cierto tiempo no siempre y de mientras funciona, si alguien puede pulirlo o a lo mejor hay otra forma de adquirir los datos mas eficiente pues se acepta de todo.

Para leer frecuencia uso:

Código: [Seleccionar]
int32 lee_freq(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);
 }

y para cambiar los filtro del TCS230 estan las funciones:

Código: [Seleccionar]
#define OE PIN_A4

void escala_100()
{
output_high(pin_A0);
output_high(pin_A1);
}

void escala_20()
{
output_high(pin_A0);
output_low(pin_A1);
}

void escala_2()
{
output_low(pin_A0);
output_high(pin_A1);
}

void apagar_sensor()
{
output_low(pin_A0);
output_low(pin_A1);
}

void sin_filtro (void)
{
output_high(pin_A2);
output_low(pin_A3);
}

void filtro_rojo (void)
{
output_low(pin_A2);
output_low(pin_A3);

}

void filtro_azul (void)
{
output_low(pin_A2);
output_high(pin_A3);

}

void filtro_verde (void)
{
output_high(pin_A2);
output_high(pin_A3);

}

Para transportar el programa y usar el puerto USB emulando el RS232 seria algo así.

Código: [Seleccionar]
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>

int32 Fr, FV, FA;

void main()
{
  // rutinas de inicialización
   usb_cdc_init();

  output_low(OE);

  // Lectura de cada uno de los filtros
   
  while (TRUE)
  {
    filtro_rojo();
    FR=lee_freq();
    filtro_verde();
    FV=lee_freq();
    filtro_azul();
    FA=lee_freq();
 
    // envia por puerto serie
    printf(usb_cdc_putc,"R%LUOV%LUEA%LUZ.",FR, FV, FA);
  }
}

Bueno es una base y es lo que hasta el momento tengo, espero que alguien pueda mejorarlo o se den ideas para hacerlo, yo afinare detalles en un futuro no muy lejano ya que me ha llamado mucho la atención trabajar con estos sensores y quisiera tener el tiempo para realizar mis propias pruebas :(.

Ya habra tiempo para todo . . .

Saludos y hasta el siguiente post