Este pequeno sensor TCS3200D com lente é capaz de perceber cores e enviá-las ao Arduíno. Apesar de não muito confiável, me pareceu muito legal. Tem também uma versão sem lentes.
Possui 4 leds montados na placa.
Os conectores são: S0, S1, S2, S3, GND, VCC, OUT e LED.
Há uma tampa para proteger a lente.
Veja como ficou a ligação com o Arduíno.
Eu usei a tensão de 3.3V do Arduíno para conectar aos leds. Ficou muito bom o brilho.
Nesta foto estou tentando ler o azul do meu grampeador.
Os resultados para azul não são muito bons, mas dá para perceber que o nível de azul é um pouco maior.
Falando nisso, vou deixar o programa aqui para quem quiser usar:
int s2Pin = 7;
int s3Pin = 8;
int outPin = 4;
void setup() {
pinMode(s2Pin, OUTPUT);
pinMode(s3Pin, OUTPUT);
pinMode(outPin, INPUT);
Serial.begin(9600);
}
int readOutputPulse(int pin) {
int count = 0;
while ((digitalRead(pin) == 1) & (count < 32640)) {
count++;
}
if (count == 32640) return count+2;
count = 0; while ((digitalRead(pin) == 0) & (count < 32640)) {
count++;
}
return count;
}
int readRed() {
int pulseWidth = 0;
int colorStrength = 0;
digitalWrite(s2Pin, LOW);
digitalWrite(s3Pin, LOW);
delay(100);
pulseWidth = readOutputPulse(outPin);
colorStrength = (pulseWidth/128);
colorStrength = (255 - colorStrength);
return colorStrength;
}
int readGreen() {
int pulseWidth = 0;
int colorStrength = 0;
digitalWrite(s2Pin, HIGH);
digitalWrite(s3Pin, HIGH);
delay(100);
pulseWidth = readOutputPulse(outPin);
colorStrength = (pulseWidth/128);
colorStrength = (255 - colorStrength);
return colorStrength;
}
int readBlue() {
int pulseWidth = 0;
int colorStrength = 0;
digitalWrite(s2Pin, LOW);
digitalWrite(s3Pin, HIGH);
delay(100);
pulseWidth = readOutputPulse(outPin);
colorStrength = (pulseWidth/128);
colorStrength = (256 - colorStrength);
return colorStrength;
}
void loop() {
Serial.print("R:");
Serial.println(readRed());
Serial.print("G:");
Serial.println(readGreen());
Serial.print("B:");
Serial.println(readBlue());
Serial.println("");
delay(500);
}
Agora estou lendo uma tela branca no computador.
Uma tela vermelha. Veja que o sensor é muito mais sensível a esta cor do que qualquer outra.
Uma tela verde:
E finalmente azul.
Embora muito mais sensível a vermelho do que azul ou verde, o sensor funciona. Talvez alguma calibração seja necessária para funcionar melhor. Deixo abaixo link para as versões com lente (Ebay) e sem lentes (DX):
Com lentes – http://www.ebay.com/sch/i.html?_nkw=tcs3200d+lens&_sacat=0
Sem lentes – http://www.dx.com/p/gy-31-tcs230-tcs3200-color-sensor-recognition-module-blue-black-216448
Tudo vem da China site de reviews de produtos comprados na China













Hello Adriano,
Thanks for you helpful article.
About the code. It seems to be missing some characters?
While ((digitalRead(PIN) == 1) & (count < 32640)) {
count ;
Should this be "count++;"?
And what about this piece: If (count == 32640) return count 2;
What's between "count" and "2"?