Exportar datos de sensores desde Arduino a Excel

28
39521
A veces es necesario cuando realizamos proyectos con Arduino y sensores, enviar la información obtenida a algún otro software para su análisis y utilización. Aprende a exportar datos de sensores desde Arduino a Excel, por medio de una interfaz en Java. Se utilizará las librerías Arduino para Java y la librería POI para generar los archivos de Excel.

 

Para exportar datos de sensores desde Arduino a Excel yo recomiendo utilizar Java. Aquellos que frecuentan este blog saben acerca de mi librería Arduino para Java.

Normalmente cuanto escribo un post acerca dealgún proyecto en la línea Arduino/Java, empiezo por Java, pero esta vez voy a iniciar con Arduino.

Se va a utilizar para esta experiencia el sensor de humedad/temperatura DHT11, del cual ya he escrito lo suficiente en mis anteriores aportes.

El código a utilizar en Arduino es el siguiente:

 

Es un código sencillo. Se lee la humedad y la temperatura y se envían por medio del puerto serie. Es importante utilizar Serial.println() y un pequeño delay de 10 milisegundos. A la hora de leer los datos Java a veces se confunde. El método que utilizo yo para enviarme series de datos de Arduino a Java requiere de una secuencia, y ese pequeño delay es el que hace que todo me funcione correctamente. A continuación se muestra a que me refiero. Le he colocado una «lave», una variable del tipo boolean que iniciará o detendrá la toma de datos.

Vamos a Netbeans y creamos un proyecto, colocamos un jTable y 2 botones, uno para iniciar/detener la toma de datos y el otro para exportar a Excel.

 Arduino a Excel

Ahora se necesita implementar la librería Arduino para Java PanamaHitek_Arduino. La librería RXTX será necesaria en esta ocasión.

Se debe utilizar la conexión RXTX debido a que se transmitirán y se recibirán datos.

Arduino a Excel
Se debe tomar en cuenta que el puerto COM utilizado varía de computadora a computadora. En mi caso es el 10, en el de ustedes puede ser diferente. Al declarar el objeto «evento» aparecerá una opción a la izquierda de la línea que indicará que se deben importar todos los métodos abstractos. Al hacer clic en dicha opción, se agregará el método SerialEvent.

Ahora hay que establecer cómo se van a recibir los datos. En Arduino primero se envía la Humedad y luego la Temperatura. Se debe crear una variable, a la cual llamará Slot. Dependiendo del valor de Slot, se ejecutará determinada acción.

Arduino a Excel

Analicemos lo que sucede aquí. La variable Slot, inicialmente tiene valor 1. Si hay un mensaje disponible, es decir, si se ha invocado el método Serial.println en Arduino, Java reconocerá que debe leer el mensaje. Se le asigna a la variable «Humedad» y se aumenta el valor de Slot hasta 2. El próximo mensaje que se reciba, se le asignará el valor a la Temperatura y el valor de Slot volverá a ser 1 y así sucesivamente.

El SerialEvent se ejecuta hasta que se lee el valor, por lo que cualquier instrucción que se coloque después del PrintMessage será despreciada. Lo que voy a hacer es lo siguiente: crearé un método que sea el que introduce en el jTable la humedad y la temperatura «al leer la humedad». Pero esto debe suceder luego de la segunda lectura, así que se declara una variable llamada Lecturas que al ser mayor que 1, permita que se desencadene el jTableUpdate.

Arduino a Excel

De esta forma, al leerse el dato de temperatura, se disparará el método jTableUpdate. Agregamos las instrucciones para agregar los datos a la tabla.

Para cada ejecución del jTableUpdate, se debe agregar una fila al jTable. Esto ya lo expliqué en uno de mis anteriores aportes.

Se declara el modelo y en el jTableUpdate se agrega la fila, a la vez que se insertan los valores en las celdas. Hay que insertar el tiempo, por lo que es necesario invocar una librería en Java. Se trata de Calendar, que nos permite declarar un objeto al que yo he llamado Calendario y obtener hora, minutos y segundos para agregarlos a la tabla.

Arduino a Excel

Ahora hay que programar los botones. Primero el botón de iniciar la toma de datos.

Se crea otra llave, una variable del tipo boolean para condicionar el comportamiento del botón. Si es falso, se envía un «1» para iniciar la toma de datos. De lo contrario se envía un «0» para detener la toma de datos.

Sin título-3

Hasta aquí, el proyecto es funcional. Ya se puede apreciar lo que sucede cuando se presiona «Iniciar Toma de Datos».

Arduino a Excel

Ahora estamos listos para pasar a Excel.

Uso de la Librería POI

La librería POI (que está disponible en este enlace). Ha sido diseñada especialmente para exportar documentos a Excel. Ahora voy a explicar como funciona.

Lo primero que le vamos a agregar al botón «Exportar a Excel» es un jFileChooser que nos entregue la dirección en la cual queremos guardar el fichero.

Arduino a Excel

Ahora vamos a crear un método donde se cree el fichero.

Hay que crear algunos objetos: un libro, una hoja, una fila y una celda, todos elementos de Excel.

Sin título-6

Ahora si se quiere crear una fila, se debe modificar el parámetro del método createRow(int row). Si se quiere modificar la columna entonces se debe cambiar la celda en el parámetro de createCell(int celda).

Lo primero que haré es colocar un título. Luego empezaré a imprimir todos los datos del jTable en la hoja de Excel utilizando un ciclo for. Por último, generaré un fichero que se guardará en la ruta que escogí.

Sin título-4

En el código del botón de exportar a Excel he colocado lo siguiente:

Arduino a Excel

Esto es todo. Se puede hacer la prueba y se obtendrá lo siguiente:

exportar datos de sensores desde Arduino a Excel

Los archivos que forman este proyecto los puedes descargar desde este enlace.

Por último, el tutorial completo en video:

Espero que la información suministrada sea de su agrado y comprensión.

 

0 0 votes
Article Rating
Suscríbete
Notify of
guest

28 Comments
newest
oldest most voted
Inline Feedbacks
View all comments
jorge luis
jorge luis
9 months ago

hola ingeniero consulta a trabajado con plx daq quiero saber si se puede enviar dos datos en paralelo al excel

Last edited 9 months ago by jorge luis
Jorge Luis
Jorge Luis
9 months ago

Se podrá hacer comunicación en paralelo con Java para enviar dos datos a la vez en excel?

David
3 years ago

Hola, te cuento que me salio un error y lo he ensayado en varios computadores y me ha pasado lo mismo: No plugin found for prefix ‘surefire’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\Users\user\.m2\repository), central (http://repo.maven.apache.org/maven2)] -> [Help 1] To see the full stack trace of the errors, re-run Maven with the -e switch. Re-run Maven using the -X switch to enable full debug logging. For more information about the errors and possible solutions, please read the following articles: [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoPluginFoundForPrefixException Cuando le doy clic derecho para compilar no… Read more »

LUIS
LUIS
3 years ago

tienes los links de las nuevas formas????

Jaime Hidalfo
Jaime Hidalfo
3 years ago

hola.
Mi interesa mucho tu proyecto.. esta muy bien explicado, Requiero hacer un proyecto similar pero las variables que quiero capturar son de peso y revoluciones por minuto, y temperaturas, es decir 4 a 6 variables aproximadamente.. mi duda es que requiero la lectura lo mas posible en tiempo real,,, esto puede ser posible, es decir que tome los valores por lo menos cada milisegundo o cual es el tiempo mínimo sugerido para dicha toma de datos o valores..

Por tus comentarios muchas gracias..

Josh
Josh
4 years ago

Hola que tal este proyecto me intereso mucho, estoy empezando en arduino, una de mis dudas es si se podria poner mas sensores y como haria para que capture la temperatura de cada uno y exportarlo a excel de la misma manera

Franco Stockmanns
Franco Stockmanns
5 years ago

Hola no puedo importar esta libreria import org.apache.poi.hssf.usermodel.HSSFWorkbook; por lo tango no me deja crear un libro
HSSFSheet hoja = libro.createSheet();
que estoy haciendo mal??

Franco Stockmanns
Franco Stockmanns
5 years ago

una confusion mia problema solucionado

Jhon Alvarez Ferrer
Jhon Alvarez Ferrer
6 years ago

Muchas Gracias Antony, me ha servido mucho con un proyecto que llevo a cabo, una pregunta, podriamos hacer una Grafica a partir de esos mismos Datos que hay en la Tabla de Java en vez de un Excel?

Antony García González
Antony García González
6 years ago

Sí es posible. Con JFreeCharts

Antony García González
Antony García González
7 years ago

Hay que cambiar algunas líneas de código

Carlos Rmz R
Carlos Rmz R
7 years ago

Que líneas se deben modificar?

Antony García González
Antony García González
7 years ago
Reply to  Carlos Rmz R

Las de la conexión Arduino-Java

trackback

[…] Aprende a exportar datos de sensores desde Arduino a Excel, por medio de una interfaz en Java y el sensor de humedad/temperatura DHT11  […]

Ruben Pas
Ruben Pas
7 years ago

amigo por favor una pregunta por que cuando lo importo la libreria me sale package arduino does not exist ayuda por fa

Antony García González
Antony García González
7 years ago
Reply to  Ruben Pas

Verifica la documentación de la librería

Miguel Alejandro
Miguel Alejandro
7 years ago

Que tal buenas noches, buen post pero yo tengo una duda respecto a las librerias descargue la libreria de arduino desde sourceForge la version 2.7.3 la guarde en mi proyecto, luego baje la RXTX la descomprimi y segui un post tuyo bien explicado sobre esta libreria despues las añadi al proyecto (Libraries -> jar/folder), pero como la de arduino tenia un nombre muy largo (PanamaHitek_Arduino-2.7.3) lo deje en Arduino con su extension ,jar, despues hice como en tu video puse Ardunio arduino = new Arduino(); me marco el error y quiero importar la libreria pero no me da la opcion… Read more »

Antony García González
Antony García González
7 years ago

Tienes que instanciarla como PanamaHitek_Arduino arduino = new PanamaHitek_Arduino()

Antony García González
Antony García González
7 years ago

No es tan sencillo con un Arduino común y corriente

Joseba Garcia Ganzabal
Joseba Garcia Ganzabal
8 years ago

Enhorabuena por el trabajo y la capacidad de explicarlo a nivel de 10! Saludos desde euskadi , gracias por compartirlo! Me dedico a las telecom/informatica etc.. Me ha sido muy util tu tutorial y la verdad que da gusto la calidad y claridad de tus explicaciones; buscare los archivos y seguro que me son muy utiles!! pero sobre todo lo importante que das todas las pautas para que alguien sin excesivos conocimientos de programacion java (como yo) se animecon ello y los pueda adaptarlos a su proyecto 😉 Estoy empezando con arduino y me acabas de ayudar muchisimo con mi… Read more »

Carlos Lopez
Carlos Lopez
8 years ago

Buenas tardes, aunque veo que los comentarios son de hace tiempo, me gustaria si me podrías resolver una duda. Bueno, lo primero, increible post, super explicativo y profesional, todo un placer ver estas cosas por la red. Mi problema es que de Java no se practicamente nada, y tengo un proyecto con Arduino en el cual estoy registrando datos de varios sensores electroquimicos (NO,NO2 y O3) y con uno similar al tuyo SHT75 de temp y humedad, y guardo los datos en una SD, pero me a encantado tu entorno grafico de Java que lo guarda todo en columnas en… Read more »

Antony García González
Antony García González
8 years ago
Reply to  Carlos Lopez

El return tipe required se debe a que probablemente el nombre de la clase donde está el método Window no es la propia palabra Window. Es un error en el nombre de la clase

Antony García González
Antony García González
8 years ago

Gracias por tus buenos comentarios. Saludos