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
Lista completa de produtos
comprarBlackBoard UNO R3
Cabo USB AB 1.50m
Sensor de Cor TCS230
Resistor 300Ω - Pacote com 10 unidades
LED RGB Alto Brilho - 5 unidades
Micro Servo 9g SG90
Garra Robótica Ant V2
Protoboard 400 Pontos
WorkPlate 400 - Preta
Jumpers Macho-Macho x40 Unidades
Jumpers Macho-Fêmea x40 Unidades
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.
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.
Servo Motor
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.
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.
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.
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.