Programación de robots Autónomos

Para placas controladoras tipo Arduino existe un entorno de programación oficial denominado Arduino IDE desarrollado en Java. El lenguaje usado en este IDE es C++, pero con algunas modificaciones para simplificarlo, lo que lo hace ser parecido a Java. Solo la sintaxis y tipos de datos son similares a Java, no se dispone ni de sus bibliotecas ni de su máquina virtual (recordar que el resultado compilado será código a ser ejecutado directamente por el µControlador).

Para placas controladoras basadas en Pinguino, existe un entorno de programación oficial denominado Pinguino IDE desarrollado en Python. El lenguaje usado en este IDE es C, pero se pueden simular algunas llamadas a objetos con un archivo de traducción.

En los siguientes apartados se presentan las adaptaciones a FreeSensors necesarias en cada entorno:

Librería para Arduino IDE

Se presenta el desarrollo de una librería que hace las veces de "driver" para las shields de FreeSensors. En el caso de la shield Direct la librería es muy simple, ya que consiste en un simple envoltorio a las llamadas normales de Arduino. Pero para la shield DIOport (expansora de puertos digitales) la librería simula las mismas primitivas sobre comunicaciones I2C, y lo mismo sucede para la Motor. El objetivo ha sido poder escribir los programas haciendo abstracción de cual placa se está usando. Por ejemplo, para poner en 1 el primer pin digital de la Direct se debe escribir:

FSdirect shld;
shld.begin();
shld.pinMode(1, OUTPUT);
shld.digitalWrite(1, HIGH);

Y para la DIOport se debe escribir:

FSdioport shld;
shld.begin(PCF_011);
shld.pinMode(1, OUTPUT);
shld.digitalWrite(1, HIGH);

Vemos que la única diferencia es que en la inicialización begin() de la DIOport se coloca la dirección I2C del chip PCF8574 (en este caso 011), que debe coincidir con el estado de los jumpers en la propia shield. La library internamente realiza la comunicación I2C necesaria para poner la salida del primer pin digital en 1. Se destaca que ese primer pin digital es el primer jack de cualquiera de las dos shields (vista de frente y contando desde izquierda a derecha). Y de esta forma podemos colocar varias shields del mismo tipo expandiendo la cantidad de puertos digitales accesibles.

A continuación el release de la Librería FreeSensors para Arduino IDE.

Librería para Pinguino IDE

Se ha comenzado el port de la librería para ser usada en el entorno de Pinguino con placas controladora PICduino. El principal problema es la carencia de C++ en el compilador SDCC usado por Pinguino para microcontroladores de 8 bits. Por este motivo el port se ha realizado completamente en lenguaje C. Al no tener C++ en principio no se puede instanciar mas de una shield de un determinado tipo, pero en el diseño de la library se ha privilegiado el poder pasar programas fuente entre Arduino y Pinguino sin cambiar nada (solo copiar y pegar).

A continuación el release de la Librería FreeSensors para Pinguino IDE.

Programación Gráfica en Arduino IDE

Para el modo autónomo de funcionamiento, tenemos a Ardublock que es una extensión del propio entorno Arduino, y al proyecto BlocklyDuino que es del tipo web. Ambos funcionan como preprocesadores que generan código Arduino válido para ser colocado en Arduino IDE. En el caso de Ardublock existe un botón que directamente nos lleva ese código a la ventana del editor para que sea cargado luego a la Arduino, mientras que en el otro caso es necesario copiar y pegar. Estos programas son de propósito general, pero existen otros proyectos mas orientados hacia cierto tipo de robots o placas controladoras, ya que integran los componentes de los mismos. Ejemplos de estos son Modkit para el robot VEX y Minibloq para las controladoras DuinoBot y Pi-Bot.

En FreeSensors se ha realizado la inclusión de bloques para Ardublock, que generan código válido para la librería Arduino (y en principio también para Pinguino).

Programación Gráfica en Pinguino IDE

Desde la versión 11 de Pinguino IDE, se incluye en el mismo una paleta de componentes que permite realizar de forma nativa programación en bloques gráficos.