Sensor de Cor RGB – TCS3200


Neste artigo, iremos elaborar um circuito capaz de identificar as cores primarias com o sensor TCS3200 e acender um Led RGB com a cor correspondente.

Sensor de Cor – TCS3200

Para realizar este projeto, iremos necessitar do seguinte material:

Imagem Produto Comprar
 

 

 

Arduino UNO

 


 

 

 

Sensor de Cor RGB TCS3200

 


 

 

 

LED RGB

 


 

 

 

Placa Ensaios Breadboard

 


 

 

 

Jumpers Macho-Macho

 


 

 

 

Jumpers Macho-Fêmea

 



O sensor de cor TCS3200 utiliza o chip TCS3200 para detetar o nível de cor RGB (Red, Green e Blue, ou Vermelho, Verde e Azul) do objeto que for colocado em frente ao sensor. Este sensor possui 2 linhas com 5 pinos cada,

Sensor de Cor TCS3200
Sensor
de Cor TCS3200

Os pinos S0 e S1 determinam a frequência de saída, os pinos S2 e S3 determinam a cor de saída. Como pode verificar nas seguintes tabelas:

Tabela de Valores de Cor

 

Esquema de Montagem

Esquema de Montagem

 

Código Utilizado: Após efetuar as ligações em cima descritas, deverá carregar o seguinte código:

//Pinos de conexao do modulo
const int s0 = 8;
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;

//Pinos do led RGB
int pinoledverm = 2;
int pinoledverd = 3;
int pinoledazul = 4;

//Variaveis cores
int red = 0;
int green = 0;
int blue = 0;

void setup()
{
  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
  pinMode(out, INPUT);
  pinMode(pinoledverm, OUTPUT);
  pinMode(pinoledverd, OUTPUT);
  pinMode(pinoledazul, OUTPUT);
  Serial.begin(9600);
  digitalWrite(s0, HIGH);
  digitalWrite(s1, LOW);
}

void loop()
{
  //Detecta a cor
  color();
  //Mostra valores no serial monitor
  Serial.print("Vermelho :");
  Serial.print(red, DEC);
  Serial.print(" Verde : ");
  Serial.print(green, DEC);
  Serial.print(" Azul : ");
  Serial.print(blue, DEC);
  Serial.println();

  //Verifica se a cor vermelha foi detectada
  if (red < blue && red < green && red < 100)
  {
    Serial.println("Vermelho");
    digitalWrite(pinoledverm, LOW); //Acende o led vermelho
    digitalWrite(pinoledverd, HIGH);
    digitalWrite(pinoledazul, HIGH);
  }

  //Verifica se a cor azul foi detectada
  else if (blue < red && blue < green && blue < 1000)
  {
    Serial.println("Azul");
    digitalWrite(pinoledverm, HIGH);
    digitalWrite(pinoledverd, HIGH);
    digitalWrite(pinoledazul, LOW); //Acende o led azul
  }

  //Verifica se a cor verde foi detectada
  else if (green < red && green < blue)
  {
    Serial.println("Verde");
    digitalWrite(pinoledverm, HIGH);
    digitalWrite(pinoledverd, LOW); //Acende o led verde
    digitalWrite(pinoledazul, HIGH);
  }
  Serial.println();

  //Delay para apagar os leds e reiniciar o processo
  delay(50);
  digitalWrite(pinoledverm, HIGH);
  digitalWrite(pinoledverd, HIGH);
  digitalWrite(pinoledazul, HIGH);
}

void color()
{
  //le o valor das cores
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);
  //count OUT, pRed, RED
  red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  digitalWrite(s3, HIGH);
  //count OUT, pBLUE, BLUE
  blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
  digitalWrite(s2, HIGH);
  //count OUT, pGreen, GREEN
  green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}

Ter em atenção:

  1. A luz ambiente afeta a leitura das cores, poderá ser necessário ajustar os valores utilizados no código (X).
      1. if (red < blue && red < green && red < X)
      2. else if (blue < red && blue < green && blue < X)
      3. else if (green < red && green < blue)

     

  2. Na parte inferior do sensor encontram-se dois potenciómetros responsáveis pelo ajuste da sensibilidade das frequências e das cores lidas, necessário abrir ou fechar potenciómetros para obter valores mais adequados.

 

Para mais projetos, percorram o nosso blog, onde podem encontrar vários artigos interessantes relacionados com eletrónica, robótica e muito mais! Visitem também o nosso site, onde encontram tudo para eletrónica e robótica!