Sensor de cor TCS3200

TSC3200-01Identificação de cores com TCS3200 e Arduino


A função deste sensor é determinar uma cor para uma análise feita em cada momento, de acordo com um determinado conjunto de parâmetros.
Este sensor de cor utiliza o chip TCS3200, que lhe dá o nome. Funcionalmente este determina os níveis RGB (Red, Green e Blue, ou Vermelho, Verde e Azul) de um objeto colocado à sua frente.
O chip TCS3200 tem 64 fotodíodos, 16 para cada cor que filtram cada uma das cores respetivas (vermelha, verde ou azul). Esses fotodíodos captam a intensidade luminosa, filtrando as cores e gerando a informação que será enviada pelo pino OUT ao microcontrolador (na nossa experiencia ao Arduíno).

Pins


O sensor de cor TCS3200 tem duas filas com 5 pinos cada:

Pins de controle – S0, S1, S2, S3PIN-TSC3200Os pinos S0 e S1 definem a frequência de saída, e os pinos S2 e S3 filtram

a cor a ser detetada de acordo com a tabela.
Saída – OUT
Alimentação – VCC e GND (pins em duplicado, utilizar apenas um conjunto)
Controle do Led – LED (serve para ligar ou desligar os leds brancos em volta do sensor, para ligar (nível 0 – LOW) ou desligar (nível 1 – HIGH).

Material necessário para o teste


  • 1 Sensor de cor TCS3200;
  • 1 Placa de Arduino Uno R3;
  • 1 Breadboard;
  • Condutores de ligação;
  • 1 Cabo USB.

Esquema


Programa


//Programa: Sensor TCS3200
//Autor: Clube de Robótica ESGC - Prof. Ramiro Martins
 
//Pins de ligação ao Arduino
const int s0 = 8;
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;
  
//Variaveis das cores
int ver = 0;
int verde = 0;
int azul = 0;
 
void setup()
{
  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
  pinMode(out, INPUT);
  Serial.begin(9600);
  digitalWrite(s0, HIGH);
  digitalWrite(s1, LOW);
}
 
void loop()
{
  //Detecta a cor
  cor();
  //Mostra valores no serial monitor
  Serial.print("Vermelho :");
  Serial.print(ver, DEC);
  Serial.print(" Verde : ");
  Serial.print(verde, DEC);
  Serial.print(" Azul : ");
  Serial.print(azul, DEC);
  Serial.println();
 
  //Verifica se a cor vermelha foi detetada
  if (ver < azul && ver < verde && ver < 100)
  {
    Serial.println("Vermelho");
  }
 
  //Verifica se a cor azul foi detetada
  else if (azul < ver && azul < verde && azul < 1000)
  {
    Serial.println("Azul");
  }
 
  //Verifica se a cor verde foi detetada
  else if (verde < ver && verde < azul)
  {
    Serial.println("Verde");

  }
  Serial.println();
 
  //Espera para a proxima leitura e reiniciar o processo
  delay(50);
} 
void cor()
{
  //Rotina para leitura das cores RGB
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);
  //Regista o valor da cor vermelha na variavel ver
  ver = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  digitalWrite(s3, HIGH);
  //Regista o valor da cor azul na variavel azul
  azul = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  digitalWrite(s2, HIGH);
  //Regista o valor da cor verde na variavel verde
  verde = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}

Links


Anúncios

1 Comment

Os comentários estão fechados.