Utilizando Sensor de Cor TCS230

Sensor-de-Cor-TCS230
Font Size

Olá, tudo bem? Hoje vamos aprender a como estar utilizando o sensor de cor TCS230. Um sensor muito utilizado devido ao seu custo benefício.

Vamos aprender a como estar identificando todas as cores dos objetos que aproximamos do sensor e como calibrar para uma melhor precisão dele. Quer saber como faz isso? Então vamos nessa!

Tipos de Aplicações do Sensor de Cor TCS230

A aplicação dos sensores de cor pode ter diversos exemplos, tudo vai depender das funções que determinado projeto irá executar. Contudo, o exemplo mais claro e que você vai encontrar muito na internet é a utilização desse sensor para a separação de objetos coloridos.

Funcionamento do Sensor de Cor TCS230

Então, entrando agora mais a fundo sobre o seu funcionamento, vamos compreender como esse sensor identifica a cor do objeto que colocamos na sua frente.

Antes disso, é importante saber que qualquer cor formada, ela sempre vai ser derivada de três cores principais, O chamado RGB. Assim, para cada cor, sempre vamos ter um valor de R = red, G = green e B = blue.

Falando agora sobre a composição do sensor, ela vai ser feita por 64 fotodiodos. Desses 64 fotodiodos, 16 tem filtros (ou seja, absorve) cor vermelha, 16 filtros para a cor verde, 16 para a cor azul e 16 não tem filtro algum.

Dessa forma, esses filtros são distribuídos uniformemente sobre o sensor, captando a luminosidade, filtrando as cores, e gerando na saída um sinal de onda quadrada com as informações sobre a intensidade das cores do RGB.

Configuração sensor de cor TCS230

Acredito que você já notou que o nosso sensor TCS230 possui 8 pinos. Desses pinos, vamos trabalhar apenas com 5, são eles: S0, S1, S2, S3, utilizado para o controle do sensor e o pino OUT, responsável pelo envio das informações coletadas.

O pino OE (Output Enable, ou saída habilitada/ativada) deve ser ligado ao GND, isso porque o módulo vai estar enviando continuamente informações ao Arduino.

Para terminar então a explicação da sua funcionalidade, vamos compreender como funciona os pinos de controle. Observe portanto, as tabelas abaixo:

Configuração de pinagem do sensor TCS230

Como vamos trabalhar com a escala de frequência no máximo então vamos colocar os pinos S0 e S1 no nível alto. Já os pinos S2 e S3 precisam estar se alterando para poder captar os valores de RGB.

Ou seja, quando aproximarmos o sensor de uma determinada cor será preciso realizar a leitura do red, green e blue, pois com esses valores vamos saber qual cor está na frente do sensor, beleza?

Lista de Componentes

Download Datasheet TCS230

Montagem do Circuito

Ligação do Sensor TCS230 no Arduino

Código do Projeto Comentado

/* ========================================================================================================
Projeto: Identificando Cores com TCS230
Autor: Danilo Nogueira
Data: 23/02/2019
Domínio Público.
// ==================================================================================================*/
// --- Conexão dos Pinos ---
  #define    S2    9
  #define    S3    10
  #define    OUT   8

// ==================================================================================================
// --- Definindo as funções ---
  void calculo_RGB();  // Função para calcular o valor de R G B de cada cor.
  void color();        // Função para identificar a cor que o sensor identificou.

// ==================================================================================================
// --- Definindo as Variáveis ---
  // Variáveis para armazenar os valores de cada cor enviados pelo sensor.
  int red;   
  int green;
  int blue;

// ==================================================================================================
// --- Configurando o Setup() ---
void setup() 
{
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(OUT, INPUT);
  
  Serial.begin(115200); // Velocidade de comunicação do Monitor Serial

}

// ==================================================================================================
// --- Configurando o Loop() ---
void loop() 
{
  calculo_RGB();
  color();
  delay(700);
}

// ==================================================================================================
// --- Desenvolvendo a Função criada ---
void calculo_RGB()
{
  //Seleciona leitura com filtro para vermelho de acordo com a tabela lembra?
  digitalWrite(S2,LOW);
  digitalWrite(S3,LOW);
  
  //Lê duração do pulso em LOW
  red = pulseIn(OUT, LOW);  // Função que retorna a duração do pulso em ms
  
  //Imprime via serial
  Serial.print("  RED = ");
  Serial.print(red);
  Serial.print(" | ");
  delay(10);

  //Seleciona leitura com filtro para verde
  digitalWrite(S2,HIGH);
  digitalWrite(S3,HIGH);
  
  //Lê duração do pulso em LOW
  green = pulseIn(OUT, LOW);
  
  //Imprime via serial
  Serial.print("GREEN = ");
  Serial.print(green);
  Serial.print(" | ");
  delay(10);

  //Seleciona leitura com filtro para azul
  digitalWrite(S2, LOW);
  digitalWrite(S3,HIGH);
  
  //Lê duração do pulso em LOW
  blue = pulseIn(OUT, LOW);
  
  //Imprime via serial
  Serial.print("BLUE = ");
  Serial.println(blue);
  delay(10);
}

// ==================================================================================================
// --- Desenvolvendo a Função criada ---
void color()
{
  // ----- OBS: Os valores dessa tabela irão variar dependendo da luminosidade do local. ------
  /* Tabela de Valores do RGB das Cores
   *     COR  | RED | GREEN | BLUE |
   *   PRETO  | 13  |   22  |  20  |
   * VERMELHO | 06  |   14  |  12  |
   *   VERDE  | 11  |   16  |  15  |
   *    AZUL  | 12  |   18  |  13  |
   *   CINZA  | 06  |   08  |  07  |
   *   BRANCO | 04  |   04  |  04  |
  */
  
  if (12 <= red <= 14  && 21 <= green <= 23 && 19 <= blue <= 21)
  {
    Serial.println("");
    Serial.print("    PRETO! ");
    Serial.println("");
  }

  if (05 <= red <= 07  && 13 <= green <= 15 && 11 <= blue <= 13)
  {
    Serial.println("");
    Serial.print("    VERMELHO! ");
    Serial.println("");
  }

  if (10 < red < 12  && 15 < green < 17 && 14 < blue < 16)
  {
    Serial.println("");
    Serial.print("    VERDE! ");
    Serial.println("");
  }

  if (11 < red < 13  && 17 < green < 19 && 12 < blue < 14)
  {
    Serial.println("");
    Serial.print("    AZUL! ");
    Serial.println("");
  }

  if (5 < red < 7  && 7 < green < 9 && 6 < blue < 8)
  {
    Serial.println("");
    Serial.print("    CINZA! ");
    Serial.println("");
  }

  if (03 < red < 04  && 03 < green < 04 && 03 < blue < 04)
  {
    Serial.println("");
    Serial.print("    BRANCO! ");
    Serial.println("");
  }
}
// ======================================= FIM =====================================================

Analisando o Código a Fundo

Em nosso código, nós iniciamos definindo os pinos do Arduino onde o sensor está conectado. Logo depois, declaramos as duas funções que vamos utilizar em nosso código e também declaramos as variáveis que utilizamos para trabalhar com os valores de RGB que o sensor está enviando ao Arduino.

Em seguida, no void setup, declaramos os pinos S2 e S3 como saída uma vez que iremos alternar eles para a leitura de cada cor do RGB. Além disso, iniciamos a comunicação serial e colocamos o valor de 115200. Então é preciso alterar esse valor quando você abrir o monitor serial, beleza?

Agora entrando no void loop, encontramos as nossas duas funções do programa. Analisando a primeira delas, a “calculo_RGB”, vamos encontrar dentro dela, toda a lógica de como está sendo feita a leitura de cada cor RGB do sensor. Primeiro configuramos os pinos S2 e S3 e então realizamos a leitura através do comando:

cor = pulseIn(OUT, LOW);

Depois disso, mostramos no Monitor Serial o valor enviado pelo sensor ao Arduino. A mesma lógica segue para as cores green e blue. Por fim, entramos na outra função do código chamada de “color”.

Dentro dessa função, é onde vamos identificar qual cor o sensor está lendo naquele momento. Para isso, monte uma tabela como essa que está no código e coloque os valores que o sensor está lendo naquele momento.

Em seguida, altere os intervalos dentro do If e adicione o número de cores que quiser. Lembrando que é aconselhável utilizar objetos com cores bem sólidas, nada de degradê ou desenho combinado?

Resultado do Projeto

Para finalizar o projeto de hoje, deixo para você um vídeo do canal da AutoCore no Youtube. Nele, estamos mostrando o resultado do projeto desenvolvido.

Mas e ai? Gostou? Caso tenha ficado algo incompleto para você, comenta abaixo 

Dicas Dúvidas?  Idéias de post? Críticas?  Só comentar também! 

Forte abraço!

Posts relacionados

Como Montar um Braço Robótico Educacional? – Parte II

por Davi Colares
4 anos ago

Construindo um Radar com Sensor Ultrassônico

por Danilo Nogueira
6 anos ago

Atualização firmware do ESP8266 – Parte 1

por autocore
7 anos ago