Usando o Sensor de Cor TCS230




Introdução

A sua aplicação precisa identificar cores, mas você não sabe como implementar essa função? O Sensor de Cor TCS230 é utilizado para detectar cores do tipo RGB (red, green e blue) em objetos colocados à sua frente, e assim você é capaz de atuar sobre objetos de uma cor específica.

Nesse tutorial você irá aprender a identificar cores e a implementar uma lógica para atuar sobre uma determinada cor lida.

Lista de Materiais

Conceitos Teóricos

Sensor de Cor TCS230

O módulo aceita uma alimentação de 3 a 5 V e são utilizados cinco pinos para a conexão ao Arduino. São eles: os pinos de controle S0 e S1, que configuram a escala de frequência na saída para 2%, 20% ou 100%; S2 e S3, que selecionam o filtro de cor a ser lida; OUT, que é o responsável pelo envio das informações; e o pino OE (Operational Enable), que deve ser ligado ao GND, já que o módulo vai enviar informações continuamente ao Arduino.

tabela-logica
Tabela de seleção de filtros e escala de frequência
Fonte: Datasheet TCS230

O sensor possui 64 fotodiodos que captam a intensidade da luz, dos quais 48 são filtrados para as cores RGB (16 para a cor vermelha, 16 para a cor verde e 16 para a cor azul), e o restante não possui filtro. Ele gera na saída um sinal de onda quadrada com as informações sobre a intensidade das cores RGB, como na imagem abaixo.

saida-sensor
Processo de identificação de cor e envio de informações para o Arduino
Fonte: RandomNerdTutorials

Servo Motor

pinagem-servo
Pinagem Servomotor
Fonte: Flickr

Os servomotores de aeromodelismo, como o MG90S e o MG996R, possuem uma tensão de alimentação e operação entre 4,8 V e 6 V, assim como três pinos de conexão, sendo eles VCC (fio vermelho), GND (fio marrom) e PPM (fio laranja), como na imagem ao lado. Com ele é possível controlar a posição do eixo através dos comandos enviados pelo microcontrolador.

Vale lembrar que os servomotores trabalham com um sinal PPM (Pulse-Position Modulation), de rádio controle, porém podemos controlá-los utilizando placas da plataforma Arduino, juntamente com a biblioteca "Servo" da Arduino IDE, que envia um sinal PPM através dos pinos digitais da placa.

Para este tutorial usamos a Garra Robótica Ant V2, portanto, antes de mais nada, monte a estrutura da garra seguindo os passos de seu manual de montagem.

Projeto Identificando Cores

Nesse primeiro projeto vamos usar o sensor TCS230 para identificar cores.

Circuito

Monte o circuito conforme a figura abaixo. Note que utilizamos um LED RGB, que irá acender a cor corresponde ao objeto colocado na frente do sensor de cores.

circuito-1
Circuito Elétrico

Código

Com o circuito pronto, copie e carregue o código abaixo para sua BlackBoard.

Entendendo o Código

No início do código definimos os pinos para a conexão com o sensor de cor e os pinos que são conectados ao LED RGB. Posteriormente criamos as variáveis vermelho, verde e azul, que armazenam os valores das cores.

No setup do programa, definimos as entradas e saídas, e também deixamos o pino S0 em nível alto e o pino S1 em nível baixo, configurando como 20% a frequência de saída.

Pulando brevemente o looping do código, inserimos a função leitura_cores(), que contém a rotina de leitura das cores. Para realizar essa leitura de cores, primeiramente definimos os pinos S2 e S3 em nível lógico baixo, para ativar no sensor o filtro de cor vermelha, e então verificamos através da lógica if(digitalRead(PINO_SENSOR_OUT) == HIGH) se o nível lógico do pino OUT do sensor está alto. Caso essa condição seja verdadeira, atribuímos à variável vermelho a duração do pulso do pino de saída do sensor em nível baixo através do comando pulseIn(PINO_SENSOR_OUT, LOW). Caso contrário, utilizamos o comando pulseIn(PINO_SENSOR_OUT, HIGH) para atribuir à variável vermelho a duração do pulso de saída do sensor em nível alto. Em seguida, ativamos o filtro de cor azul do sensor, mantendo o pino S2 em nível lógico baixo, e definindo o pino S3 em nível lógico alto. Após a ativação do filtro de cor azul, da mesma maneira da variável vermelho, verificamos o nível lógico da saída do sensor atribuímos a sua duração de pulso à variável azul. Por fim, o filtro de cor verde é ativado, passando o pino S2 para nível lógico alto também, para que possamos atribuir à variável verde a duração do pulso do pino de saída do sensor, da mesma forma que foi feita com as variáveis vermelho e azul.

No looping do programa, primeiramente chamamos a função leitura_cores(), realizando assim a leitura das cores, para que possamos compará-las e atuar sobres elas. Em seguida, com as condições "if", verificamos qual foi a cor lida, através da comparação das variáveis vermelho, azul e verde. Ao identificar a cor vermelha, por exemplo, o TCS230 gera pulsos de baixa duração com o filtro de cor vermelha ativada, o que acaba gerando um valor inferior às demais cores. O mesmo ocorre com as cores verde e azul em seus respectivos filtros, portanto, podemos compará-las através da duração do pulso recebido. Através da condição if (vermelho < azul && vermelho < verde), verificamos se a variável vermelho é inferior às variáveis azul e verde. Então, caso essa condição seja verdadeira, sabemos que a cor lida pelo sensor é vermelha, e acionamos, portanto, o pino da cor vermelha do LED RGB, assim como mantemos os pinos das cores verde e azul do LED apagados.

Da mesma maneira que comparamos a variável vermelho, comparamos as variáveis azul e verde através das condições if (azul < vermelho && azul < verde) e if (verde < vermelho && verde < azul), respectivamente. Então acendemos e apagamos os respectivos pinos do LED para demonstrar qual foi a cor lida pelo sensor.

O Que Deve Acontecer

Como é possível ver abaixo, o LED RGB acenderá de acordo com a cor do objeto na frente do sensor, sendo ele, azul, verde ou vermelho.

Resultado Final

Projeto Agarrando por Cores

Agora que já aprendemos a identificar cores, que tal capturar com uma garra robótica um objeto quando determinada cor for identificada?

Circuito

Para esse projeto, monte o circuito a seguir, com a garra robótica já montada.

circuito-2
Circuito Elétrico

Código

O código para o controle da garra robótica é parecido com o código do primeiro projeto, porém adicionando alguns comandos para controle do servomotor.

Entendendo o Código

No início do código, adicionamos a biblioteca "Servo" da Arduino IDE, e criamos o objeto servo_motor, que é atribuído ao pino 6 na configuração do código através do comando servo_motor.attach(6).

Durante a execução de leitura de cores do sensor, e juntamente com o acender do pino azul do LED RGB, movemos o eixo do servo para o ângulo definido para o seu fechamento (10 graus). Entretanto, caso a cor lida não seja azul, o servomotor é mantido na posição de 90 graus.

O Que Deve Acontecer

Ao identificar a cor azul, a garra se fecha no intuito de capturar o objeto à sua frente, e caso contrário, a garra irá se manter aberta, como se estivesse à espera de uma nova leitura, como no GIF abaixo.

Resultado Final
Avatar
Avatar