Sie sind auf Seite 1von 12

Sensor de Color TC3200

by Leandro | Novedades, Sensores | 0 comments

3 Shares

DESCRIPCIN
Este sensor esta basado en el TCS3200. Es un convertidor de luz a frecuencia programable,
puede filtrar los datos RGB de la fuente de luz y convertirlo en una onda cuadrada (duty cycle
50%) con frecuencia directamente proporcional a la intensidad de luz (irradiacion). La escala
de frecuencia de salida se puede manejar mediante los dos pines S0 y S1 (Selectable Options
2%, 20%, 100% frequency). Los pines S2, S3 controlan el filtro rgb. Todos los pines digitales
I/O se pueden conectar directamente al micro ya que trabajan en el mismo voltaje. Output
enable (OE) coloca la salida en estado de alta impedancia para el intercambio de unidades
mltiples de una lnea de entrada del microcontrolador. Por ltimo, el usuario puede calcular el
color de la luz por los valores RGB.

CARACTERSTICAS TCNICAS

High-Resolution Conversion of Light Intensity to Frequency

Programmable Color and Full-Scale Output Frequency

Communicates Directly With a Microcontroller

Single-Supply Operation (2.7 V to 5.5 V)

Power Down Feature

Nonlinearity Error Typically 0.2% at 50 kHz

Stable 200 ppm/C Temperature Coefficient

Low-Profile Surface-Mount Package

CONEXIONADO

CDIGO DE PROGRAMACIN
En primer lugar tenemos que descargar libreria haciendo click aqui.
#include <TimerOne.h>

#define OUT

#define S2

#define S3

10

#define S0

11

#define S1

12

#define OE

13

#define

Filters_R

#define

Filters_G

#define

Filters_B

int Count[3] = {0};


int G_flag = 1;

void setup()
{
TCS230_init();
Select_Filters(3);
Timer1.initialize();

//default, no fiter
// default 1S

Timer1.attachInterrupt(callback);
Serial.begin(9600);
}

void TCS230_init()
{

pinMode(OUT, INPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(OE, OUTPUT);

digitalWrite(S0, LOW);

// 2% of Output Frequence

digitalWrite(S1, HIGH);
digitalWrite(OE, LOW);
}

void Select_Filters(int RGB)


{
switch(RGB)
{
case Filters_R:

//Red

digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
Serial.println("-----select Red color");
break;

case Filters_G:
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);

//Green

Serial.println("-----select Green color");


break;

case Filters_B:

//Blue

digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
Serial.println("-----select Blue color");
break;

default:

//Clear(no filter)

digitalWrite(S2, HIGH);
digitalWrite(S3, LOW);
Serial.println("-----no filter");
break;
}
}

void Measure_Count(int RGB )


{
int tmp = 0;
while(1)
{
if(digitalRead(OUT) == 1)
{
if(G_flag == 0)

//For white balance correction

{
Count[RGB] = tmp;
Serial.print("tmp=");
Serial.println(tmp);
break;
}
tmp++;
}
}
}

void callback()
{
G_flag = 0;
}

void loop()
{
Timer1.restart();
for(int i=0; i<3; i++)
{
Select_Filters(i);
Timer1.setPeriod(10000);
Measure_Count(i);

//set 10ms

G_flag = 1;
Serial.println(Count[i]);
}
delay(3000);
}

Das könnte Ihnen auch gefallen