Sensor de Reconhecimento de Cor TCS230

download Sensor de Reconhecimento de Cor TCS230

of 5

description

Sensor TCS23

Transcript of Sensor de Reconhecimento de Cor TCS230

Sensor de reconhecimento de cor TCS230 / TCS3200O artigo de hoje fala sobre como utilizar o Arduino para montar um sistema de reconhecimento de cores usando omdulo TCS230 / TCS3200.

Esse mdulo usa osensor TCS230(datasheet), que composto por 64 fotodiodos. Desses 64 fotodiodos, 16 tem filtros para a cor vermelha, 16 para a cor verde, 16 para a cor azul e 16 no tem filtro algum.

Distribudos uniformemente sobre o sensor, esses sensores captam a luminosidade, filtrando as cores, e geram na sada um sinal de onda quadrada com as informaes sobre a intensidade das coresvermelho (R = Red),verde (G = Green)eAzul (B = Blue).

Como no mdulo mostrado acima, o sensor TCS230 geralmente vem montado em conjunto com quatro leds brancos para iluminao, e oito pinos para conexo.

O mdulo aceita alimentao de 3 5 volts e so utilizados 5 pinos para conexo ao Arduino : os pinos de controleS0, S1, S2, S3, e o pinoOUT, que o responsvel pelo envio das informaes.

O pinoOE(Output Enable, ou sada habilitada/ativada) deve ser ligado ao GND, j que o mdulo vai enviar informaes continuamente ao Arduino.

No circuito adicionei 3 leds nas cores correspondentes, para que acendam quando determinada cor for reconhecida pelo sensor. Apesar de trabalhar nesse experimento apenas com as 3 cores primrias, nada impede que outras combinaes sejam usadas no programa, de acordo com os nveis do sinal RGB.

No programa, os pinos S0 e S1 so colocados em nvel alto e ento so alternados os estados dos pinos S2 e S3, que determinam qual fotodiodo ser ativado. Veja na tabela abaixo as combinaes que determinam o tipo de frequncia de sada e tambm o padro de ativao dos fotodiodos :

1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798// Programa : Detector de cores usando modulo TCS230 // Alteracoes e comentarios : Arduino e Cia // // Baseado no programa original de Martin Mason //Pinos de conexao do modulo TCS230 const int s0 = 8; const int s1 = 9; const int s2 = 12; const int s3 = 11; const int out = 10; //Pinos dos leds int pinoledverm = 2; int pinoledverd = 3; int pinoledazul = 4; //Variaveis que armazenam o valor das cores int red = 0; int green = 0; int blue = 0; void setup() { pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); pinMode(pinoledverm, OUTPUT); pinMode(pinoledverd, OUTPUT); pinMode(pinoledazul, OUTPUT); Serial.begin(9600); digitalWrite(s0, HIGH); digitalWrite(s1, HIGH); } void loop() { color(); //Chama a rotina que le as cores //Mostra no serial monitor os valores detectados Serial.print("Vermelho :"); Serial.print(red, DEC); Serial.print(" Verde : "); Serial.print(green, DEC); Serial.print(" Azul : "); Serial.print(blue, DEC); Serial.println();

//Verifica se a cor vermelha foi detectada if (red < blue && red < green && red > 50) { Serial.println("Vermelho"); digitalWrite(pinoledverm, HIGH); //Acende o led vermelho digitalWrite(pinoledverd, LOW); digitalWrite(pinoledazul, LOW); }

//Verifica se a cor azul foi detectada else if (blue < red && blue < green) { Serial.println("Azul"); digitalWrite(pinoledverm, LOW); digitalWrite(pinoledverd, LOW); digitalWrite(pinoledazul, HIGH); //Acende o led azul }

//Verifica se a cor verde foi detectada else if (green < red && green < blue) { Serial.println("Verde"); digitalWrite(pinoledverm, LOW); digitalWrite(pinoledverd, HIGH); //Acende o led verde digitalWrite(pinoledazul, LOW); } Serial.println();

//Aguarda 2 segundos, apaga os leds e reinicia o processo delay(2000); digitalWrite(pinoledverm, LOW); digitalWrite(pinoledverd, LOW); digitalWrite(pinoledazul, LOW); } void color() { //Rotina que le o valor das cores digitalWrite(s2, LOW); digitalWrite(s3, LOW); //count OUT, pRed, RED red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3, HIGH); //count OUT, pBLUE, BLUE blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2, HIGH); //count OUT, pGreen, GREEN green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); }

Carregue o programa e aproxime objetos de diferentes cores ao sensor. O led correspondente ir acender, e tambm gerada uma sada como essa no serial monitor, onde voc pode ver exatamente os nveis de sinal das cores detectadas :