Exportar datos de sensores desde Arduino a Excel

15
5712
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.

 

  • Jhon Alvarez Ferrer

    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

      Sí es posible. Con JFreeCharts

  • Antony García González

    Hay que cambiar algunas líneas de código

    • Carlos Rmz R

      Que líneas se deben modificar?

      • Antony García González

        Las de la conexión Arduino-Java

  • Pingback: Exportar datos de sensores desde Arduino a Exce...()

  • Ruben Pas

    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

      Verifica la documentación de la librería

  • Miguel Alejandro

    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 que puedo hacer? gracias de antemano

    • Antony García González

      Tienes que instanciarla como PanamaHitek_Arduino arduino = new PanamaHitek_Arduino()

  • Antony García González

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

  • Carlos Lopez

    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 excel, yo lo estaba haciendo simplemente en un TXT de forma lo mas ordenada posible, en cada registro una linea con todos los datos obtenidos.

    Bueno mi problema es un error en la funcion public Window(), me dice esto invalid method declaration; return type required. No si si me faltara alguna llave o que pasa, pero te lo agradeceria muchisimo si pudieras ayudarme.

    Saludos desde Valencia

    • Antony García González

      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

    Gracias por tus buenos comentarios. Saludos

  • Joseba Garcia Ganzabal

    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 primer proyecto. Lo dicho , muchas gracias!! voy a hechar un vistazo mas por tu web y si alguna vez pueda ayudar o compartir algo… cuenta conmigo.

    Saludos!!