Descrición
Se ben cun octoacoplador podemos distinguir cores pola intensidade da luz reflectida, non soen ser moi fiables se non hai moita diferenza entre a luz que reflicten as cores das pezas que queremos identificar, polo que mellor é deixalos para distinguir entre branco e negro e usar outro dispositivo para distinguir outras cores, como verde, azul, amarelo, etc.
Un dos sensores de cor económicos existentes no mercado é o TCS3200, que é o que imos utilizar nesta práctica. Pódenos servir, por exemplo, para que un robot sexa quen de clasificar pezas en diferentes compartimentos, segundo a súa cor.
Funcionamento
Os TCS3200 son sensores que converten a intensidade da luz en frecuencia, sendo maior a frecuencia canto maior sexa a intensidade da luz incidente.
Unha matriz de 64 fotodíodos é a encargada de medir a intensidade da luz que incide sobre ela. Os fotodíodos non funcionan de maneira simultánea, senón que se activan por separado para realizar medicións con filtro vermello, verde, azul e sen filtrar, obténdose unha medida para cada cor RGB. Os pins s2 e s3 do sensor son os que determinan con que filtro se realizará a medición, de fano da maneira que aparece na táboa da dereita. | s2 | s3 | modo | |
LOW | LOW | vermello | ||
LOW | HIGH | azul | ||
HIGH | LOW | sen filtro | ||
HIGH | HIGH | verde |
O sensor ten un convertedor de corrente a frecuencia que converte as lecturas dos fotodíodos nunha onda cadrada cunha frecuencia que é proporcional á intensidade de luz reflectida pola cor do obxecto que medimos.
Os pins s0 e s1 do sensor encárganse de escalar a frecuencia de saída ao rango que desexemos. |
s0 | s1 | % frec |
|
LOW | LOW | apagado | ||
LOW | HIGH | 2% | ||
HIGH | LOW | 20% | ||
HIGH | HIGH | 100% |
Montaxe
TCS3200 | Arduino | ||
s0 | pin 2 | ||
s1 | pin 3 | ||
s2 | pin 4 | ||
s3 | pin 5 | ||
OUT | pin 6 | ||
OE | GND | ||
GND | GND | ||
VCC | VCC |
Programa
Para medir frecuencias Arduíno inclúe a función pulseIn(), que devolve o tempo que tarda en chegar un nivel a unha entrada dixital. Coa función cor() o que facemos é activar os fotodíodos correspondentes a cada cor RGB e escribir a lectura da frecuencia nas variables RGB creadas para tal fin.
Segundo os valores obtidos, identificaremos varias cores (vermello, azul, verde e amarelo). Podes modificar o programa para identificar outras diferentes.
Ten en conta que os valores obtidos son frecuencias, e non se trata de cores RGB.
// Declaración de variables // Pins de conexión const int s0 = 2; const int s1 = 3; const int s2 = 4; const int s3 = 5; const int out = 6; // frec_uencias RGB int frec_vermello = 0; int frec_verde = 0; int frec_azul = 0; // Configuración void setup(){ Serial.begin(9600); // Comunicación consola serie pinMode(s0,OUTPUT); pinMode(s1,OUTPUT); pinMode(s2,OUTPUT); pinMode(s3,OUTPUT); pinMode(out,INPUT); digitalWrite(s0,HIGH); // escala de frec_uencia 100% digitalWrite(s1,HIGH); } // Programa // Función que realiza a lectura RGB void cor() { // lectura vermello digitalWrite(s2, LOW); digitalWrite(s3, LOW); frec_vermello = pulseIn(out, LOW); // lectura azul digitalWrite(s2, LOW); digitalWrite(s3, HIGH); frec_azul = pulseIn(out, LOW); // lectura verde digitalWrite(s2, HIGH); digitalWrite(s3, HIGH); frec_verde = pulseIn(out, LOW); } // Programa que identifica as cores que se detectan void loop(){ cor(); // escribe na consola os valores RGB Serial.print(" R="); Serial.print(frec_vermello); Serial.print(" G="); Serial.print(frec_verde); Serial.print(" B="); Serial.print(frec_azul); // identifica cores if (frec_vermello<frec_azul && frec_verde>frec_azul && frec_vermello<frec_verde && frec_vermello<20) { Serial.println(" --> vermello"); } else if (frec_azul<frec_vermello && frec_azul<frec_verde && frec_verde<frec_vermello) { Serial.println(" --> Azul"); } else if (frec_vermello>frec_verde && frec_azul>frec_verde) { Serial.println(" --> Verde"); } else if (frec_vermello<frec_verde && frec_verde<frec_azul && frec_verde<10) { Serial.println(" --> Amarelo"); } else{ Serial.println(" "); } delay(800); }
Propostas
- Modifica o necesario para que o sensor detecte pezas de diferentes cores que teñas no taller.
- Fai que cando detecte unha peza vermella se acenda un LED vermello, cando detecte unha peza amarela se acenda un LED vermello e cando detecte unha peza verde se acenda un LED verde.