quinta-feira, 1 de abril de 2021

Aula 16 - Sensor de Reconhecimento de Cor TCS3200 com Arduino Uno

 
   
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