Robot seguidor de líneas



Podemos hacer que el robot Imagina 3dBot Arduino se comporte como un seguidor de líneas utilizando los sensores de línea fotoeléctricos. Para ello nos ayudaremos de las señales del sensor de línea izquierdo (SI), conectado a SL, (Sensor Left) y el sensor de línea derecho (SD), conectado SR (Sensor Right). Estos dos sensores ópticos permiten distinguir entre superfície de colores claros y superfícies de colores oscuros.

Para entender el programa, vamos a representar los dos sensores ópticos con la siguiente figura:

Al ponerlos sobre una línea negra, se pueden dar cuatro casos:

En el caso A de la imagen superior, el robot se ha salido hacia la izquierda, por tanto, habrá que hacer que gire a la derecha hasta que ambos sensores se vuelvan a encontrar en línea negra. En el caso B, el robot debe avanzar en línea recta porque va bien, y en el caso C, deberá girar hacia la izquierda para corregir su rumbo, ya que se ha salido a la derecha. Con las curvas, el funcionamiento es el mismo.

Además, hay que añadir el caso en que el robot se sale totalmente de la línea negra (D), momento en que ambos sensores están en superfície blanca.

#01 Robot seguidor de línea. Versión 01

Para empezar, vamos a hacer un programa que actúe frente a los casos A, B y C. Para el caso D, en el que el robot pierde totalmente la referencia de la línea, vamos a hacer simplemente que se pare.

Lo primero que hacemos al iniciar el programa, es guardar el estado de cada sensor de línea en una variable booleana, que son aquellas que solo pueden tomar como valores 0 y 1. Esto quiere decir que, o se detecta línea negra, o se detecta línea blanca ¡Aquí no hay medias tintas!

Las variables booleanas las encontramos, al igual que las demás, en el apartado “Variables” de ArduinoBlocks.

También vamos a usar el bloque corespondiente a los sensores ópticos “Línea negra detectada”. Este bloque nos permite diferenciar entre una superfície negra y una blanca, y lo podemos encontrar en el apartado “3dBot”.

Es importante tener en cuenta que este bloque indica señal de activación cuando se encuentra sobre línea negra.

Así, al guardar las lecturas del sensor de línea en una variable booleana, cuando el sensor esté sobre línea negra, esa variable valdrá 1. Sobre línea blanca, valdrá 0.

La combinación de estas variables con los condicionales “Si”, funciona de forma directa, sin tener que usar bloque de comparación. En la siguiente imagen vemos una condición que expresa directamente que, si la variable “sensor izquierdo” vale 1, entonces que se ejecute la acción…

Para completar el proceso, hay que señalar también el uso del bloque “no”, situado en apartado “Lógica” de ArduinoBlocks, que lo que hace es negar lo que se coloque detrás de él.

Por lo tanto, el siguiente condicional indica que, si el valor de “sensor izquierdo” NO es 1, es decir, es 0, entonces que se ejecute la acción… Esta condición, que es el caso contrario al anterior, se cumplirá cuando el sensor esté sobre línea blanca.

El programa queda de la siguiente manera:

Es importante destacar que, dependiendo de la velocidad del robot y de lo cerradas que sean las curvas, es posible que en alguna de ellas el robot se pierda y se pare. Esto es porque, como decíamos, aún no le hemos dicho que hacer si ambos sensores detectan línea blanca a la vez. ¡Vamos a solucionarlo!

#02 Robot seguidor de línea. Versión 02

Si ahora se pierde, es decir, si se encuentran los dos sensores en línea blanca, comenzará a girar en el último sentido que lo ha hecho justo antes de perderse. Para ello, cada vez que ejecute un movimiento, tiene que memorizar que lo ha ejecutado.

Vamos a utilizar variables de texto para memorizar cuál ha sido el último movimiento realizado.