Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Abr 15, 2014 in Proyectos de desarrollo | 1 comment

Pinguino  + Processing

Pinguino + Processing

Creación de una interfaz gráfica para comunicarse con Pinguino mediante Processing

Autor: Ortiz Escalante Jesús T.

 Resumen

 Se explica la manera de utilizar Processing con la tarjeta Pinguino, donde la tarjeta ha sido programada con un código que permite la creación de interfaces de control con cualquier lenguaje de programación.

Introducción

Existen varios trabajos para conectar Pinguino con Processing [1-5], ya sea mediante códigos específicos [4] o el trabajo de Cousot [5]. Aquí se utilizará en el lado de la tarjeta Pinguino el código desarrollado por Cardona [6], el cuál permite realizar desarrollos utilizando cualquier lenguaje de programación.

 Processing es un lenguaje basado en Java por lo que se recomienda tener instalado el JDK, ya sea el de Oracle o el OpenJDK, puede verificar si ya se encuentra instalada, mediante la siguiente linea de comandos.

 ~$ java -version

Si no se encuentra instalada lo puede hacer fácilmente mediante el repositorio de paquetes de su distribución Linux o descargando el instalador de la página de Oracle [11].

 En la red se puede encontrar la manera de instalar Processing en caso de que la distribución utilizada no tenga un paquete o  prefiera utilizar la versión más reciente de Processing recomiendo las referencias [8] y [9]. En la última de ellas se menciona que es para Ubuntu 10.04, sin embargo los pasos mencionados son válidos para cualquier otra distribución, pues se basa en la jerarquía de directorios e instrucciones de Linux, el núcleo de Ubuntu, Fedora, ArchLinux, OpenSUSE, etc.

Creando la interfaz gráfica

El código [6] de la tarjeta se programa de la manera habitual usando el IDE de Pinguino, la versión del código de Cardona depende de la tarjeta empleada, la prueba se realizó con una basada en el microcontrolador 18f2550 [12]. La aplicación construida con Processing y que se comunicará con la Pinguino se basa en uno de los ejemplos que vienen con el IDE.

Primeramente ejecutamos el programa y nos vamos a File->Examples…

pinguino-processing

Examples

 

Elegimos SimpleWrite

pinguino-processing

SimpleWrite

 

 

Ahora realizamos las modificaciones pertinentes para la comunicación:

  • Cambiamos el nombre del puerto de Serial.list()[0] a “/dev/ttyS80”, con comillas incluidas. Uno puede preguntarse ¿Porque ttyS80, si Linux crea ttyACM0 cuando conecto la tarjeta al puerto USB? El nombre ttyACM0 se refiere a un puerto serie virtual, el cual no maneja bien la biblioteca RxTx [7]. Esa biblioteca fue creada para Java, del cual fue desarrollado Processing, para ser utilizada en vez de la vieja biblioteca Comm de Sun Microsystems. Tal error ya había sido reportado por J.P Mandon [3] para lo cual se hace necesario crear un enlace simbólico [13].
  • Agregamos la línea que permite que habilita al puerto 0 como salida.
  • Cambiamos las cadenas que se enviaran por el puerto serial virtual a las que reconoce el código que se encuentra en la tarjeta.

 Los cambios realizados se observan en las siguientes figuras, la primera es el ejemplo que viene con Processing, mientras que la segunda corresponde a los cambios realizados para poder utilizar el código de Cardona.

 CÓDIGO EN PROCESSING:

/**
 * Simple Write.
 *
 * Check if the mouse is over a rectangle and writes the status to the serial port.
 * This example works with the Wiring / Arduino program that follows below.
 */
import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;        // Data received from the serial port

void setup()
{
  size(200, 200);
  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = "/dev/ttyS80";
  myPort = new Serial(this, portName, 9600);
}
void draw() {
  background(255);
  myPort.write("pinMode(0,OUTPUT)");
  if (mouseOverRect() == true) {  // If mouse is over square,
    fill(204);                    // change color and
    myPort.write("digitalWrite(0,HIGH)");              // send an H to indicate mouse is over square
  }
  else {                        // If mouse is not over square,
    fill(0);                      // change color and
    myPort.write("digitalWrite(0,LOW)");              // send an L otherwise
  }
  rect(50, 50, 100, 100);         // Draw a square
}
boolean mouseOverRect() { // Test if mouse is over square
  return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));
}

 

CÓDIGO EN ARDUINO:

// Wiring/Arduino code:
 // Read data from the serial and turn ON or OFF a light depending on the value

 char val; // Data received from the serial port
 int ledPin = 4; // Set the pin to digital I/O 4

 void setup() {
 pinMode(ledPin, OUTPUT); // Set pin as OUTPUT
 Serial.begin(9600); // Start serial communication at 9600 bps
 }

 void loop() {
 if (Serial.available()) { // If data is available to read,
 val = Serial.read(); // read it and store it in val
 }
 if (val == 'H') { // If H was received
 digitalWrite(ledPin, HIGH); // turn the LED on
 } else {
 digitalWrite(ledPin, LOW); // Otherwise turn it OFF
 }
 delay(100); // Wait 100 milliseconds for next reading
 }

 

Como se mencionó en el primero de los incisos de los cambios realizados al código de ejemplo que viene con Processing se debe crear un enlace simbólico para poder ejecutar el programa, primero conectamos nuestra tarjeta Pinguino. Verificamos que la conexión se realizó con éxito con:

~$ dmesg | grep ttyA

Entonces como superusuario creamos el enlace simbólico, en el caso de las distribuciones basadas en Debian puede usarse el comando sudo:

 ~$ sudo ln -s /dev/ttyACM0 /dev/S80

Los dos pasos anteriores se observan en la siguiente figura.

pinguino+processing

Entonces podemos apretar el botón de Play en la ventana principal de Processing o utilizar Ctrl+R. Se nos desplegara una ventana con un cuadro negro que cambia a gris al pasar el puntero por él. Si conectamos un LED en serie con una resistencia, por ejemplo de 10kΩ, al puerto 0 de la tarjeta veremos cómo se prende y apaga el LED al movernos con el puntero por dicho cuadro.

 

Conclusiones

 Se sentaron las bases para desarrollar una aplicación que se comunique con el mundo exterior utilizando la tarjeta Pinguino mediante Processing a través de instrucciones sencillas que aprovechen la comunicación por CDC. La ventaja que tiene utilizar Processing en vez de otros lenguajes, como Python o Ruby, dependiendo del lenguaje que se prefiera utilizar, sobretodo porque muchos aprenden Java o C++ en las universidades, por lo que pueden emprender un desarrollo complejo apoyándose de un lenguaje ampliamente documentado.

Referencias

[1] http://micropinguino.blogspot.mx/2011/06/guia-y-ejemplos-de-pinguino-con.html

[2] https://sites.google.com/site/integradorelectronica/

[3] http://jpmandon.blogspot.mx/2010/11/pinguino-cdc-and-processing.html

[4] http://jpmandon.blogspot.mx/2009/03/pinguino-with-processing.html

[5] http://ubaa.net/shared/processing/pinguino/

[6] http://yeisoneng.blogspot.mx/p/interfazando-pinguino.html

[7] http://rxtx.qbang.org/wiki/index.php/Main_Page

[8] http://aasanchez.wordpress.com/category/programacion/processing/

[9] http://blog.jorgeivanmeza.com/2010/05/instalar-processing-en-linux-ubuntu-10-04/

[10] http://processing.org/download/

[11] http://www.oracle.com/technetwork/java/javase/downloads/index.html

[12] https://sites.google.com/site/pinguinotutorial/hardware/traditional

[13] http://pblog.ebaker.me.uk/2011/09/processing-usb-ports-devttyacm0.html

 

Autor: Ortiz Escalante Jesús T.

1 Comment

  1. Hola excelente publicación, me gustaría saber si deseo realizar alguna aplicación para que luego sea instalada en mi pinguino2550, lo debo hacer con cual programa, es decir, creo que mucho se ha hablado de realizarlo con entorno Python, pero el archivo cuando se guarda lo hace con extensión *.py, la pregunta es, puedo luego introducirlo a mi tarjeta pinguino2550? ya que viendo los ejemplos estos están en extensión *.pde. Mucho sabre agradecer tu inmensa ayuda y disculpa lo poco que se del tema, saludos desde Panamá.

    Gustavo Guevaa

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *