La desesperante historia de hacer gráficas en Arduino

dibujar gráficas en arduino con datos de sensores¡Hey! ¿Qué pasa? ¿Andas liado con tus proyectitos o qué? Hoy te quería contar sobre un problema que solemos tener: crear gráficas de datos. Es bastante típico querer tener una gráfica con todos los datos que estamos generando con un sensor. Así se puede ver la evolución o verlo después para sacar conclusiones de lo que está sucediendo.

Esto, en el pasado, siempre se ha resuelto con herramientas como Labview. Labview es un programa de National Instruments que te permite programar sistemas electrónicos de forma gráfica. Vamos, que puedes coger una sonda (como si fuera un osciloscopio, que pinchas lo que te interesa) y conectarla a unos dispositivos de National Instruments. Y de ahí, en el programa, vas añadiendo cajitas. Esas cajas incluirán la toma de datos con su frecuencia y todo. Pero luego puedes tomar esos datos y transformarlos. Puedes pasarlo por sumadores, delays y crear tus propios cuadros de mando dónde poder ver las gráficas con sus variables. Puedes añadir botones… vamos, que está bastante completo.

El problema es el precio del programa, el del hardware y que la programación en LabView no es algo inmediato. Hay que aprender. Además, como te he dicho es para hacer cosas muy pro, para mirar una variable de temperatura una vez cada hora no es necesario algo tan complejo.

También se podría utilizar Matlab, el cuál ya se deja conectar a Arduino. Y las gráficas de Matlab son brutales. Va todo por matrices pero puedes hacer tus propios programas con bucles y toda la historia con una sintaxis muy parecida a C. Pero ya te digo, mucho potencial para lo que vas a utilizar. Además de la pasta…Aunque tiene un sustituto libre que es Octave. Yo no me aclaré mucho cuando lo usé 😉

Intentando hacer técnicas cochinas

Así que, como ves, el problema está resuelto pero en plan: ‘matar moscas a cañonazos’. Las cosas simples no parecen estar de moda. Así que me he puesto a investigar en cómo hacerlo. Lo primero que se me ha ocurrido es la solución más cochina y poco profesional de todos los tiempos: copiar y pegar.

Si consigues enviar los datos de tu sensor al monitor serie de Arduino, al final toda la información se va almacenando ahí, así que sería más o menos fácil desconectar la placa para que no genere más datos, ir al principio de la ventana y bajar hasta el final. Copiando así todos los datos y pegándolos en una hoja de cálculo o en un documento de texto. Dónde puedas utilizar los gráficos.

Como ves, la solución además de manual no es en tiempo real. Pero es lo más sencillo que se me ha ocurrido. Así que pensando… he caído en que los datos podría enviarlos a un txt en mi Arduino Yún. Pero claro, seguramente no sea una opción que a ti te valga. Porque el tener un Arduino Yún es una cosa rara rara rara.

Pero bueno, hay una solución similar que sí sirve para todos los Arduinos. Es la de guardar todo lo que pasa por el puerto Serie. Rollo como un hacker que observa toda la información que pasa por la red. Pues lo mismo pero con el puerto Serie. Pues la cosa es que hay gente que dice que lo ha conseguido en Windows, pero yo soy incapaz de hacerlo en Linux.

Digamos que utilizan ‘hyper terminales‘ (un programa como el serial pero para el pc) para ver lo que se vería en el Monitor Serial de Arduino. Con la ventaja de que tiene una opción para capturar esos datos e ir poniéndolos en un archivo de texto.

La putada es que ninguno de los ‘hyper terminales‘ me deja capturar los mensajes por Serial en Linux. Solamente me deja verlos, que sería como utilizar el IDE de Arduino. Además, intentando atacar al puerto en sí desde Linux en plan fondo negro y mucho código tampoco veía todo el tiempo el mensaje. Sino que a veces funcionaba y otras no. Un jaleo vaya.

Así que cómo no funcionaba nada me he puesto a investigar la web de Igor (el chico que ha conseguido mostrar las gráficas en Windows) y he encontrado que el muy genio ha creado una plantilla Excel de manera que los datos se meten directamente en la hoja de cálculo. Pero yo, sin Windows, ando en las mismas 🙁

Utilizando una tarjeta SD

Así que hay que buscar más opciones. Otra sería la de utilizar la tarjeta SD. Para ello necesitarás módulos que te permiten conectar una tarjeta SD a la placa y además, utilizar la librería de Arduino llamda SD. Esta librería digamos que te hace fácil cosas como abrir y cerrar archivos:

 File archivo = SD.open("datos.txt", FILE_WRITE);
 archivo.println(cadena);
 dataFile.close();

Con File abro un archivo y luego le escribo una cadena de texto. ¿Cómo se consigue? Con bucles for y mucha imaginación. Entonces lo suyo es abrir el archivo, ir guardanto en una cadena tipo String todos los datos que haya en una fila y copiarlos a la SD. Y la siguiente línea de datos lo mismo. De esta manera generarías un archivo con todos los datos cada uno en su línea. Datos que yo te he dicho el valor de un sensor, pero pueden ser varios (cada uno en un pin) o incluso la hora a la que ha sido tomada la muestra.

Y bueno, algunas tarjetas SD están incluidas en tarjetas Ethernet, con lo que al acabar podrías enviar estos datos por e-mail o que sé yo.

Por fin, las gráficas de Arduino con Plotter

Y es por eso, para acabar con esta impotencia y rabia que te da de no poder hacer algo tan mundano de forma simple, que Arduino ha creado la opción Plotter. Bueno, que igual no es por eso, pero me gustaría que fuese por eso.

Para acceder al Plotter deberás de actualizar a la versión 1.6.6 de Arduino o superior. Aunque la que tienes en la web disponible es la 1.6.8 así que seguramente ya tengas la opción de Plotter activa.

Gráfica de Arduino hecha con el Plotter de Arduino

Y así es como queda al hacer un Serial.println() de un dato. Bien sea un número, bien un pin. Una vez compilado y con el programa funcionando en Arduino, tan sólo debes de ir a Herramientas, dónde está la opción de Serial Plotter que es la que te abrirá un Monitor Serial como el de siempre, pero en lugar de palabras tendrás puntos que se van uniendo en tiempo real en una gráfica.

Opt In Image

¿A ti se te ocurre cómo hacerlo?

Bueno, está claro que no es la herramienta más profesional que te puedas encontrar, pero tal vez sí que sea de las más sencillas para poder ver en tiempo real que está pasando con alguna variable. Lo suyo sería que se pudiesen poder ver varias señales a la vez y tal. Pero para eso habrá que esperar.

Por otra parte, si eres una máquina del C#, java o similares te puedes hacer tu propio programa que tome los valores que lleguen por Serial y los imprima por pantalla, los guarde y mil cosas más. Pero los ciudadanos de a pie tendremos que conformarnos con esto.

Si se te ocurre alguna manera de hacer funcionar el guardado de los datos que van por Serial en un archivo de pc, déjamelo en los comentarios. Que últimamente no ando muy fino 😉

Y bueno, ¡Nos vemos en las redes sociales!

[Total:7    Promedio:4.7/5]

 

Déjame un comentario que en el fondo soy buen chaval

  1. Rubén

    Responder

    • Responder

  2. Jose Salatino

    Responder

    • Responder

  3. Capi

    Responder

    • Responder

Deja un comentario