Robot sigue línea con ArduinoBlocks

Ya hemos visto como controlar un robot mediante bluetooth con el móvil. Ahora se está haciendo mayor y quiere seguir su camino… Vamos a enseñarle cómo hacerlo.

Realizaremos un robot sigue línea en dos niveles en este artículo. Uno inicial un poquito mas básico, con el que es mas fácil que nuestro pequeño robot se pierda. Pero no hay problema, seguirá creciendo para aprender a buscar el camino perdido en el segundo nivel de dificultad propuesto al final del artículo.

Partes que componen el artículo:

  • Nivel 1 de robot sigue línea
  • Nivel 2 de robot sigue línea: En busca del camino perdido

Ambas partes constan de tutorial en vídeo y también en texto.

Nivel 1 de robot sigue línea

En el siguiente vídeo podéis encontrar ampliada la información que se muestra a lo largo de este artículo.

INDICE

  1. Componentes básicos
  2. Principio de funcionamiento de la detección de línea
  3. Esquema de conexión
  4. Programa en ArduinoBlocks
  5. Calibrado y funcionamiento de robot

1. Componentes básicos

  • Dos sensores ópticos
  • Un controlador de motores (L298n)
  • Dos motores con reductora y rueda
  • Chasis comercial o fabricado con madera, plastico, etc.
  • Rueda pivotante
  • Arduino

 

 

 

 

 

Como se ve en las imágenes, vamos a usar dos ruedas motrices que se pueden accionar independientemente y una rueda central pivotante. Es un sistema de movimiento igual que el que ya vimos en el artículo Coche velocista con bluetooth y Arduino: Componentes… pero con un circuito eléctrico mas simple.

En el vídeo 0. Controlador para motores CC L298N con Arduino… se detalla el funcionamiento del controlador de motores y su programación en ArduinoBlocks.

Para iniciarse o si no se buscan unas prestaciones muy altas, los pack de motor con reductora y rueda que se ven en la imagen, son muy baratos, robustos y fáciles de conseguir.

Vamos a ver el elemento nuevo: los sensores ópticos.

Son los dispositivos que nos permiten distinguir una superficie negra de una blanca. En concreto usamos el TCRT5000L, que es un sensor óptico que detecta la diferencia de color en una superficies. Para hacerlo, se dispone de:

  • Un led (emisor infrarrojo) que emite luz infrarroja (IR) y
  • Un fotodiodo que es capaz de recibir esa luz infrarroja y transmitir una señal.

2. Principio de funcionamiento de la detección de línea

Se puede llegar a realizar un sigue líneas con un solo sensor, pero es una opción muy limitada. Vamos a juntar dos sensores, así:

De tal forma que si ambos detectan superficie negra, querrá decir que va por el camino correcto. Si uno detecta blanco y otro negro, querrá decir que hay que realizar un giro:

En el caso de la parte izquierda de la imagen superior, el robot se ha salido hacia la izquierda, habrá que hacer que gire a la derecha hasta que ambos sensores se vuelvan a encontrar en línea negra.En el caso del centro el robot debe avanzar en línea recta porque va bien y en el caso de la derecha de la imagen, deberá girar hacia la izquierda para corregir su rumbo. Con las curvas, el funcionamiento será igual.

3. Esquema de conexión

En el vídeo 0. Controlador para motores CC L298N con Arduino… se detalla el funcionamiento del controlador de motores y su programación en ArduinoBlocks.

IMPORTANTE: En este ejemplo se está trabajando con motores cuya tensión máxima de funcionamiento es de 6 voltios, por eso se alimenta con cuatro pilas de 1,5 V cada una. Adecuar la tensión de funcionamiento a los motores que elijáis.

Como se ve en el esquema, de las baterías se ha alimentado el controlador de motores (que a su vez alimenta los motores) y también la placa Arduino a través del pin Vin. La alimentación a través de este puerto debe tener un valor mínimo de 6 voltios para que la placa funcione correctamente.

Con la salida de 5V de Arduino, se ha alimentado a los dos sensores ópticos.

Finalmente recordad que es fundamental conectar el 0 V de las baterías con el 0 V (GND) de Arduino, para que tenga todo el sistema una referencia común.

Además, en el artículo Coche velocista con bluetooth y Arduino: Componentes… ya mencionado, se detalla cómo realizar un robot similar pero con mejores prestaciones que el que estamos tratando.

4. Programa en ArduinoBlocks

Para esto, vamos a hacer hincapié en tres cuestiones importantes:

  • Sensor sobre superficie de color negro manda un 1 a Arduino
  • Sensor sobre superficie de color blanco manda un 0 a Arduin

Esta cuestión la vamos a llevar a la programación insertando los siguientes bloques en condiciones Si:

El funcionamiento general del programa está formado por tres partes fundamentales

1. Inicialización de parámetros

  • Pines con los que interconectamos Arduino y el controlador de motores:

Esto depende de la conexión física de vuestro robot. Puede pasar que al dar la orden de avanzar, un motor gire en un sentido y el otro en el contrario. Esto lo podéis corregir, cambiando la polaridad en la conexión física del motor al controlador de motores, o intercambiando los pines de control del sentido de giro. Para este ejemplo, estos pines son el 9 y 8 para un motor y el 6 y 7 para el otro motor. Siguiendo con el ejemplo, los pines 10 y 5 se encargarán del control de la velocidad, pero  no os preocupéis, todo eso ya lo configura internamente ArduinoBlocks.

  • Velocidad del robot:

En estos primeros programas, la velocidad del robot va a ser constante. Veremos mas adelante como sacarle mas rendimiento o incluso controlarla con bluetooth. Es importante recordar que la velocidad máxima se obtiene al sacar un valor de 255. Se ha elegido esa velocidad de 110 para el ejemplo, de manera arbitraria. Si le ponéis una velocidad muy alta es posible que el robot se pierda en las curvas un poco cerradas, por eso, en función de las características de vuestro robot, podréis ir calibrándolo.

Por si aún no lo habéis notado, este es un mundo apasionante en el que hay cientos de alternativas, mejoras y retos que superar para conseguir que tu robot sea el mas rápido… ¡sin perderse!

2. Lectura de los sensores.

Ya en el bucle (la parte que se va a repetir constantemente), primero vamos a definir los dos estados en los que pueden estar los sensores, asociándolos a los pines a los que se conectan. Aquí se han conectado a los pines 11 y 12

3. Cuatro posibles casos básicos que se pueden dar en el avance del robot:

Caso A: El robot se sale hacia la izquierda -> habrá que ordenar que se mueva sólo la rueda izquierda.

Caso B: El robot se sale hacia la derecha -> habrá que ordenar que se mueva sólo la rueda derecha.

Caso C: El robot pierde completamente la línea negra y se queda en superficie blanca -> en esta primera versión del programa le vamos a decir que se pare, que ya le echamos nosotros una mano. En la siguiente versión veremos como enseñarle a que busque el camino perdido.

Caso D: Los dos sensores están en línea negra -> Vas bien… ¡adelante!

Y cada CASO se corresponde con las siguientes situaciones y reacciones necesarias:

El programa completo queda así:

5. Calibrado y funcionamiento de robot

Además de la programación, la posterior configuración del robot es fundamental para su correcto funcionamiento. Depende en gran medida de:

  • Grosor de la línea a seguir
  • Separación entre los sensores
  • Velocidad de avance del robot

También pueden influir parámetros constructivos del robot, como la distancia del rodamiento a la ruedas motrices y la distancia desde los sensores hasta las ruedas motrices.

En el vídeo mencionado al principio, se muestran varios ejemplos de estas cuestiones.

Nivel 2 de robot sigue línea: En busca del camino perdido

Ahora lo que vamos a hacer, es decirle que si se pierde, es decir, que si ambos sensores detectan superficie blanca, queremos que gire hacia la última dirección que recuerde haber girado. Para eso, cada vez que giremos tendremos que hacerle memorizar que ha girado en ese sentido.

El tutorial en vídeo, resumido posteriormente,  podéis encontrarlo aquí:

INDICE

  1. Mejoras en la programación para buscar la línea cuando se ha perdido
  2. Misma programación pero organizando las órdenes en bloques de función

1. Mejoras en la programación para buscar la línea cuando se ha perdido

Ahora vamos a decirle al robot que si se pierde, es decir, si se encuentran los dos sensores en línea blanca, comience 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, pero eso si, sólo se guardará el ultimo que haya realizado, ya que sobrescribirá al anterior.

En la siguiente imagen vemos como realizar esto en la programación:

Aquí el programa completo con el bloque de inicializar:

2. Misma programación pero organizando las órdenes en bloques de función

Para realizar una programación mas ordenada y clara, se pueden agrupar conjuntos de instrucciones en funciones que nosotros definamos. En definitiva lo que se hace es darle un nombre a una secuencia, para que, cada vez que queramos hacer esa secuencia solo tengamos que incluir un bloque con su nombre, y no todos los bloques que la forman. El programa quedaría así:

En la documentación de ArduinoBlocks y en el vídeo incluido en este apartado se explica cómo sacar estos bloques desde el editor de ArduinoBlocks.

Ahora… ¡A ponerlo a prueba y diseñar como enfrentar nuevos retos con nuestro sigue línea!

Compartir