O Sensor de Cor TCS230 (TCS3200) é um módulo composto por 64 fotodiodos que são divididos da seguinte forma: 16 possuem filtros para a cor vermelha, 16 para a cor verde, 16 para a cor azul e 16 não possuem filtro. Além disso, o sensor possui quatro LEDs brancos para iluminação e oito pinos de conexão.
Os 64 fotodiodos estão distribuídos no Sensor de Cor TCS230 (TCS3200) uniformemente e são responsáveis por captar a luminosidade, filtrar as cores recebidas e em seguida gerar na saída do sensor um sinal de onda quadrada que traz informações sobre a intensidade das cores primárias (Red (Vermelho) / Green (Verde) / Blue (Azul)). A partir destas informações é possível verificar qual a cor que o sensor identificou. Especificações e características:
- Controlador: TCS230
- Tensão de operação: 3 a 5VDC
- Melhor faixa de detecção: 10mm
- Margem de erro típica: 0.2% a 50KHz
O sensor de cor TCS3200 é um detector de cor completo e inclui um sensor RGB TAOS TCS3200 e 4 LEDs brancos. O TCS3200 pode detectar e medir uma gama quase ilimitada de cores visíveis. É indicado para aplicações onde seja necessária a detecção da cor de um determinado objeto, superfície ou luz ambiente por exemplo.
O TCS3200 tem uma variedade de fotodetectores, cada um com um filtro vermelho, verde ou azul, ou sem filtro (claro). Os filtros de cada cor são distribuídos uniformemente por toda a matriz de modo a eliminar distorção. O dispositivo possui um oscilador que produz uma saída de onda quadrada, cuja frequência é proporcional à intensidade da cor lida.
O sensor possui na sua estrutura 64 fotodiodos, sendo que 16 deles tem filtro para a cor azul, 16 para a cor verde, 16 para a cor vermelha e os 16 restantes não tem nenhum tipo de filtro. A saída de dados do sensor é feita através do pino OUT, e o controle da leitura é feita por meio dos pinos S0, S1, S2 e S3, nas laterais do módulo. A alimentação vai de 2.7V à 5.5V.
Esse controle é configurado conforme a cor que queremos detectar. Usando a tabela abaixo, onde os pinos S0 e S1 definem a escala de frequência de saída de sinal, e os pinos S2 e S3 que determinam quais deles devem ser ativados para detectarmos a cor desejada.
Para ligar o sensor de cor ao Arduino, utilizamos as portas digitais de 2 à 6 : o pino OUT do sensor ligado à porta 2, e os pinos de controle S0, S1, S2 e S3 ligados às portas 3, 4, 5 e 6 respectivamente. Vamos montar um circuito utilizando o Sensor de cor TCS3200 e um Display LCD 16×2, que mostra os valores de R, G e B (Vermelho,Verde e Azul) do objeto próximo ao sensor.
O programa não utiliza nenhuma biblioteca específica, já que estamos trabalhando apenas com as portas digitais do Arduino. Para o display, utilizamos a biblioteca LiquidCrystal, que já está instalada na IDE do Arduino.
// Carrega a biblioteca do LCD #include <LiquidCrystal.h> // Definicoes dos pinos do sensor TCS3200 int s0=3,s1=4,s2=5,s3=6; int flag=0; int counter=0; // Variaveis cores int countR=0,countG=0,countB=0; // Pinos do LCD LiquidCrystal lcd(12, 11, 10, 9, 8, 7); void setup() { // Inicializa o LCD lcd.begin(16, 2); // Mensagens iniciais no display lcd.setCursor(0,0); lcd.print("Cor : --------"); lcd.setCursor(0,1); lcd.print("R: G: B: "); Serial.begin(9600); // Define os pinos como saida pinMode(s0,OUTPUT); pinMode(s1,OUTPUT); pinMode(s2,OUTPUT); pinMode(s3,OUTPUT); } void TCS() { // Escala de Frequencia de Saida digitalWrite(s1,HIGH); digitalWrite(s0,LOW); flag=0; attachInterrupt(0, ISR_INTO, CHANGE); timer2_init(); } void ISR_INTO() { counter++; } void timer2_init(void) { TCCR2A=0x00; TCCR2B=0x07; TCNT2= 100; TIMSK2 = 0x01; } // Leitura dos valores das cores int i=0; ISR(TIMER2_OVF_vect) { TCNT2=100; flag++; if(flag==1) { counter=0; } else if(flag==2) { // Cor Vermelha (R) digitalWrite(s2,LOW); digitalWrite(s3,LOW); countR=counter/1.051; lcd.setCursor(3,1); lcd.print(countR,DEC); digitalWrite(s2,HIGH); digitalWrite(s3,HIGH); } else if(flag==3) { // Cor Verde (G) countG=counter/1.0157; lcd.setCursor(9,1); lcd.print(countG,DEC); digitalWrite(s2,LOW); digitalWrite(s3,HIGH); } else if(flag==4) { // Cor Azul (B) countB=counter/1.114; lcd.setCursor(15,1); lcd.print(countB,DEC); Serial.println(countB,DEC); digitalWrite(s2,LOW); digitalWrite(s3,LOW); } else { flag=0; TIMSK2 = 0x00; } counter=0; delay(2); } void loop() { delay(10); TCS(); // Mostra a cor correspondente no display se // o valor da cor for maior do que 5 if((countR>5)||(countG>5)||(countB>5)) { if((countR>countG)&&(countR>countB)) { lcd.setCursor(6,0); lcd.print(" "); lcd.setCursor(6,0); lcd.print("Vermelho"); delay(1000); } else if((countG>=countR)&&(countG>countB)) { lcd.setCursor(6,0); lcd.print(" "); lcd.setCursor(6,0); lcd.print("Verde"); delay(1000); } else if((countB>countG)&&(countB>countR)) { lcd.setCursor(6,0); lcd.print(" "); lcd.setCursor(6,0); lcd.print("Azul"); delay(1000); } } else { delay(100); } }
Para testar o circuito, coloque objetos próximos ao sensor e veja a variação de tons de vermelho (R), Verde (G) e Azul (B). Se uma das três cores ultrapassar o valor 5, a cor correspondente será mostrada na primeira linha do LCD. Para ajustar esse valor, altere a linha: if((countR>5)||(countG>5)||(countB>5))
Troque o valor 5 por um valor de sua preferência. Altere também a subrotina TCS, que determina a frequência de escala de saída por meio dos pinos S0 e S1 e verifique a variação nos valores das cores.
O manual com diagrama elétrico da placa do Color Sensor TCS3200 está disponìvel em: Color Sensor TCS3200.
O arquivo do diagrama elétrico Detector de cores estará disponível em: 21_03_27_Circuito_Detector_de_cores_SRG (PDF).
© Direitos de autor. 2021: Gomes; Sinésio Raimundo. Última atualização: 01/04/2021
Nenhum comentário:
Postar um comentário