Introducción
Como ya contamos en la lección anterior, el color no es una característica sencilla, pero que sí podemos simplificar para determinar de qué color es cada cosa.
Nosotros como seres humanos ya estamos acostumbrados a percibir todas las tonalidades de colores, interpretarlos y desarrollar conceptos como el arte a través de ellos. Pero un robot es como un cerebro que cada vez que programamos nace una y otra vez y que no puede desarrollar ninguna de esas interpretaciones a menos que lo programemos para ello.
Así que vamos a empezar desde el principio.
Vamos a utilizar nuestra placa Arduino y hacer unas primeras pruebas de detección de colores. Para ello, necesitaremos un sensor de color TCS3200, algunos cables y nuestra placa.
El sensor de color TCS3200 es un dispositivo electrónico que nos permite interpretar el color de una manera equivalente a la del ser humano. El principio básico es que este sensor dispone de unos fotoreceptores a modo de matriz que nos permite identificar los colores Rojo – Verde – Azul.
Dentro de esta cavidad podemos observar un elemento con 8 patillas. Ese elemento es el fotoreceptor capaz de proporcionar a nuestro robot el color sobre el que esta apuntando. Alrededor del mismo se disponen 4 LEDs que proporcionan luz a la superficie sobre la que estamos leyendo el color.
Como podemos observar disponemos las 8 patillas del SOIC (Small Outlined Integrated Circuit ) no se corresponden exactamente con las de la figura de arriba que son 10 ; ya que se repiten 2 GND y 2 VCC.
Existen otros sensores de color, pero en esencia son muy parecidos. Los pines que nos interesan son las patillas indicadas con S0, S1, S2, S3, OUT y LED y la alimentación VCC y GND. Por lo que un sensor de color ya ocupa 6 pines digitales de nuestra placa y la alimentación, tal y como se puede apreciar en la figura.
Con solo conectar un cable a VCC y GND es suficiente. NO HACE FALTA CONECTAR LOS DOS QUE TENEMOS EN EL MODELO REAL.
El principio de funcionamiento de este sensor es el siguiente. El sensor de color ha de proporcionarnos 3 valores para poder definir el color que está leyendo. La combinación de estos 3 colores, que son el Rojo, Verde y Azul para obtener el resto.
Por ejemplo, para obtener el color amarillo, será una combinación predominante de los colores Rojo y Verde y muy poco o nada de azul. Y así con todos.
El problema, es que los fotoreceptores no se activan todos a la vez, sino de uno e uno. Así que primero deberemos leer la cantidad de rojo, despues medir la cantidad de verde, luego la de azul, y pasarlo a una escala determinada de colores para poder interpretarlo.
Para controlar estas lecturas, el fabricante, nos proporciona 2 pines de control que se asocian al S2 y al S3 para saber cuál estamos midiento y el pin de lectura, es el que se nos indica como OUT. A través de la siguiente tabla podemos observar como activar estas lecturas.
La manera de recopilar el color de cada fotoreceptor no es un valor tan evidente, además necesita de calibración que veremos en la siguiente lección. Pero hemos de saber que no hay que medir el valor de la amplitud de la señal, sino su frecuencia.
Como se puede observar en la imagen superior; la señal de salida que obtenemos es una señal cuadrada, que será más estrecha o más ancha en función del valor de rojo, verde o azul que estamos leyendo.
Como la aplicación de estos métodos puede ser bastante compleja, no os preocupéis. Basandome en otros ejemplos y con ayuda de Internet he creado una librería para este sensor TCS3200 que simplifica este proceso.
Las señales conectadas a los pines S0 y S1, son para aumentar el escalado de la señal. Cuanta más señal, más preciso se puede hacer el sensor de color. Aunque pueda gastar más energía yo prefiero dejar activos estos dos pines de escalado para obtener una señal clara. En la práctica esto nos permitirá reconocer una mayor gama de colores.
El último pin LED sirve para encender los LEDs que se disponen alrededor del sensor.
Descargar Librería TCS3200
Esta librería TCS3200 es la que utilizaré durante el desarrollo de estas lecciones para la creación de Clumsee y que nos permitirá algunas funcionalidades extendidas para calibración y otros modos de operación.
Así que si nos descargamos la librería y la integramos dentro del IDE de Arduino para empezar a programar.
Comenzamos a programar con ArduBlockly
Si accedemos a la siguiente página, podremos realizar esta programación mediante bloques para facilitar la labor de programación.
#include <TCS3200.h> // CS ( S2, S3, OUT, S0, S1, LED ) TCS3200 CS(8,9,10,11,12,13); void setup() { CS.begin(); CS.nSamples(40); CS.setRefreshTime(200); CS.setFrequency(TCS3200_FREQ_HI); } void loop() { CS.read(false ); }
En este ejemplo vamos a leer la lectura del sensor sin ningún tipo de manipulación. Es decir que aún no aplicaremos ningún filtrado, ni calibración para obtener el color.
Si nos fijamos en el código podremos observar que se añaden unas configuraciones para el sensor, que establecen las opciones de inicialización. Estos valores sirven para definir el número de muestras leidas para cada nivel de color, el segundo es un parámetro no bloqueante, en el que definimos un tiempo de lectura que nos permitirá hacer funcionar el programa sin entrar en bucle en la lectura del sensor.
Y el tercero, especificamos el escalado de la frecuencia en la lectura.
- TCS3200_FREQ_LOW
- TCS3200_FREQ_MID
- TCS3200_FREQ_HI
Es recomendable, establecer el nivel de lectura en alto, ya que nos permitira obtener una amplificación de la señal y nos dará opción de distinguir más colores.
Por último hacemos la lectura en bucle, con la función
CS.read();
Este parámetro nos permite leer en RGB por defecto o con un parámetro true en la función. Pero si lo cambiamos a false, nos proporcionará los valores sin ninguna manipulación.
Realizamos primero la lectura en RAW porque los valores de color RGB aún no están calibrados.
Por un lado podremos observar que los valores no siguen ningún patrón concreto con respecto a una referencia común.
Además existe una cuarta columna que nos proporciona el valor de luminosidad de esta lectura y que podemos observar como responden estos valores a distintas longitudes de onda. *El valor de clear no lo utilizaremos.
En la siguiente lección procederemos a la calibración de nuestros sensores para obtener los colores en escala RGB.