Medidor Dual de Humedad/Temperatura con JFreeCharts

18
2361

Un medidor dual de humedad y temperatura alimentado por información recibida directamente desde Arduino con el sensor DHT22. Antes ya he mostrado como graficar datos de sensores en Arduino por medio de Java y la librería JFreeCharts.

Ejemplo de ello son los siguientes aportes:

En esta ocasión voy a mostrar como mostrar los datos obtenidos por un sensor DHT22 de Humedad y Temperatura en un Medidor Dual Análogo.  Veamos una imagen de cómo nos quedaría nuestro medidor.

DialPlotSample

Vamos a registrar la Temperatura en el medidor externo (aguja grande) y la Humedad en el medidor Interno (aguja pequeña, de color rojo).

Vamos a necesitar para esto descargar los ejemplos o «demos» de la librería JFreeChart. Esto no encontraremos en el siguiente enlace.

JFreeCharts Demo

Vamos a descargar el archivo y a abrir Netbeans para crear un nuevo proyecto. Llamaré a mi proyecto MedidorDual. En el paquete principal voy a cargar dos clases de las que se encuentran en el archivo comprimido de los «demos» de JFreeChart. Estas son DemoPanel y DialDemo (A esta altura ya debemos haber agregado las librerías JFreeCharts a nuestro proyecto).

DialDemo2

Ahora necesitamos instanciar la clase DialDemo2 en la clase principal MedidorDual.

DialDemo2

 

Ahora estamos listos para ejecutar nuestro código. El resultado es el siguiente.

DialDemo2

 

Como podemos observar, los valores que marcan las agujas están determinados por los «sliders» de la parte inferior. Lo que haremos será modificar ligeramente nuestro código para que en vez de obedecer los jSliders obedezca los datos que le enviemos desde Arduino.

Vamos a ir al código y eliminaremos los slider 1 y 2.

DialDemo2

 

Al eliminar los slider nos aparecerá una serie de errores en nuestro código. Vamos a eliminar todas esas líneas donde nos aparezcan errores.

DialDemo2

 

Al eliminar todas las líneas con errores estamos eliminando cualquier rastro de los jSlider.

Necesitamos eliminar los jLabel que dicen «Inner Needle» y «Outer Needle» ya que no los vamos a necesitar.

DialDemo2

 

Vamos a probar nuestro código a ver como nos va quedando.

DialDemo2Vemos que los Sliders han desaparecidos y ahora no tenemos forma alguna de mover los valores de las agujas. Sigamos haciendo otros cambios. Vamos a modificar la escala de la aguja exterior, para que los valores que se muestren estén entre 0 y 100 ºC.

DialDemo2

 

También podemos cambiar una serie de parámetros como el título del gráfico, los colores, el tamaño, la fuente, etc. Por ahora, sólo mostraré cómo comunicar nuestro gráfico con Arduino.

Necesitaremos importar nuestra Librería Arduino para Java. Vamos a instanciar la librería en el código del medidor. Crearemos un objeto llamado Arduino. También invocaremos la clase MultiMessage para la lectura de los sensores. En esta ocasión se leerá dos parámetros, humedad y temperatura. Esto necesitamos establecerlo en la instancia de la clase MultiMessage.

DialDemo2

Ahora hay que crear un objeto invocando la clase SerialPortEventListener para recibir los datos desde Arduino en tiempo real. Esta clase cuenta con un método abstracto (SerialEvent) que se ejecuta cada vez que Java recibe un mensaje desde Arduino.

DialDemo2

Vamos a asignarle los valores que recibamos de Arduino a cada una de las agujas. El primer valor que recibiremos será de Temperatura y el segundo de Humedad. Utilizaremos la clase MultiMessage.

DialDemo2

Lo que la clase multi hace es regresar un valor «true» a través del método DataReceptionCompleted cuando se ha terminado de recibir la cantidad de datos establecida en la creación del objeto, en este caso 2.

Cuando dicha condición se cumple, podemos leer los datos almacenados en un arreglo a través del método getMessage(int index), donde index es el número de dato que deseamos leer. En este caso, el dato 1 es temperatura y el 2 es humedad. El orden de prioridad lo decidimos en el código Arduino que veremos más adelante.

Asignamos los valores al los DataSet por medio de setValue. Al final, cuando hemos terminado de darle el tratamiento requerido a la información recibida utilizamos el método flushBuffer() para eliminar los datos almacenados en el arreglo y prepararnos para una nueva lectura.

Ahora el último paso que necesitamos hacer es declarar la conexión con Arduino. Esto lo haremos al final del método que crea nuestro medidor (MyDemoPanel).

DialDemo2

Con esto hemos terminado de programar nuestro Medidor Dual en Java. Para mi caso el puerto que estoy utilizando es el 8, pero esto puede cambiar de PC a PC.

Vamos a preparar nuestro código en Arduino. Nos vamos a basar en el programa que publiqué una vez en el post del sensor DHT22, con ligeras modificaciones.

Vemos que primero imprimimos la Temperatura y luego la Humedad, ya que en ese orden es que esperamos leer los datos con el MultiMessage

Cargando este código en Arduino estamos listos para probar nuestro Medidor Dual.

DialDemo2

Eso es todo por ahora. Espero que la información suministrada sea de su agrado y comprensión.

Saludos.

0 0 votes
Article Rating
Suscríbete
Notify of
guest

18 Comments
newest
oldest most voted
Inline Feedbacks
View all comments
Pedro Avila
Pedro Avila
5 years ago

Después de estar revisando el código y ver algunas modificaciones que le hice por fin funciono, ahora si pudieras ayudarme con los valores de humedad y temperatura, no se por que me los cambia uno y uno: prueba————————- Humedad:28.0 Temperatura:95.0 prueba————————- Humedad:75.0 Temperatura:28.0 prueba————————- Humedad:28.0 Temperatura:64.0 prueba————————- Humedad:58.0 Temperatura:28.0 prueba————————- Si observamos va cambiando los valores quizá no se vea tan claro es decir primer dato que me arroja para humedad es de 58 y para temperatura es 28 a los dos segundos restantes, vuelve a mostrar los valores pero ahora los invierte, temperatura me arroja 58 y humedad 28…… Read more »

Pedro Avila
Pedro Avila
5 years ago

A U X I L I O !!!
No puedo agregar el objeto arduino y los demas…
Arduino Arduino = new Arduino();
MultiMessage multi = new MultiMessage(2, Arduino);
He estado revisando y se que ahi que agregar la libreria Arduino Panama_Hite 3.0.0

Pero a la hora de agregarla igual sigue sin detectarme las clases de arduino como tales que tengo que hacer???

ya intente agregar el repositorio con el otro tutorial pero la carpeta pom no la tengo orientame porfavor… saludos

Pedro Avila
Pedro Avila
5 years ago

Funciona igual para un sensor dht11???
tendras algo parecido donde expliques como se usa sensor de humedad de suelo??? Módulo Sensor De Humedad Del Suelo Arduino Cdmex

Doy clases en una preparatoria soy ing. Agronomo y me ando metiendo en este mundo de la programación le echo muchas ganas pero no es fácil, podrías apoyarme con algo de esto te lo agradecería muchísimo, el trabajo que realizo y las nuevas cosas que quiero crear es para que los alumnos salgan mejor preparador. Saludos

Pedro Avila
Pedro Avila
5 years ago

Muy buen aporte ojala exista mas gente como tu dispuesta a entregar sus conocimientos a la sociedad, doy clases en una preparatoria y me ha servido de mucho …. saludos y muchísimas gracias tienes face personal

Luis Gomez
Luis Gomez
6 years ago

Enlace caido del Demo de Jfreechart

Caro Ortega
Caro Ortega
6 years ago

Hola…. oye esta muy bueno tu proyecto crees que sea posible que me puedas pasar tu código fuente??? mi correo es [email protected]

Antony García González
Antony García González
6 years ago
Reply to  Caro Ortega

El post explica como se hace

victor capote
victor capote
7 years ago

hola, muchas gracias por tu aporte me ha servido mucho para un proyecto. quiero preguntarte, ¿es que al gráfico se le pueda anexar otras interacciones? (me explico) yo deseo crear un Jframe que lleve una animación de reloj o un calendario lo puedo hacer todo en conjunto, lo que pasa es que estoy creando una interfaz grafica y con tu aporte, necesito agragar mas cosas a la ventana. gracias

Antonio Gómez
Antonio Gómez
7 years ago

Hola! Antes que nada muy buen proyecto, me ha servido bastante. Solo una pregunta, en esta aplicación que versión de tu librería (PanamaHitek_Arduino) utilizaste? ya que me da error con la 2.82 y anteriores. Gracias

Jesus Zanelli
Jesus Zanelli
7 years ago

hola. respecto al proyecto en Java ¿lo hiciste tú o lo sacaste de internet? Es que me parece muy bien hecho, hacer algo así toma días, quería saber. Muchas gracias.

Antony García González
Antony García González
7 years ago
Reply to  Jesus Zanelli

En este caso usamos un ejemplo de la librería JFreeCharts y agregamos/modificamos algunas cosas para darle funcionalidad.

Cruz Juarez
Cruz Juarez
8 years ago

hola quisiera saber si las librerias han sido modificadas o hay algo diferente ?? no me funciona el codigo y estoy siguiendo as instrucciones como aparecen.??