Graficando-datos-de-sensores-en-tiempo-real-con-Arduino-Java-y-JFreecharts.pdf
-
Upload
francisco-hernandez-davila -
Category
Documents
-
view
784 -
download
2
Transcript of 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
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/
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.
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.
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:
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.
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)
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.
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