fbpx

Como utilizar o módulo sensor de cor TCS3200 / TCS230 com Arduino

O módulo sensor de cor TCS3200 / TCS230 é capaz de detectar cores do tipo RGB (do inglês Red, Green e Blue, que significa Vermelho, Verde e Azul) de objetos à sua frente.

A figura mostra uma foto real retirada do sensor de cor TCS3200/TCS230
Figura 1: Módulo sensor de cor TCS3200/TCS230

No centro do módulo sensor de cor TCS3200 / TCS230 há um chip sensor RGB TCS3200 / TCS230 que é o responsável pela detecção das cores. Esse pequeno chip é formado por 64 fotodiodos (em um arranjo 8 x 8), conforme pode ser observado na Figura 2. Vale lembrar que o fotodiodo é um dispositivo semicondutor que converte luz em corrente elétrica.

A imagem mostra uma foto retirada do Chip sensor RGB TCS3200/TCS230 de maneira ampliada.
Figura 2: Chip TCS3200 ou TCS230

Os 64 pequenos fotodiodos possuem 4 diferentes filtros: 16 sensores têm filtro de identificação da cor verde, 16 da cor vermelha, 16 da cor azul e 16 que não possuem filtro, ou seja, detectarão toda a luminosidade. Com essa funcionalidade, é possível medir o nível de luminosidade de qualquer objeto e definir sua cor.

Os fotodiodos com filtro comum são conectados em paralelo e por meio dos pinos de controle podemos escolher qual dos filtros queremos ler. Por exemplo, se desejamos detectar a cor verde, precisamos selecionar a leitura dos 16 fotodiodos com filtro verde. Fazemos isso, configurando os pinos S2 e S3 como nível lógico ALTO. A Tabela 1 detalha o modo de configuração dos pinos S2 e S3 para os demais filtros dos fotodiodos.

S2S3Filtros do Fotodiodo
BaixoBaixoVermelho
Baixo AltoAzul
AltoBaixo Claro (sem filtro)
AltoAltoVerde
Tabela 1: Modo de configuração dos pinos S2 e S3.

Após a detecção, usando um conversor de corrente para frequência, as leituras dos fotodiodos são convertidas ondas quadradas com frequência diretamente proporcional à intensidade da luz. Usando um microcontrolador podemos ler estas ondas e obter os resultados para a cor.

A faixa de frequência de saída é de 2HZ ~500KHZ. O módulo sensor de cor TCS3200 / TCS230 possui dois pinos (S0 e S1) para controle da frequência de saída. A frequência pode ser dimensionada para três valores predefinidos diferentes de 2%, 20% ou 100%, conforme a Tabela 2.

S0S1Escala de fraquência
BaixoBaixoDesligar
BaixoAlto2%
AltoBaixo20%
AltoAlto100%
Tabela 2: Modo de configuração dos pinos S0 e S1.

Para auxiliar a detecção das cores, o sensor conta com 4 LEDs brancos em volta do sensor, conforme a Figura 3. Os LEDs são acionados quando o módulo é ligado e são usados para iluminar o objeto que terá sua cor detectada.

A figura mostra uma foto do módulo TCS3200 em funcionamento com os seus leds acessos
Figura 3: LEDs de iluminação do módulo sensor de cor TCS3200 TCS230.

Quanto a pinagem, temos a configuração da Figura 4.

A imagem mostra o sensor de cor TCS3200 com os seus respectivos pinos de atuação
Figura 4: Pinos do módulo sensor de cor TCS3200 TCS230

Cada pino possui uma função específica:

  • GND: Pino de aterramento;
  • VCC: Pino de alimentação do módulo. Essa alimentação pode variar entre 2,7V e 5,5 V;
  • S0 e S1: Pinos de configuração da escala de frequência saída;
  • S2 e S3: Pinos de configuração dos filtros dos fotodiodos;
  • OUT: Pino de saída de sinal.

Agora que já conhecemos o módulo sensor de cor TCS3200 / TCS230, vamos utilizá-lo. A proposta deste tutorial é utilizar o módulo em conjunto com o Arduino para identificar as cores vermelha, verde, azul e branca.

MATERIAIS NECESSÁRIOS

ESQUEMÁTICO DE LIGAÇÃO:

Inicialmente, certifique-se que sua placa UNO esteja desligada. Em seguida monte o circuito da Figura 5, utilizando o Arduino e o módulo TCS3200.

A figura mostra o circuito de ligação entre o arduino e o módulo sensor de cor TCS3200, para que assim o mesmo funcione
Figura 5: Circuito para projeto de detecção de cores com o módulo TCS3200 ou TCS230

Ao montar o circuito observe os seguintes pontos:

  • O módulo pode ser alimentado com 5V ou 3,3V do Arduino;
  • O pino GND do módulo deve ser conectado ao GND do Arduino;
  • O pino OUT do módulo deve ser conectado ao pino digital 8;
  • O pino S2 do módulo deve ser conectado à porta digital 9;
  • O pino S3 dever ser ligado ao pino digital 10 do Arduino.

ELABORANDO CÓDIGO

Nesse projeto, vamos realizar a leitura do módulo sensor de cor TCS3200 / TCS230 para identificação das cores vermelha, verde, azul e branca. O resultado será exibido no monitor serial.

Para facilitar o entendimento do código, acompanhe os seguintes passos:

1.Definir as constantes correspondentes aos pinos do Arduino

Iniciamos o programa definindo as constantes que serão utilizadas no código. Cada constante corresponde a um dos pinos do Arduino conectados aos pinos do sensor.

No nosso código foram declarados os pinos: PinOUT, PinS2 e PinS3.

2.Declaração das variáveis que serão utilizadas no código

Foram declaradas as variáveis red, green e blue para armazenar dados de leitura dos fotodiodos com filtro vermelho, verde e azul, respectivamente.

3.Inicialização da função cores()

4.Configuração dos pinos de entrada e saída e inicialização da comunicação serial

No setup() definimos os pinos de configuração dos filtros dos fotodiodos (S2 e S3) como saída e o pino OUT como entrada.

Além disto, inicializamos a comunicação serial por meio da instrução Serial.begin(9600);

5.Leitura dos fotodiodos

Na função loop() definimos o modo de configuração dos pinos S2 e S3 para os filtros dos fotodiodos e realizamos a leitura do pino OUT do módulo sensor de cor TCS3200 / TCS230.

Iniciamos configurando os pinos S2 e S3 como nível lógico baixo (LOW) para ativar a leitura dos fotodiodos com filtro vermelho. Em seguida, usamos a função pulseIn() para captar a largura do pulso do pino OUT do módulo sensor de cor, a armazenamos na variável red e imprimimos no monitor serial.

Repetimos a mesma lógica para configuração dos pinos S2 e S3 e realização da leitura para os filtros dos fotodiodos verde e azul.

Ao final, chamamos a função cores().

6.Função cores()

A função cores() será responsável por comparar os valores de leitura do sensor de cor e retornar qual a cor detectada.

Com base nesses passos, o código será escrito da seguinte forma:

/*
  -  DETECÇÃO DE CORES UTILIZANDO MÓDULO SENSOR DE CORES TCS3200  -
  =================================================
  === BLOG DA ROBOTICA - www.blogdarobotica.com ===
  =================================================
  Autor: Jonas Souza
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =================================================
  === CASA DA ROBOTICA - www.casadarobotica.com ===
  =================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  ==================================================
*/


#define PinOUT 8 //Definição do Pino OUT na entrada digital 8
#define PinS2  9 //Definição do Pino S2 na entrada digital 9
#define PinS3 10 //Definição do Pinto S3 na entrada digital 10

int red;//Declaração da variável que representará a cor vermelha
int green; //Declaração da variável que representará a cor verde
int blue; // Declaração da variável que representará a cor azul

void cores(); //Inicialização da função

void setup() {
  pinMode(PinOUT, INPUT); //Definição do PinOUT como sendo um pino de entrada
  pinMode(PinS2, OUTPUT); //Definição do Pino S2 como sendo um pino de saída
  pinMode(PinS3, OUTPUT); //Definição do Pino S3 como sendo um pino de saída
  Serial.begin(9600); //Inicia o monitor Serial com velocidade de 9600
}

void loop() {
  digitalWrite(PinS2, LOW); // Aciona um valor LOW ao Pino S2
  digitalWrite(PinS3, LOW); // Aciona um valor LOW ao Pino S3
  red = pulseIn(PinOUT, LOW); // define red como sendo responsável por ler a informação de pulso LOW do pino out
  Serial.print(" R: "); // Mostra a letra R no monitor Serial, representando red
  Serial.print(red); // Mostra o valor lido no PulseIn
  delay(15); // delay de 15 milissegundos até o próximo comando


  digitalWrite(PinS2, HIGH); // Aciona um valo high ao Pino S2
  digitalWrite(PinS3, HIGH); // Aciona um valo high ao Pino S3
  green = pulseIn(PinOUT, LOW); // define green como sendo responsável por ler a informação de pulso low no pino out
  Serial.print(" G: "); // Mostra a letra R no monitor Serial, representando green
  Serial.print(green); // Mostra o valor lido no PulseIn
  delay(15); // delay de 15 milissegundos até o próximo comando


  digitalWrite(PinS2, LOW);// Aciona um valor loq ao Pino S2
  digitalWrite(PinS3, HIGH); // Aciona um valor high ao Pino S3
  blue = pulseIn(PinOUT, LOW);// define blue como sendo responsável por ler a informação de pulso low no pino out
  Serial.print(" B: "); // Mostra a letra B no monitor Serial, representando blue
  Serial.println(blue); // Mostra o valor lido no PulseIn
  delay(15); // delay de 15 milissegundos até o próximo comando

  cores(); //chamada da função cores()
  delay(1000);
}

void cores() { //funçao responsavel por definir a cor que o sensor de luminosidade está lendo
  if ( blue < 20 && red < 20 && green < 20) { //detecção da cor branca
    Serial.println("Branco");
  }
  
  else if (blue < red && blue < green) { //detecção da cor azul
    Serial.println("Azul");
  }

  else if (green < red && green < blue) { //detecção da cor verde
    Serial.println("Verde");
  }

  else if (red < blue && red < green && red < 100) { //detecção da cor vermelha
    Serial.println("Vermelho");
  }
}

Por fim, temos o funcionamento do projeto, mostrado no Vídeo 1.

Vídeo 1: Funcionamento do módulo sensor de cores TCS3200

Espero ter ajudado,

Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!

Att. Jonas Souza

Dúvidas? Deixe seu comentário

Jonas Souza

Graduando em Engenharia Elétrica. Atua no setor desenvolvimento de tutoriais para o Blog da Robótica.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.