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:

Sensor-de-Cor-TCS230
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

Sensor-de-Cor-TCS230
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!

0.00 avg. rating (0% score) - 0 votes