Вы находитесь на странице: 1из 22

10 cosas que necesitas saber para utilizar

Arduino desde Java


Por

Antony García González

febrero 24, 2014

11

9601

Arduino, una poderosa plataforma de hardware libre, ideal para poyectos de


electrónica que van desde el encendido de un LED hasta un complejo sistema de
domótica para controlar una casa entera. Java, uno de los lenguajes de programación
más extendidos del mundo. ¿Podemos utilizar Arduino desde Java? ¡Por supuesto!

Veamos 10 aspectos que necesitamos comprender para crear proyectos de alto nivel
combinando estas dos grandes tecnologías.

1. No se puede programar Arduino utilizando el lenguaje Java


Arduino y Java son dos entes independientes. Arduino es una plataforma de
hardware libre con su propio lenguaje, mientras que Java es un lenguaje de
programación de alto nivel. Java necesita para su ejecución la Máquina Virtual de
Java, la cual, hasta ahora no puede ser ejecutada desde Arduino. Al menos no la
máquina virtual que utilizamos en nuestras computadoras.

Hay personas que han dedicado su tiempo a crear máquinas virtuales especiales para
microcontroladores. Uno de estos proyectos es HaikuVM, el cual permite
efectivamente programar Arduino en lenguaje Java. Sin embargo, el espacio de
memoria con el que contamos para programar se ve drásticamente reducido y según
la opinión de algunos usuarios, el performance no es muy bueno que digamos.
Programar Arduino en lenguaje Java sí es posible, pero no es eficiente.
Sin embargo esto no significa que no podamos crear programas en Java que le
envíen instrucciones a Arduino entregándonos el control de circuitos electrónicos
desde una interfaz en la computadora.

2. Arduino se comunica con la computadora por medio de


Comunicación Serial

Uno de los primeros aportes que escribí para este blog fue como establecer
comunicación entre la computadora y Arduino por medio de comunicación serial.

Esta es la forma más sencilla de comunicación que existe entre Arduino y la


computadora, ya que aprovecha el puerto USB por medio de un convertidor USB-
Serie.

Resulta que para poder comunicar nuestras aplicaciones en Java con Arduino
debemos aprovechar la comunicación serial, lo cual es perfectamente posible si se
implementan las librerías adecuadas.
3. Para permitirle a Java establecer comunicación con el Puerto Serie
se requiere instalar los drivers de la librería RXTX
La librería RXTX es una compilación de código que le permite a los programadores
en Java establecer comunicación con el Puerto Serie. Alguna vez escribí un post que
hace referencia a los requisitos para comunicar Arduino con Java.

Desde dicho post es posible descargar los Archivos JAR para 32 y 64 bits
(Windows) que se deben importar a los proyectos Java para hacer posible lo que
deseamos hacer. Algunas personas presentan problemas a la hora de instalar estos
archivos en sus computadoras, por lo que en algún momento decidí crear un post
exclusivo para resolver estas dificultades.

4. Usar la librería RXTX es un poco difícil… ya existe una librería


especial para Arduino en Java
La librería Arduino para Java es una compilación de código que facilita mucho la
comunicación Arduino-Java, Java-Arduino.

Es posible lograr esta comunicación utilizando la librería RXTX, como mostré


en uno de mis aportes. Sin embargo, si hacemos un análisis comparativo entre lo que
se requiere con una u otra librería, nos damos cuenta que la diferencia es muy
marcada. Yo diseñé la librería Arduino para Java a partir de la RXTX creando
algunos métodos que comprimen los comandos que se requieren para establecer una
conexión, enviar y recibir datos.

Para poder lograr esta comunicación, es necesario importar ambas librerías, la


Arduino y la RXTX ya que la primera depende de la segunda.

5. Al crear un programa en Java y establecer comunicación con


Arduino, se está remplazando el Monitor Serial por una interfaz
gráfica
Cuando se crea un programa en Arduino que requiera de la intervención del usuario
por medio del Monitor Serial lo que hacemos es enviarle caracteres, sean letras o
números. Estos caracteres se leen en Arduino, se interpretan y devuelven un
resultado, si es necesario.

Un ejemplo de esto es cuando encendemos un LED desde el teclado de la


computadora. En dicho código se lee un caracter. Si el caracter recibido es un 1, se
enciende un LED. De lo contrario, se apaga.

Para lograr el mismo resultado con un programa en Java, pues se crea una interfaz
con dos botones, uno para encender y otro para apagar. Cuando se presiona el botón
de encender, se le indica a Java que envíe un “1” a Arduino. La librería Arduino
cuenta con un método, SendData(), con el cual es posible hacer esto. En el botón de
apagado, se envía un “0” o cualquier otro caracter. Al presionar cualquiera de los
dos botones, estamos emulando lo que haríamos con el Monitor Serial, enviando un
1 o un 0 para encender o apagar.
¿La ventaja de las interfaces? Tenemos botones gráficos estilizados, lo que hace
nuestros proyectos más interesantes, interactivos y profesionales. Un ejemplo de
esto lo mostré en el post Arduino y Java: Encendiendo LEDs desde un programa en
nuestra PC.

6. Para cada tipo de comunicación existen métodos especiales


Se pueden dar tres tipos de situaciones…

1. Cuando se necesita transmitir datos de Java a Arduino


2. Cuando se necesita transmitir datos de Arduino a Java
3. Cuando se necesita enviar y recibir datos entre Arduino y Java

Para esto, la librería Arduino para Java posee tres tipos de


conexiones: ArduinoRX(), solamente para recibir datos en
Java. ArduinoTX(), solamente para transmitir datos en Java ArtuinoRXTX(), para
transmitir y recibir datos en Java

Los tres métodos tienen parámetros que se deben establecer a la hora de utilizarlos.
En todos hay que establecer el puerto COM al que está conectado Arduino (ejemplo:
“COM6”), el baudRate (que debe ser igual al establecido en el Serial.begin() en
Arduino), un timeOut (tiempo de espera entre el inicio de la conexión y el
envío/recepción de datos) y en algunos casos un SerialPortEventListener para
detectar cuando se han enviado datos de Arduino a Java.

7. Java se da cuenta cada vez que Arduino le envía datos


Cuando es necesario enviar datos de Arduino a Java, se utiliza
un SerialPortEventListener, el cual requiere de la implementación de un método
abstracto, SerialEvent().

El SerialEvent() se ejecuta cada vez que se recibe un dato en el Puerto Serie. Los
datos en el Puerto Serie se reciben caracter por caracter, lo que significaría un
problema ya que si enviamos un mensaje de texto, recibiremos el mensaje letra a
letra. Usando el método ReceiveData() obtenemos estos caracteres. Sin embargo,
también existe el método MessageAvailable() que devuelve un valor true cuando se
haya finalizado la recepción de cualquier mensaje enviado desde Arduino con el
método Serial.println().

Cuando el método MessageAvailable() devuelve un valor true, entonces se recibe el


mensaje con PrintMessage(). El mensaje será recibido como un String y podrá ser
usado como desee el usuario dentro de Java.

8. En Java es posible graficar los datos que leemos en los sensores


conectados a Arduino

Existe la librería JFreeCharts. Podemos crear una interfaz que recibe, procesa y
grafica los datos en tiempo real, como ya mostramos en el post “gráficas de sensores
en tiempo real con Arduino, Java y JFreeChart“.

9. Las interfaces gráficas en Java le agregan versatilidad a los


proyectos en Arduino
Los elementos de programación de alto nivel disponibles en Java permite manipular
las interfaces electrónicas con mayor versatilidad, como se muestra en los siguientes
aportes:

 Java + Arduino: Encendiendo un LED RGB desde un programa en nuestra


PC
 Arduino + Java: Enviando mensajes a pantalla LCD desde Java con
Arduino
 Arduino+Java: Ejemplo de LED Blink con Java Threads
 Arduino+Java: LED de frecuencia variable con Java Threads
 Arduino+Java: Graficando datos de sensor ultrasonico HC-SR04
 Arduino + Java: Variar los colores de un LED RGB con PWM
 Arduino+Java: Variar resistencia de circuito eléctrico desde programa en
Java
 Arduino+Java: Controlando motores de corriente directa desde
la computadora

10. Utilizar Arduino desde Java: El límite es el infinito


Las posibilidades que nos brinda la programación en Java para interactuar con
Arduino son infinitas. Está en cada quien desarrollar sus capacidades en
programación y electrónica para empezar a crear proyectos más y más exigentes.
Los contenidos que hay en este blog se han tratado de confeccionar de la manera
más atinada para asegurar que los conceptos que deseamos transmitir lleguen a
nuestros lectores de manera clara, precisa y concisa.

Espero que esta información sea de utilidad para ustedes. Saludos.

Arduino + Java: Encender un LED desde


un programa en la PC
Por
Antony García González
-
agosto 13, 2013
30
17196

***Este post fue originalmente publicado el 31 de enero de 2013, pero lo estoy re


posteando ya que esta vez utilizaré la librería Arduino para Java que yo mismo
diseñé y que no fue incluida en la publicación original

En este artículo voy a mostrar como encender un LED desde un programa en la


PC hecho con el lenguaje de programación Java, utilizando Netbeans IDE.

Uno de los principios de la Robótica es lograr que un dispositivo electrónico sea


controlado por el usuario a través de una computadora. Con Arduino podemos
controlar circuitos utilizando aplicaciones escritas en cualquier lenguaje de
programación que soporte comunicación serial. Para efectos de este post,
concentraremos nuestros esfuerzos en lograr que un circuito sencillo, como lo es un
LED y una resistencia puedan ser conmutados desde nuestra computadora,
utilizando una interfaz en Java y nuestro microcontrolador Arduino. En mis
anteriores aportes me he enfocado en explicar como crear una sencilla aplicación en
Java, con un botón y un jLabel. También vimos como trabajan las funciones en Java.
Para poder enviar y recibir información a través del puerto serie con Java se
necesita instalar las librerías RXTX. Por último, toda aplicación debe contar con
la Librería Arduino para Java. Con toda esta información somos capaces de lograr
nuestro acometido. Empezemos. Primero abrimos Netbeans y creamos un proyecto
llamado ArduinoSwitch. Insertamos un jFrame y colocamos 2 botones: Encender y
Apagar.

Necesitamos renombrar los nombres de los botones. Los


llamaremos jButtonEncender y jButtonApagar.
Ahora al botón de Apagar le vamos a quitar la opción “enabled” en las propiedades
del control.
Esto lo que hará es que al iniciar el programa no se pueda presionar el botón de
apagado mientras el LED esté apagado. Si ejecutamos el programa, la interfaz es la
siguiente:
Ahora vamos a programar. Lo primero que debemos hacer es agregar las
librerías RXTX y Arduino a nuestro programa.
Abrimos el código fuente e instanciamos la librería Arduino.

Le damos clic al ícono amarillo de la izquierda y seleccionamos la primera opción.


Esto logrará que se elimine el error. En el método principal se inicializa la conexión
con Arduino. Como solo vamos a encender y apagar, se usa ArduinoTX.
Los parámetros que colocaremos son los siguientes: PORT NAME:Nombre del
puerto donde está conectado Arduino (por ejemplo, COM24, COM25, COM 25,
etc). TIME OUT: Tiempo de espera entre el inicio de la ejecución y el envío de
comandos. Se utiliza 2000 por default. DATARATE: El baud rate de la
comunicación serial. Normalmente se usa 9600. Agregamos los parámetros que
estemos usando en nuestro proyecto y metemos todo en una estructura Try-Catch.
Con esto hemos terminado la conexión con Arduino. Necesitamos programar los
botones. Lo que haremos será que cuando presionamos el botón de encender, este se
desactive y solo quede activo el botón de apagar. Le damos doble clic al botón
“Encender” en la interfaz de diseño e insertamos la programación. Al presionar
encender, se desactivará el botón y cambiará el color a gris. Se activara el botón
apagar y cambiará a dorado. Usaremos la clase Color para los colores, los cuales
necesitamos introducir en formato RGB. Así luce la programación:
El comando que va a encender el LED en Arduino será un “1” el cual enviaremos
utilizando la función Arduino.SendData().

En el botón apagar se copia el mismo código pero se le hacen algunas ligeras


modificaciones.
Hemos terminado la programación en Java. Ahora solo hay que subir el código a
nuestro Arduino para que todo nos funcione bien. Primero el esquemático:
Nótese que el cátodo (positivo) del LED está en el pin 13 y el cátodo en GND
(verificar los electrodos dentro del propio LED). Ahora la programación:

1 int input;
2
3 void setup(){
4
5 pinMode(13, OUTPUT); // Declaramos que utilizaremos el pin 13 como salida
6
7 Serial.begin(9600);
8 }
9
10 void loop(){
11 if (Serial.available()>0){
12
13 input=Serial.read();
14
15 if (input=='1'){
16
17 digitalWrite(13, HIGH); //Si el valor de input es 1, se enciende el led
18
19 }
20
21 else
22
23 {
24
25 digitalWrite(13, LOW); //Si el valor de input es diferente de 1, se apaga el LED
26
27 }
28
29 }
30 }

Con esto estamos listos para ejecutar. En el siguiente video (el que publiqué en la
versión original, viejo y sin mucha calidad) se muestra la pequeña interfaz que
hemos hecho funcionando con un LED. Los archivos de este proyecto se
encuentran disponibles en el siguiente
enlace: http://docs.google.com/file/d/0B0hsUkhqWH97a1BDUU02MlB4WXM Esp
ero que toda la información suministrada sea de su completo agrado. Saludos.

Referencias

http://panamahitek.com/encender-un-led-desde-un-programa-en-la-pc/

http://panamahitek.com/10-cosas-que-necesitas-saber-para-utilizar-arduino-desde-java/

Вам также может понравиться