Construcción del Robot Sigue-líneas “Pinturillo”

Un año más, la Feria de Tecnologías Abiertas OSHWDEM tendrá lugar este sábado 10 de noviembre en la Casa del Hombre de A Coruña. Una de sus actividades es la competición de robótica en diferentes categorías, por lo que este año, al igual que los dos anteriores, mis hijos y yo nos hemos decidido por hacer un robot sigue-líneas que hemos llamado “Pinturillo”.

La idea base fue la de hacer un robot con un bote de pintura, utilizando dos rollos de cinta de pintor como ruedas e incluyendo pinceles. Después de algunos bocetos, nos decidimos por usar una brocha grande en el frente que, accionada por un servo, se fuese girando continuamente para dar la impresión de que el robot está pintando. Y así nació “Pinturillo” que, aunque seguro que no será el robot más rápido, lo queremos igual por su simpatía.

El Hardware

El robot está basado en Ardunio, concretamente en una placa Arduino Uno que ya había sido usada en otros proyectos. Incluye dos sensores LDR o fotorresistencias para detectar la línea, así como varios servos GWS, incluyendo aquellos usados como motores. Estos últimos fueron modificados previamente anulando el tope de los engranajes y sustituyendo su potenciómetros por dos resistencias del mismo valor. Esto permite controlarlos usando la librería “Servo.h” de Arduino, teniendo 90 grados como punto neutro y 0 y 180 como velocidad máxima para el motor derecho e izquierdo respectivamente.

La electrónica

Placa de circuito con los sensores LDR, LEDs y conectores para los servos

Hemos utilizado una única placa de prototipado como punto de distribución de la alimentación, conexión de los servos, los sensores LDR y sus LEDs correspondientes. La alimentación procede de una batería de polímero de litio (LiPo) de 3 elementos que se ajusta a 6v mediante un regulador externo.

Placa de sensores, regulador de voltaje y Arduino Uno

El Montaje

Inicialmente, nuestra idea era utilizar un viejo bote de pintura vacío para reforzar la personalidad del robot. Sin embargo, el bote era demasiado pequeño para poder incluir la brocha, además de que el espacio interior era bastante ajustado para los servos, por lo que finalmente utilizamos un viejo bote de Nesquik.

Interior del bote que constituye el cuerpo de Pinturillo con uno de los servos ya instalado

Los Servos

Comenzamos con la instalación de los servos. Para ello, fue necesario crear una plantilla con la que hacer los agujeros en los laterales y el frente, en donde se alojarían las ruedas y el pincel.

Plantilla para los servos GWS

Una vez marcados los puntos para los agujeros, el resultado fue el siguiente:

Posición de uno de los servos que hará de motor, ya con los agujeros hechos

Los servos van sujetos mediante tornillos, usando dos tuercas que ajustan a la pared del bote y al servo. Una vez colocados, el resultado exterior es este:

Imagen de uno de los servos ya colocado y atornillado

Para evitar que las tuercas se aflojen, usamos una gota de fijatornillos. Así, el resultado final es este:

Servos de motor y pincel ya en su posición final

Las Ruedas

Como comentamos, las ruedas son dos cintas de pintor. En el interior colocamos unas llantas de contrachapado que, casualmente, teníamos recortadas casi al diámetro adecuado. Comenzamos marcando y efectuando los agujeros necesarios para los tormillos de la escuadra del servo.

Construcción de las llantas de las ruedas de Pinturillo

El resultado final, una vez colocadas, es el siguiente:

Ruedas a punto de finalizar, a falta de colocar la escuadra

Posteriormente, tras realizar algunas pruebas, nos dimos cuenta de que la cinta de pintor apenas tiene agarre, por lo que incluimo unas gomas con objeto de evitar derrapes.

Sensores

Ya comentamos que los sensores son simples LDR que van colocados en la parte delantera inferior del robot. Para ello, he cortado un hueco en la chapa de la lata:

Posición de los sensores LDR en la parte inferior del robot

Ensamblando

En primer lugar, probamos la electrónica fuera del cuerpo del robot, aislando las conexiones para evitar cortocircuitos, dado que al ser el cuerpo completamente metálico, es fácil que esto ocurra.

Conexiones y pruebas de los componentes principales

Hemos añadido también un buzzer usando un altavoz pizoelectrónico que instalamos en la parte trasera de la chapa de madera (que, como se puede comprobar, procede de una caja de frutas) que sujeta la placa Arduino:

Buzzer instalado sobre contrachapado

El Software

El código de Pinturillo está disponible en este repositorio de GitHub.

Pinturillo maneja estados para determinar las acciones del robot. Los estados son:

  • DRIVE_FORWARD: Mueve los motores hacia delante a la máxima velocidad.
  • TURN_SOFT_LEFT: Comienza un giro hacia la izquierda, por lo que el error será perqueño.
  • TURN_LEFT: Es necesario girar a la izquierda, con lo cual el error es mayor que en el caso anterior.
  • TURN_SOFT_RIGHT y TURN_RIGHT: Igual que para el giro a la izquierda, pero hacia la derecha.

Los sensores se calibran al inicio y se normaliza la lectura obtenida para que el resultado se encuentre entre 1 y 100. De este modo, se distinguen tres lecturas:

  • NEGRO: Cuando el sensor detecta la línea.
  • GRIS: Cuando se encuentra sobre el borde de la línea.
  • BLANCO: Cuando el sensor detecta que está fuera de la línea.

La calibración de los sensores requiere los pasos siguientes:

  • Después de iniciar, Pinturillo espera un segundo.
  • El LED parpadea dos veces (y el buzzer suena al unísono).
  • Espera un segundo y calibra el BLANCO.
  • El LED parpadea tres veces.
  • Espera otro segundo y calibra a NEGRO.
  • Después de un segundo, inicia el bucle principal.

Mediante el algoritmo del PID ajustamos la velocidad de giro de las ruedas del modo siguiente:

  • Se calcula el error en función de la lectura de los sensores: si se lee NEGRO y GRIS, el error es mínimo, mientras que si la lectura es BLANCO y BLANCO, aumentamos el error acumulado con su valor máximo.
  • Para el PID simple, solo usamos los parámetros de la parte proporcional y derivativa, en función del error acumulado y de la diferencia entre el error actual y el anterior.
  • Con el valor anterior obtenemos el ajuste de velocidad que aplicamos a cada rueda.
  • Si el giro es hacia la derecha, sumamos el ajuste a la rueda izquierda y lo restamos a la derecha; si es a izquierdas, hacemos lo contrario.

Bucle Principal

Las acciones que se toman en el bucle principal son:

  • Leer la lectura de los sensores.
  • Establecer el estado del robot en función de las lecturas.
  • Mover los motores en función del estado.
  • Mover el pincel y los brazos.

Pruebas Iniciales y Ajustes

Una vez ensamblado y programado, se comienza probando el sistema completo. En primer lugar, desarrollamos un código de control basado en estados pero sin PID. El primer problema fue que, debido al ancho del cuerpo del robot, la distancia entre cada rueda es tal que no sólo llega con parar la rueda interna al giro, sino que ésta debe rotar en sentido contrario pues, si no lo hace, Pinturillo no es capaz de tomar curvas un poco cerradas.

Pinturillo una vez montado y listo para pruebas

Tras añadir las gomas a las ruedas y retocar el código, conseguimos mejorar el comportamiento del robot, aunque el hecho de cambiar el sentido del giro de las ruedas lo hace muy brusco en las curvas y lento en las rectas. Para solucionarlo, añadimos un ajuste por PID en una nueva versión del código.

Además, como ajuste final, decidimos añadir unos brazos accionados por unos microservos que, esta vez dado su pequeño tamaño y ligereza, se han sujetado usando pegamento térmico.

Pintura

Para ahondar en su aspecto pintor y proporcionarle una personalidad propia, hemos decidido pintar a Pinturillo de blanco, añadiéndole unos ojos y unos chorros de pintura, así como el nombre en la parte posterior.

Parte frontal de Pinturillo una vez pintado
Parte trasera de Pinturillo en donde se ve su nombre y algún chorro de pintura

El aspecto final es el siguiente:

Robot sigue-líneas Pinturillo finalizado

Nada más, ¡a ver qué tal se porta! ¡Ánimo Pinturillo!

3 respuestas a «Construcción del Robot Sigue-líneas “Pinturillo”»

  1. os vi en directo. espectacular! enhorabuena por el premio y por el sorteo!

Los comentarios están cerrados.