Utilizando Sensor de Cor TCS230
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:
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
- 01 x Arduino UNO
- 01 x Protoboard 830 Pontos
- 01 x Sensor de Cor TCS230
- Alguns Jumpers
Montagem do Circuito
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!