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

