Autor Tema: Sensor TCS230 de TAOS  (Leído 11819 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Sensor TCS230 de TAOS
« Respuesta #15 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.
Que la fuerza te acompañe

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Sensor TCS230 de TAOS
« Respuesta #16 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.
Que la fuerza te acompañe

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Sensor TCS230 de TAOS
« Respuesta #17 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
Que la fuerza te acompañe

Desconectado Arbolito

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 893
Re: Sensor TCS230 de TAOS
« Respuesta #18 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.
Existo, aunque pienses que no pienso

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Sensor TCS230 de TAOS
« Respuesta #19 en: 28 de Febrero de 2007, 16:36:48 »
¡Gran aporte FJPPitta!  :-/ :-/

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Sensor TCS230 de TAOS
« Respuesta #20 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
« Última modificación: 28 de Febrero de 2007, 21:33:09 por FJPPitta »
Que la fuerza te acompañe


 

anything