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
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"?