Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

9
GRAFICANDO DATOS DE SENSORES EN TIEMPO REAL CON ARDUINO, JAVA Y JFREECHARTS Por Antony García González Antony García González Estudiante de la Universidad Tecnológica de Panamá Facultad de Ingeniería Eléctrica Licenciatura en Ingeniería Electromecánica Creador y Administrador del blog PanamaHitek.com

Transcript of Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Page 1: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

´

GRAFICANDO DATOS

DE SENSORES EN

TIEMPO REAL CON

ARDUINO, JAVA Y

JFREECHARTS Por Antony García González

Antony García González

Estudiante de la Universidad Tecnológica de

Panamá

Facultad de Ingeniería Eléctrica

Licenciatura en Ingeniería Electromecánica

Creador y Administrador del blog

PanamaHitek.com

Page 2: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

1 Presentado por Antony García G. | [email protected]

Graficando datos de sensores en tiempo real con Arduino, Java y jFreeChart

Por Antony García G.

ABSTRACT

Un documento que muestra los pasos a seguir para graficar los datos

obtenidos a partir de cualquier tipo de sensor conectado a Arduino a

través de la implementación de las librerías JFreeChart y Arduino para

Java. Por medio de comunicación serial entre un micro controlador, el

usuario puede supervisar el comportamiento de cualquier fenómeno

de forma gráfica en la pantalla de la computadora.

INTRODUCCIÓN

La librería JFreeChart1 ha sido presentada en Panama Hitek2 como una opción muy útil

para la creación de gráficos en Java. En esta ocasión de va a aprovechar las ventajas de

JFreeChart para elaborar gráficos en tiempo real, específicamente para hacer lectura de

datos obtenidos a partir de sensores conectados a Arduino.

La comunicación entre Java y Arduino se lograr por medio del puerto serie3, con la librería

RXTX4 y con la asistencia de la Librería Arduino5 diseñada para Java. La interfaz de

desarrollo utilizada para esta demostración es Netbeans IDE, en su versión 7.36.

Se espera obtener una interfaz muy sencilla que pueda ser utilizada como parte de futuros

proyectos para evaluar el comportamiento de fenómenos físicos transformados a pulsos

eléctricos por medio de los sensores y con Arduino como interfaz electrónica. Se podrá

utilizar cualquier tipo de sensor con esta interfaz.

1 http://panamahitek.com/2013/03/03/graficando-en-java-con-jfreechart/ 2 http://panamahitek.com/ 3 http://panamahitek.com/2013/01/27/comunicacion-serial-con-arduino/ 4 http://panamahitek.com/2013/01/31/requisitos-para-utilizar-arduino-con-java/ 5 http://panamahitek.com/2013/03/08/libreria-arduino-para-java/ 6 https://netbeans.org/

Page 3: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

2 Presentado por Antony García G. | [email protected]

REQUISITOS PARA LA CREACIÓN DEL PROGRAMA

Librería Arduino para Java

Librería RXTX

Librería jFreeChart

Netbeans IDE 7.3

Nota: las librerías se encuentran disponibles en Panama Hitek y en los enlaces

proporcionados como referencia de este documento.

CREACIÓN DE LA INTERFAZ EN JAVA

Se crea un proyecto en Netbeans llamado Charts. Se deja la clase principal y se agrega

un jFrame bajo el nombre Windows. Desde la clase principal se instancia Windows de tal

forma que al iniciar la ejecución del programa se abra la ventana principal.

Figura 1 – Panel de proyectos y código de la clase principal “Charts.java”

Figura 2 – Panel de

diseño de Netbeans IDE

con la interfaz del

programa, la cual

solamente constará de

un solo botón que

desplegará los gráficos.

Page 4: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

3 Presentado por Antony García G. | [email protected]

Es necesario implementar las librerías que harán posible la utilización del código a usar. Los

enlaces de descarga para las librerías se encuentran al final de este documento. Los

archivos a importar son los siguientes:

Archivo Librería

Arduino.jar Librería Arduino para Java

RXTXcomm.jar Librería RXTX

Jcommon-1.0.17.jar

Librería JFreeChart Jfreechart-1.0.14.jar

Tabla 1 – Archivos que se necesitan importar a las librerías del proyecto

Estos cuatro archivos deben estar en el árbol del proyecto en la sección de librerías.

Figura 3 – Archivos importados al árbol de librerías

del proyecto. Los archivos pueden ser descargados

desde Panama Hitek o bien desde los enlaces

proporcionados al final del documento.

Ahora se procede con la programación que hará posible obtener los resultados deseados.

Es necesario instanciar la librería Arduino para Java en el proyecto e iniciar la

comunicación RXTX con Arduino.

Los parámetros para RXTX serán el puerto COM donde se conectará Arduino, 2000

milisegundos de tiempo de espera, un baud rate de 9600 y un SerialPortEventListener

llamado evento, que será el encargado de ejecutarse al recibir los datos.

Page 5: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

4 Presentado por Antony García G. | [email protected]

Figura 4 – El código con el cual se instancia la librería Arduino y se inicia la comunicación con Arduino.

Cualquier error que aparezca será automáticamente corregido por Netbeans. Las líneas en verde

serán las únicas que se deben escribir ya que todo lo demás será agregado por el IDE al hacer clic

en las notificaciones que aparezcan en la izquierda.

Luego de esto solo se necesita crear las gráficas con jFreeChart. Se crea una variable del

tipo JFreeChart llamada Gráfica. También se necesitan dos variables que serán los

contenedores para los datos del sensor, sean Serie y Datos.

Figura 5 – Las variables que se deben declarar para hacer las gráficas con jFreeChart. La serie XY guarda

los valores obtenidos del sensor. En la variable Colección es donde se agregan las series de Datos.

Finalmente la variable Gráfica es en sí la gráfica del jFreeChart.

Ahora se inicia la serie de datos con la coordenada 0, para que la gráfica parta desde el

origen. Se agregan los datos de la Serie a la colección de datos y se crea el gráfico a partir

de las variables declaradas. El tipo de gráfico debe ser XYLineChart y se inicia como un

método de ChartFactory. Los parámetros son los siguientes:

Page 6: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

5 Presentado por Antony García G. | [email protected]

Grafica = ChartFactory.createXYLineChart(String título del gráfico, String Etiqueta del eje

horizontal, String Etiqueta del eje vertical, XYDataset colección de datos,

PlotOrientation orientación, boolean leyenda, boolean tooltips, boolean urls)

Para efectos de este documento, los parámetros serían:

Figura 6 – Parámetros para la gráfica

Ahora solo se necesita programar el botón que abrirá la ventana con la gráfica.

Figura 7 – Programación del botón “Graficar”. Se crea un ChartPanel y se agrega la gráfica.

Luego se coloca el ChartPanel en una nueva ventana y se muestra la gráfica.

Con esto es suficiente para obtener resultados. Es una programación sencilla que mostrará

una ventana con un gráfico en tiempo real sin mayores detalles. Se puede optimizar las

funciones que tenga el programa agregando otros elementos según sean las necesidades

del usuario.

PROGRAMACIÓN EN ARDUINO

La programación en Arduino es muy sencilla: solo se inicia la comunicación serial y se hace

lectura del nivel análogo en el divisor de tensión y se imprime por medio del método

Serial.println(). Se coloca un retraso de 100 ms para evitar una sobresaturación de datos.

Page 7: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

6 Presentado por Antony García G. | [email protected]

Figura 8 – Programación de Arduino para

hacer lectura del nivel de luminosidad a

partir de un divisor de tensión con una foto

resistencia.

ESQUEMA ELECTRÓNICO

El circuito que funcionará como detector de luz consiste en una fuente de voltaje (5 voltios,

desde Arduino), una resistencia de 1 kΩ y una foto resistencia.

Figura 9 – Diagrama

pictórico del circuito

detector de luz (Cortesía

de Fritzing.org)

Page 8: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

7 Presentado por Antony García G. | [email protected]

RESULTADO FINAL

El comportamiento del programa es tal cual lo esperado. Se muestra una gráfica cuyo

comportamiento depende de la Luz aplicada a la foto resistencia.

Figura 10 – Ejemplo de gráfica en tiempo real en JFreeChart

Los resultados han sido satisfactorios. Con JFreeChart ahora es posible conseguir gráficas

directamente desde cualquier sensor con Arduino.

Page 9: Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf

Controlando Motor de Corriente Directa con Arduino y Java| Panama Hitek

8 Presentado por Antony García G. | [email protected]

REFERENCIAS

Los conceptos expuestos en este documento forman parte de los contenidos asociados a

PanamaHitek.com y pueden ser encontrados en dicha dirección web.

Acerca de la librería RXTX

http://panamahitek.com/2013/01/31/requisitos-para-utilizar-arduino-con-java/

http://rxtx.qbang.org/wiki/index.php/Main_Page

Acerca de la librería JFreeChart

http://www.jfree.org/jfreechart/

http://panamahitek.com/2013/03/03/graficando-en-java-con-jfreechart/

Acerca de la librería Arduino para Java

http://panamahitek.com/2013/03/08/libreria-arduino-para-java/

http://panamahitek.com/2013/04/21/libreria-arduino-para-java-troubleshoot/

Demostración en video del funcionamiento del código presentado

http://youtu.be/VALfzVn-GSo

Archivos de Código fuente para Arduino y Java

https://docs.google.com/file/d/0B0hsUkhqWH97S0VUTVhpV3NKQ2c/edit?usp

=sharing