Librería LegoPF – Control con Arduino de motores Lego

La combinación de un Lego Technic con los motores, controles remotos y receptores de Lego Power Functions hace que estos juguetes de bloques de plástico cobren otra dimensión. Con Power Functions podemos dotar a nuestros pequeños proyectos con Lego de movimiento, y con los controles remotos podemos hacer fácilmente un coche teledirigido o cualquier otro vehículo.
Un paso más es controlar estos pequeños juguetes con un Arduino, donde ya se nos abre una gran cantidad de posibilidades.
Mi pequeña aportación a este sinergia es una pequeña librería que nos va a facilitar la utilización de los diferentes motores de Lego. La librería LegoPF la podéis encontrar en GitHub https://github.com/gonzalogalvan/LegoPF
Hardware utilizado
Los componentes de Lego Power Functions tienen un voltaje de funcionamiento entre 7v y 9v y los motores tienen un consumo elevado, con lo que no es aconsejable conectarlos a las salidas del Arduino directamente.
Aunque ya habrá un artículo para ver como conectar y programar nuestros motores Lego, os avanzo que utilizaremos un L298N para comunicarnos con los motores sin poner en peligro nuestro Arduino.
Aprovecharemos que ya existe en el mercado componentes que además incluyen un 78M05 que nos va a permitir alimentar al Arduino de forma segura con la misma batería que utilizaremos para alimentar los motores.
Uso de la librería
La librería es muy simple de configurar y utilizar. Deberemos descargarla y meterla dentro de la carpeta «library» de nuestro IDE.
- Incluir la libreria
#include <LegoPF.h>
- Iremos añadiendo motores con la función lego.addMotor, teniendo en cuenta los siguientes parámetros:
- Número de motor
- Pin de activación del motor
- Pin A de control de motor
- Pin B de control de motor
lego.addMotor(0,50,10,11); lego.addMotor(1,40,8,9);
El Pin A y Pin B serán salidas PWM para los motores normales si queremos controlar su velocidad. Para los motores servo, obligatoriamente deben ser salidas PWM.
- Activar un motor:
lego.enable(0);
- Para un motor, o si es un servo, volver a la posición de reposo o inicial.
lego.stop(0);
- Funciones de control de motores normales:
lego.fullForward(0); lego.fullBackward(0);
Si el motor esta conectado a salidas PWM, podremos indicar el % de velocidad.
lego.forward(0,50); lego.backward(0,50);
- Desactivar motor
lego.disable(0);
- Funciones para controlar motores servo, girando completamente o bien indicando un porcentaje de giro respecto la posición de reposo.
lego.fullLeft(1); lego.fullRight(1); lego.left(1,50); lego.right(1,100);
En un próximo artículo veremos en detalle como montar un Arduino en un pequeño coche Lego 4×4. Utilizaremos baterías 18650 de litio para alimentar tanto los motores como la electrónica, un L297N y un NanoArduino par gobernar todo.
Otra librería para comunicarse con el receptor infrarojo de Lego Powerfunctions:
https://github.com/jurriaan/Arduino-PowerFunctions
Otros enlaces interesantes:
- Web de Lego Power Functions http://powerfunctions.lego.com/
- Mucha información sobre el hardware de Lego http://www.philohome.com/pf/pf.htm
No Comment