Go Down

Topic: Sensor de color ZX-Color (TCS230) (Read 998 times) previous topic - next topic

carlosaguirre

Compré este sensor de color, basado en el TC230, y que tiene dos leds. El problema es que en ves de 7 pines como todos los sensores de color que he visto en internet, este consta de 3 pines, uno para la entrada de 5v, otro para el ground y uno para el output. Este último se conecta a una de las entradas analógicas del arduino. Toda la documentación, ejemplos, tutoriales, etc que se encuentran en internet se refieren a la versión de 7 pines (con pines separados para R, G y B). Hasta ahora he podido hacer funcionar el sensor, capturar la lectura y mostarla en la consola usando:

const int sensorPin = A0;
Serial.println(analogRead(sensorPin));

El problema es que la lectura que muestra no tiene sentido (o al menos eso parece), con valores entre 0 y 914 dependiendo del color.

El manual del producto en cuestión se encuentra aquí: http://olimex.cl/website_MCI/static/documents/Datasheet_ZX-Color.pdf

Si alguien tiene alguna idea sería de gran ayuda!


surbyte

La hoja de datos dice :

Quote
Internal processing of ZX-COLOR will gives the digital data of target color in 6-bit
MSB
. The color and lightness data seperatable up to 64 steps. The data format is shown
below.

Bit 7 and 4 as Red component bits (Rr)
The full red color value is both bits as 11(R=1, r=1).
None red color component, both bits are 00 (R=0, r=0).
Bit 6 and 3 as Green component bits (Gg)
The full green color value is both bit as 11 (G=1, g=1).
None green color component, both bits are 00 (G=0, g=0)
Bit 5 and 2 as Blue component bits (Bb)
The full blue color value is both bits as 11 (B=1, b=1).
None blue color component, both bits are 00 (B=0, b=0).
Bit 1 and 0 : white object defination
Clear to "00" if the target object is not the white object
Set to "11" if the target object is the white object
El sensor detecta colores pero... si hay combinación tu debes decodificar los mismos.
Veamos... debes manejar un poco como se organiza la información.
Si tienes ROJO pondrá un b10000000 o sea 80h o bien 2.5V

El ejemplo al final del pdf esta claro

Code: [Select]
#define RED     145
#define GREEN   85
#define YELLOW  221
#define OFFSET  2
unsigned int color;

void setup() {
    Serial.begin(9600);
}


void loop() {

  color = analog(A0);
 
  if ((color >= RED-OFFSET) && (color <= RED+OFFSET)) {
      Serial.println("Color = RED");
  }
  else if ((color >= GREEN-OFFSET) && (color <= GREEN+OFFSET))  {
          Serial.println("Color = GREEN");
       }
  else if ((color >= YELLOW-OFFSET) && (color <= YELLOW+OFFSET)) {
          Serial.println("Color = YELLOW");
       }
  else  {
       Serial.println("Out of Range!");
  }
  delay(100);
}


Debería resolverte el problema

carlosaguirre

Gracias por responder.
Lamentablemente sigo sin entender muy bien . Yo quería un sensor que me entregara el valor de color en formato (R,G,B) y de esta forma lo pudiese pasar a otra aplicacion que me representara ese color. LOs colores que necesito detectar no son definidos, como rojo o azul, puede ser una tonalidad de rojo o de verde-amarillo. En definitiva, crees que este sensor no me sirve para lo que necesito?
Saludos

Go Up