. E-1 Un robot que clasifica bolas según su color, programado con Enchanting

El montaje mecánico está basado en el propuesto en la documentación de NXT. La única modificación es la posición del sensor de contacto que controla el motor dispensador. En este vídeo se puede ver cómo funciona.

Para este proyecto necesitamos dos motores, dos sensores de contacto y un sensor de color.

Uno de los motores se utiliza para colocar la bola bajo el sensor de color y después soltarlo por una rampa (dispensador).

El otro motor gira las cajetillas para que cada bola caiga en la que le corresponde (clasificador).

Los sensores de contacto se utilizan para parar los motores en su posición inicial.

El sensor de color se utiliza para identificar el color de las bolas.

En el programa se usan cuatro variables:

Posición: recoge el valor del último giro para poder colocar las cajetillas en la posición inicial realizando un giro del mismo valor en sentido contrario.

br, ba, bv: valores devueltos por el sensor de color para cada uno de los colores (rojo, azul, verde).

El funcionamiento sigue esta secuencia:

  1. Gira el motor clasificador (el que mueve las cajetillas donde quedarán las bolas) hasta que el sensor de contacto que lo controla se pulsa y se suelta. Esta será aposición inicial del clasificador.
  2. Entra en un ciclo (repetido 15 veces) en el que mueve el motor dispensador para colocar la bola debajo del sensor de color hasta que el sensor de contacto que controla este motor se pulsa y se suelta. Esta será la posición inicial del dispensador.
  3. Mueve el motor clasificador (en dirección contraria a las agujas del reloj, ángulo negativo) para volver a la posición inicial después de haber girado para clasificar la última bola. En el primer giro no hace nada la variable que fija la posición girada es 0, en los demás casos será -90º si para la última bola el clasificador se giro 90º, 180 si el giro fue de 180 (180º es igual a -180º), o 90º si el giro fue de -90º.
  4. Enciende consecutivamente las luces roja, azul y verde y recoge los valores de brillo que detecta el sensor de color (los asigna a las variables br, ba, bv). Según los valores recibidos asigna a la variable posición el giro que debe dar el motor clasificador y efectúa el giro.

     

Análisis detallado del programa:

Empieza asignando el valor cero a la variable posición.

 

El siguiente bloque mueve el motor que gira las cajetillas hasta que el sensor de contacto se pulsa y se libera, así queda colocada en la posición inicial.

 

A continuación se abre un bucle de 15 repeticiones, aunque son 12 bolas, ya que en algún paso no entra la bola en el hueco de selección de color.

Se inciializan las variables ba,br y bv a cero.

El siguiente bloque mueve el motor dispensador hasta que el sensor de contacto del dispensador se pulsa y se libera. Con este movimiento la bola queda colocada en el hueco de valoración de color,

Además este movimiento deja caer la bola anterior del hueco a la cajetilla. Este proceso se repite con todas las bolas.

 

La siguiente instrucción gira en sentido contrario el último giro del clasificador. La primera vez no gira ya que la variable posición es cero.

El siguiente bloque identifica el color de la bola:

Ilumina la bola con luz roja y lee la luz reflejada, asignando ese valor a la variable br.

 

Después la ilumina con luz azul y asigna el valor reflejado a la variable ba

 

Finalmente con luz verde y asigna el valor leido a la variable bv.

 

La respuesta depende de la luz ambiental y para que el programa funcione con los valores de control (siguiente bloque) es necesario que la luz ambiente sea tenue. Habrá que trabajar con el calibrado (todavía no se cómo funciona) para que no depende de la iluminación ambiental.

 

Éste último bloque selecciona el giro (90º, 180º ,-90º o 0º) que deberá girar el clasificador en función de los colores registrados por el sensor.

 

En el caso de la bola amarilla las variables roja y verde son las más altas por eso están en la primera condición y en caso contrario se valora cada color independientemente.

 

En cada condición se asigna valor a la variable posición y se gira el motor.