Medir el color con Arduino y el colorímetro TCS3200


arduino-sensor-color-tcs3200

¿Qué es un sensor de color TCS3200?

EL TCS3200 es un sensor óptico que permite detectar el color de un objeto ubicado en frente de él. Podemos conectarlo este sensor con facilidad a un autómata o procesador como Arduino.

Internamente, el TCS3200 está formado por una matriz de fotodiodos de silicona junto con un conversor de frecuencia, en un único integrado CMOS.

La matriz dispone de 8 x 8 fotodiodos de 110 µm, de los cuales 16 tienen filtros azules, 16 verdes, 6 rojos, y 16 no tienen filtro. Los fotodiodos están distribuidos de forma que minimizan el efecto la incidencia no uniforme de la luz.

La salida del TCS3200 es una onda cuadrada del 50% duty, cuya frecuencia es proporcional a la intensidad luminosa. La tensión de alimentación del sensor es de 2.7V a 5.5V.

Anuncio:

arduino-sensor-color-tcs3200-funcionamiento

Frecuentemente el TCS3200 se distribuye en módulos que incorporan dos o cuatro LED de luz blanca y un protector de plástico. El objetivo de ambas medidas es minimizar los efectos de la iluminación ambiente en la medición.

Pese a sus especificaciones y elementos para eliminar la luz ambiente, el TCS3200 no es capaz de medir de forma precisa el color RGB de un objeto, o la temperatura de color de una fuente luminosa.

Sin embargo, podemos emplearlo para distinguir entre colores básicos. Por ejemplo, podemos emplearlo para reconocer el color de una tarjeta o un objeto, y guiar a un robot en un recorrido.

Si buscas un sensor de color deberías mirar el TCS34725, un sensor RGB más moderno y avanzado que el TCS3200. Más información en esta entrada.

Precio

El TCS3200 es un sensor medianamente barato. Podemos encontrar módulos sin el protector de plástico por 1.80€ y por unos 3€ con el protector, buscando en vendedores internacionales de eBay o AliExpress.

arduino-sensor-color-tcs3200-componente

Esquema de montaje

El TCS3200 tiene cuatro entradas digitales S0, S1, S2, y S3, y una salida digital Out. Para conectarlo a Arduino necesitaremos emplear al menos 3 pines digitales.

En primer lugar debemos alimentar el módulo conectando los pines Gnd y Vcc del TCS3200, respectivamente, a Gnd y Vcc de Arduino.

Los pines S0 y S1 controlan la frecuencia de la salida y la desactivación del módulo. Los conectamos a dos salidas digitales, o podemos conectarlas a 5V si no queremos poder apagar el módulo.

Power down2%20%100%
s0LLHH
s1LHLH

Por otra parte, los pines S2 y S3 seleccionan el color a medir. Deberemos conectarlos a dos salidas digitales de Arduino.

RedBlueClearGreen
s2LLHH
s3LHLH

Finalmente, conectamos la salida del sensor Out a una entrada digital de Arduino por lo que la conexión empleando los pines, sería la siguiente.

arduino-sensor-color-tcs3200-montaje

Mientras que la conexión, vista desde Arduino, sería la siguiente.

arduino-sensor-color-tcs3200-conexion

Ejemplos de código

En el siguiente ejemplo realizamos la lectura del TCS3200. Para ello empleamos la función PulseIn para determinar la duración del pulso recibido por el sensor.

Realizamos el proceso para cada color, y empleamos los valores obtenidos para clasificarlo como rojo, azul o verde.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous Detector de metales con Arduino y sensor inductivo
Next Medir cantidad de luxes con Arduino y el luxómetro BH1750
1000
7 Comment threads
4 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
9 Comment authors
newest oldest
Javi

Hola Luis,
¿Tienes experiencia con otros sensores de color como el TCS3414CS, el TCS3472 o el TCS34725 con conexión I2C, y sobre la calibración de los mismos?
Un saludo
Javier

Carlos

Buenas
Tengo una duda,
Si quisiera hacer una barrera de deteccion, poniendo varios de estos detectores en fila…cuantos tendría que poner por centimetro???
O lo que es lo mismo que espacio puede detectar cada uno de estos dispositivos???

Un saludo.

Gonzalo

Que condición deberia poner para que detecte el amarillo amigo? gracias.

Eduardo Santiago

avrdude: stk500_recv(): programmer is not responding<– Tengo este error, me podrías mandar un esquema conectado a arduino UNO??

andy

buenas, como podría detectar el color negro?

Fran

Hola Luis,

en primer lugar gracias por toda la ayuda que nos das a la gente que estamos aprendiendo arduino. Quería ver si me podías explicar como funciona exactamente esta linea de código:

countRed = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

Se que hace el pulseIn pero no entiendo los parametros.

Muchas gracias y un saludo.

alexadndro

Hola Fran,

Por lo que se, el signo de pregunta es como una condición reducida, seria lo mismo decir:

if (digitalRead(out) ==HIGH){
countRed = pulseIn(out,LOW);
}else{
countRed = pulseIn(out,HIGH);
}

Espero haberte ayudado
Saludos

Enric Trill Masquef

Hola Sr. Llamas,

Me he iniciado en Arduino, intento poner en funcionamiento un sensor TSC3200, dispongo de un Arduino Mega, para probar he copiado su código y conexionado a los pins que propone, y no consigo que funcione, los cuatro leds se encienden pero todas las lecturas son «Red: 0Green: 0Blue: 0-«, le agradecería su ayuda.

También le agradecería un comentario sobre el funcionamiento de la sentencia void getColor(), que me parece que es un grupo de sentencias que son llamadas por getColor (); dentro del grupo void loop().

Muy agradecido por su dedicación.

Saludos,