top of page

Este projecto é muito interessante à meu ver. Utilizaremos um sensor de cor, por sua vez, conseguiremos detectar três cores diferentes, entre eles, Azul, Verde e Vermelho.

Aqui, apenas vou mostrar como deve ser feita a ligação do hardware e como programar de forma simples de forma a detectar cores na sua proximidade.

COMPONENTES A USAR:

Arduino Uno 

1 cabo USB para programar

Sensor de cor (TCS3200)

CARACTERÍSTICAS DO SENSOR DE COR

- Tensão de operação (2,7V a 5,5V); 

- Programável

- Comunicação derreta com microcontrolador (mosso caso, usamos arduino) 

- Tem um erro de 0,0% para 50kHz8

- Opera a uma temperatura ambiente de -40 a 85 ºC.

A tabela da verdade do sensor de cor é relativamente simples, fazendo combinações de S2 e S3 (pino 7 e 8 respectivamente) de forma a obter a cor detectada. Ver a tabela de verdade.

S2      S3       Photodiode type

 L        L         Red

 L        H         Blue

 H        L         Clear (No filter)

 H        H         Green

Também existe a tabela de verdade para S0 e S1 (pino 1 e 2 respectivamente), trata-se da saída da frequência em escala.

No programa que usei, activei os pinos 1 e 2 logo no inicio do programa. No meu intender, esse pinos em haver com a luminosidade que envolve o sensor.

S0      S1       Output Frequency Scaling (fo)

 L        L         Power down

 L        H         2%

 H        L         20%

 H        H        100%

ESQUEMA LIGAÇÃO

Na imagem em baixo podem verificar um esquema de ligação de forma simples. O pino OE negado não foi ligado. No esquema apresentei o arduino Nano, mas as ligações podem ser feitas seguindo esta forma de ligação para o arduino uno.

 

Usei o arduino Nano no desenho esquemático porque no programa que usei para desenhar não tenho o arduino Uno na biblioteca, fiz a procura e apenas encontrei Arduino Nano.

Observação do esquema:

Servo motor:

O servo motor usado, é do tipo micro-servo-motor.

Para alimentar o servo motor, usei um dos pinos do arduino que me fornece 3,3V (também está disponível para o arduino Uno).

OBS: Mais a frente, vou criar um projecto falando apenas de servo motor e todas as suas características e mostrarei seu funcionamento.

Sensor de cor:

A alimentação do sensor de cor é feito no pino do arduino que me fornece 5,5V. O normal é que seja 5V, mas se observarão nas características do sensor, o mesmo pode ser alimentado a 5,5V.

Observem que no sensor de cor, o pino "OE", não está conectado, isso foi propositadamente.

Os pinos "S0, S1, S2 e S3" estão ligados nos pinos digitais do arduino, GND e VDD estão ligado à GND e 5,5V do arduino respectivamente.

CÓDIGO FONTE

#include <Servo.h>
Servo servo;      // Name of my Servo is servo

 

const int s0 = 4;  // Variable to sensor color
const int s1 = 3;  
const int s2 = 6;  
const int s3 = 5;  
const int out = 7;   

// Variables  
int posServo = 20;        // Variable to servo position
int red = 0;  
int green = 0;  
int blue = 0;  
    
void setup()   
{  
       Serial.begin(9600); 
       servo.attach(12);     //PWM servo
       

       pinMode(s0, OUTPUT);  
       pinMode(s1, OUTPUT);  
       pinMode(s2, OUTPUT);  
       pinMode(s3, OUTPUT);  
      pinMode(out, INPUT);  
 

      digitalWrite(s0, HIGH);  
      digitalWrite(s1, HIGH);  
}  
    
void loop() 
{  
       color(); 
       Serial.print("R Intensity:");  
       Serial.print(red, DEC);  
       delay (100);
   

       Serial.print(" G Intensity: ");  
       Serial.print(green, DEC);  
       delay (100);
 

      Serial.print(" B Intensity : ");  
      Serial.print(blue, DEC);  
      delay (100);
    

      if (red < blue && red < green && red < 18)
      {  
          Serial.println(" - (Red Color)");  
          servo.write(160);
         delay(100);

       }  

      else if (blue < red && blue < green)   
      {  
          Serial.println(" - (Blue Color)");  
          servo.write(110);
          delay(100);
       }  

       else if (green < red && green < blue)  
       {  
           Serial.println(" - (Green Color)");  
           servo.write(70);
           delay(100);
 
        } 
  
        else{
           Serial.println(); 
           servo.write(posServo); 
           delay(100);
        }
 }  
    
void color()  
{    
      digitalWrite(s2, LOW);  
      digitalWrite(s3, LOW);  
   

      // RED  
      red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
  

      // BLUE

      digitalWrite(s3, HIGH);  
      blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);  
  
     // GREEN  

    digitalWrite(s2, HIGH);  
    green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
  
}

VÍDEO ILUSTRATIVO

Espero que gostem do vídeo, não é a melhor, mas tem todo o meu esforço e vontade nesse vídeo.

Datasheet sensor de cor

SENSOR DE CORES

bottom of page