Arduino + Java: Fácil y Rápido

Recientemente hemos lanzado una nueva y mejorada versión de la librería PanamaHitek_Arduino. Con el lanzamiento de la versión 2.8.2, considero que es hora postear algo sobre la utilización de esta herramienta. Esta librería consiste en un a herramienta que hemos desarrollado para facilitar la integración de proyectos de Arduino + Java.

Este código ha evolucionado a través del tiempo hasta convertirse en lo que es hoy, uno de los recursos más utilizados para comunicar Arduino y Java. Se trata de una colección de métodos que facilitan tareas a los usuarios. Con solo ver los ejemplos de uso nos damos cuenta que no se requiere muchos conocimientos de programación para implementar este código y lograr resultados interesantes.

Antes de proceder con los ejemplos de uso, es importante que el usuario tenga claro algunos conceptos. Para ello recomiendo algunos de los posts que ya hemos publicado sobre este tema:

Ahora vamos a proceder con algunos ejemplos sobre instalación e implementación de la librería.

Instalación de la librería

Para instalar la librería podemos utilizar dos métodos: descargar el JAR o usar maven. El archivo JAR lo podemos encontrar en los repositorios de Panama Hitek en Github o en Sourceforge.

Cuando se haya descargado el fichero JAR podemos agregarlo a un proyecto y empezar a programar. Suponiendo que estamos Netbeans como IDE de Java, el agregar un JAR resulta muy fácil.

java_add_jar

java_added_jar

Este es el método tradicional, aunque debo decir que ya está obsoleto. La tendencia es utilizar gestores de repositorios, como Maven.

¿Qué es Maven y para qué se utiliza?

Hace un tiempo escribí un post sobre cómo agregar la librería PanamaHitek_Arduino a un proyecto utilizando Maven. He aquí el enlace:

Utilizar Github como repositorio de Maven

Con la ayuda de este tipo de herramientas se nos hace muy fácil importar cualquier tipo de librería a nuestro proyecto.

Las clases de la librería

Nuestra librería cuenta con 4 clases:

  • PanamaHitek_Arduino: esta clase permite manejar todo lo relacionado a la conexión con el Arduino a través del puerto serie. Contiene los métodos para iniciar y detener la conexión, los parámetros de comunicación serie y las funciones para envío y recepción de datos.
  • PanamaHitek_Multimessage: clase que permite recibir múltiples datos en el Arduino de forma simultánea. Es muy útil a la hora de trabajar con varios sensores a la vez y cuando queremos que el Arduino nos entregue los valores de diferentes al mismo tiempo.
  • PanamaHitek_SpreadSheetHandler: una clase que estamos desarrollando para almacenamiento de datos y su posterior exportación a ficheros de MS Excel (formato .xls). Estaremos publicando más sobre esto en los próximos días.
  • ArduinoException: gestor de excepciones de la librería.

La clase ArduinoException es una herramienta auxiliar de las primeras tres clases nombradas. En el futuro esperamos agregar nuevas clases con funcionalidades tales como gráficas en tiempo real, manejo de bases de datos y comunicación a través de Internet. En un futuro esperamos que esta librería sea la herramienta más completa para el desarrollo de proyectos Arduino + Java.

Ejemplos de Arduino + Java

Transmisión en Java – Recepción en Arduino

Este es el ejemplo más sencillo de todos. Me gusta ilustrarlo a través del encendido de un LED en Arduino desde un programa en Java. Lo que hacemos es programar un código en el Arduino en el cual al enviar un “1” desde el Monitor Serie encendemos un LED. Cuando se envía un “0”, se apaga el LED.

Los códigos, tanto el de Arduino como el de Java los pueden encontrar en nuestro repositorio de Github. El código de Arduino luce así:

arduino-y-java

Si lo subimos al Arduino, nos damos cuenta que enviando el 1 y el 0 desde el Monitor Serie provoca un cambio de estado en el LED que tengamos conectado al Pin 13.

Ahora, en vez de enviar el 1 y el 0 desde el Monitor Serie, lo haremos con un programa en Java. El código, disponible en Github, luce así:

arduino-y-java

Se trata de un código sencillo. En la línea 17 creamos una instancia de la librería. En la línea 22 iniciamos la conexión con Arduino (puerto COM4). Esta conexión debe ser iniciada como ArduinoTX debido a que vamos a transmitir información.

Luego las líneas 81 y 91 representan los métodos que se ejecutan al presionar dos botones, los cuales envían “1” y “0” para encender y apagar el LED.

Cuando se ejecuta el código debe aparecer una ventana similar a la de la siguiente imagen.

arduino-y-java

Este mismo código, así como está, puede ser utilizado para lograr cosas interesantes como la que se muestra en el siguiente video.

Es el mismo código, solo que con un circuito de potencia (optoacoplados + TRIAC). En el caso del programa en Java, le hemos dado un estilo gráfico un poco más llamativo. Pero la programación de las acciones de los botones permanece igual.

Transmisión en Arduino- Recepción en Java

Una vez más contamos con dos códigos, uno para Arduino y uno para Java. Ambos se encuentran disponibles en nuestro repositorio de Github. El código de Arduino es el siguiente:

arduino-y-java

Lo que hacemos aquí es enviar un mensaje al Puerto Serie. El mensaje está compuesto por la palabra “Mensaje ” seguido de un número que aumenta una unidad por cada segundo.

Ahora en Java vamos a recibir esta información y a imprimirla en la consola. El código en Java es el siguiente:

Arduino + Java

Otro código sencillo. En la línea 19 creamos la instancia de la librería. La línea 20 crea una variable listener que escuchará el Puerto Serie para determinar cuando se ha recibido un Byte. En la línea 24 se discrimina cuando ha finalizado la recepción de un mensaje desde Arduino.

La línea 26 es la encargada de imprimir el mensaje recibido en la consola (ino.printMessage() devuelve un String con el mensaje recibido). En la línea 37 iniciamos la conexión con el Arduino (puerto COM4), esta vez utilizando el método ArduinoRX que es especial para recepción de datos.

 

Transmisión y Recepción entre Arduino y Java

Esta vez haremos una comunicación de dos vías. Vamos a encender y apagar un LED desde Java, pero Arduino nos enviará un mensaje cada vez que lo hagamos. El código de Arduino es el siguiente:

arduino-y-java

Si lo probamos en el Monitor Serie nos daremos cuenta que podemos encender o apagar el LED con “1” y “0”. Cuando lo hagamos, recibiremos un mensaje con el estado lógico del LED, seguido de un tiempo en milisegundos. Este tiempo corresponde a la cantidad de milisegundos que ha trascurrido desde el inicio del programa.

El código en Java incluye un botón de encendido y apagado, junto a un Label donde se mostrará el resultado recibido desde Arduino.

arduino-y-java

El código en Java es el siguiente:

Arduino + Java

Una programación sencilla, similar a las anteriores. La excepción en este código es la línea 28, con el método arduinoRXTX. También tenemos la línea 18, donde en vez de imprimir el mensaje en la consola, lo pasamos a el Label que colocamos en la interfaz.

Este ejemplo muestra las posibilidades que existen cuando integramos Arduino + Java. Interfaces gráficas acopladas a circuitos electrónicos es la base fundamental de proyectos avanzados con posibilidad de una amplia variedad de resultados.

Demostración en tiempo real

El siguiente video lo he preparado para demostrar el funcionamiento de cada uno de los códigos que hemos presentado en este post.

Debo recordarles que los códigos de todos estos ejemplos se encuentran disponibles en nuestro repositorio de Github. Es importante adquirir la buena costumbre de trabajar en base a repositorios y herramientas de programación para control de versiones como Git. Sobre estos temas ya hemos escrito antes en este blog:

Guía básica sobre el uso de Git y GitHub

Cómo contribuir en proyectos con Git y GitHub

Esperamos que la información mostrada sea de utilidad para ustedes. Cualquier duda, comentario, observación u opinión, no duden dejarla en la caja de comentarios.

 

 

 

¿Te gustó? ¡Comparte!Share on LinkedInShare on FacebookTweet about this on TwitterEmail this to someoneShare on RedditShare on TumblrShare on Google+Pin on PinterestBuffer this page
  • Paulino Vazquez

    Excelentes aportaciones, me nace una duda se que me pueden ayudar, ¿Se puede controlar diferentes pines desde java? tengo un proyecto para controlar sensor de temperatura, sensor de humedad, relay´s, pero quiero que sea desde una plataforma hecha en netbeans. como se podría hacer esto.

    Saludos desde México.

    • Antony García González

      Sí se puede. Sólo debes programar tu Arduino para que reaccione ante las diferentes señales que le lleguen desde Java a través del Serial

  • Adrian Lopez

    buenas noches amigo me podrian ayudar con que codigo desconecto el puerto serial un ejemplo tengo conectar (arduino) y quiero un desconectar. Me podrian ayudar gracias