En el momento que tengamos un sensor de color; ya lo podremos integrar en nuestro robot para que funcione y a medida que se vaya moviendo podremos realizar distintas funciones a medida que va detectando cambios de color sobre una superficie.
Pero antes de realizar un montaje sobre un robot… Podemos pensar un momento qué es lo que ocurrirá cuando lo pongamos sobre nuestro escenario. *Esta historia está basada en hechos reales; así que si no queréis perder tiempo de vida, recomiendo que prestéis atención.
A la hora de poner a prueba a Clumsee, al principio disponía de un solo sensor de color y en mi habitación tengo un escenario como el de la figura para indicar qué hacer una vez que Clumsee entra en cada uno de los recuadros.
Y como su propio nombre indica ( clumsy = torpe ), hacía cosas muy raras y ahora explicaré el por qué.
Primeras pruebas con el robot detecta-colores 😄 #Arduino #TCS3200 pic.twitter.com/nTl8yhFVry
— Adrian Blasco (@blascarr) May 13, 2017
Si nos ponemos a pensar en las dimensiones del robot, posición del sensor, orientación puede ocurrir algo como esto.
Imaginemos que programamos nuestro robot para que se mueva en linea recta cuando se sitúa sobre el color azul y en el momento que toca el color blanco, girar a la derecha para ir en dirección Este.
Al realizar la acción de giro de inmediato, nuestro robot sigue recopilando información del sensor de color; por lo que en el momento que encuentre otro color realizará la programación de ese nuevo color. Por lo que el anterior lo deja a medias y bueno… a partir de aquí dejamos todo al azar.
Al fin y al cabo, nuestro robot realiza las órdenes que nosotros le hemos programado, pero quizás no hemos tenido en cuenta este fallo.
Una solución habría sido dejar un tiempo de espera con un delay entre la acción de ir hacia delante y luego cambiar al giro. Pero los delays no son lo más conveniente en… practicamente nada.
Es por ello, que la mejor solución que se me ha ocurrido es la de conectar dos sensores de color, uno delante y otro detrás y en el momento que los dos sensores detecten el mismo color, sabremos que nuestro robot se encuentra en una casilla por completo y una vez dentro, realizar la función de giro.
Para realizar este nuevo modelo, deberemos atender a algunas necesidades adicionales para integrar en una nueva placa, ya sea Arduino UNO o con alguna placa extendida como la Arduino MEGA que nos proporciona más pines.
Arduino UNO 2xTCS3200
Para este esquema, requeriremos de un shield adicional o cableado para conectar muchos pines al voltaje. Como vimos en la lección anterior, solo nos interesa conectar los pines S2, S3 y OUT para obtener la información del color. Mientras tanto S0, S1 y LED se pueden conectar al voltaje y nuestro esquema se simplificaría. El shield solamente nos sirve para extender el número de pines conectados a voltaje.
*Aún nos quedarán por conectar el resto de motores y otros elementos.
Para programar los dos sensores, solamente deberemos añadir una variable adicional dentro del programa
Aún así no habremos acabado, ya que la programación de los dos sensores, deberemos calibrarlos por separado en distintas zonas de la memoria.
Con este primer programa podremos introducir la calibración a través del monitor serie uno tras otro y especificar la dirección de memoria que posteriormente habremos de acceder para leer los datos de calibración.
200 es suficiente para almacenar toda la información que contiene el sensor para la referencia y la table de colores. El máximo es 1024, (así que nos sobra por ahora)
#include <TCS3200.h> TCS3200 CS_F(8,9,10); TCS3200 CS_B(2,3,4); void setup() { CS_F.begin(); CS_F.nSamples(40); CS_F.setRefreshTime(200); CS_F.setFrequency(TCS3200_FREQ_HI); CS_B.begin(); CS_B.nSamples(40); CS_B.setRefreshTime(200); CS_B.setFrequency(TCS3200_FREQ_HI); Serial.begin(9600); CS_F.loadCal(0); CS_B.loadCal(200); } void loop() { if (CS_F.onChangeColor()) { Serial.println(CS_F._ct[ CS_F.checkColor( &CS_F._rgb) ].name); } if (CS_B.onChangeColor()) { Serial.println(CS_B._ct[ CS_B.checkColor( &CS_B._rgb) ].name); } }
Ahora podemos ver la respuesta de cada uno de los sensores.
Arduino MEGA 2xTCS3200
En el caso de conectar a una placa Arduino MEGA , tendremos pines en exceso para controlar todas opciones que nos ofrece la librería TCS3200.
Con una pequeña placa de prototipado se pueden extender los pines de voltaje y de tierra para los distintos elementos.
La programación para la placa Arduino MEGA es exactamente igual que la anterior, pero tendremos que extender a los 6 pines que hemos conectado.