.
Veamos la forma más sencilla (que he encontrado hasta ahora) de graficar datos recibidos de nuestro Arduino en "real time". Tiene la ventaja sobre excel, que está preparado para trabajar con gran cantidad de datos, ya que excel está limitado a 32.000 puntos en gráficos 2D.
Otra gran ventaja... es gratuito!! Se encuentra disponible para entorno Windows y Linux.
Para ello nos ayudaremos de dos softwares gratuitos:
- Realterm => http://realterm.sourceforge.net/
- KST => http://kst.kde.org/ (Linux y Windows)
Según la propia web: " Kst es la herramienta más rápida para graficar gran volumen de datos en real-time y con funcionalidades básicas para el análisis."
Gracias a KST, dispondremos de posibilidad de disponer varias vetanas, múltiples gráficas, PSD, zoom, histogramas, ...
Ejemplo demo de pantalla (extraido de la web de Kst):
La idea es:
1) Usar Realterm para capturar todo lo recibido por el puerto serie a un archivo de texto.
2) Plotear dicho archivo de texto con la ayuda de KST.
En Realterm sólo tenemos que abrir el puerto serie correnspondiente a nuestro Arduino.
Mi programa de ejemplo de Arduino, esta preparado para enviar datos de forma continua, cuando se recibe una "C" y detener el envio, cuando se recibe una "F".
--------- CÓDIGO ARDUINO ---------
extern volatile unsigned long timer0_overflow_count; float fanalog0; int analog0; unsigned long tiempo; byte serialByte; void setup() { Serial.begin(9600); Serial.println("Empezamos..."); } void loop() { while (Serial.available()>0){ serialByte=Serial.read(); if (serialByte=='C'){ while(1){ analog0=analogRead(0); // Convierto a milivoltios fanalog0=(analog0)*(5000.0/1023); // Recojo ticks del timer0 => 1 tick cada 4 us (usado en millis ) tiempo=(timer0_overflow_count << 8) + TCNT0; // Convierto a us tiempo=tiempo*4; //Lo envio para simular archivo tipo *.csv Serial.print(tiempo); Serial.print(';',BYTE); Serial.println(fanalog0,DEC); if (Serial.available()>0){ serialByte=Serial.read(); if (serialByte=='F') break; } } } } }--------- FIN DEL CODIGO ---------
Por lo que en la pestaña Send, le enviaremos el caracter ASCII => C
Veremos como empezamos a ver en la parte superior los datos recibidos.
Después en la pestaña Capture, seleccionar la ruta del archivo donde se capturan los datos y pulsamos Start Overwrite. Si Direct Capture está seleccionado, dejaremos de ver los datos recibidos (acelera el proceso).
(click sobre la imagen para ver en tamaño completo)
Ahora con el archivo creado y actualizandose con los datos recibidos, sólo nos queda irnos a Kst.
Alli, pulsamos sobre Data Wizard y elegimos la ruta donde se encuentra nuestro archivo.
En Configure, elegimos cual es nuestro limitador de columnas, en mi ejemplo " ; ".
(click sobre la imagen para ver en tamaño completo)
En las siguientes pantallas, configuramos que queremos crear una gráfica siendo X la primera columna (tiempo en us) e Y la segunda columna (mV entrada analógica 0).
Ya tenemos nuestro gráfico!!! el cual se irá actualizando a la medida que se vayan recibiendo nuevos datos (hay un pequeño retraso, no es instantaneo).
A continuación, un ejemplo de una señal capturada de un potenciómetro, para realizar este pequeño tutorial.
(click sobre la imagen para ver en tamaño completo)
Podremos usar Kst para ver los datos en real-time ó abrir datos grabados anteriormente.
Veamos un video demostrativo:
Espero que sea de utilidad este mini-tutorial.
.

Hola
ResponderEliminarfelicidades por esta buena iniciativa, Me preguntaba que version del kst has utilizado, pq la que he bajado no me permite seleccionar el archivo de datos, :-S
Kst v2.0
ResponderEliminar¿Usas versión de linux o windows? Sólo he probado en win.
Saludos
hola como has hecho que el kst lea continuamente sin tocar nada?¿
ResponderEliminarExcelente entrada.
ResponderEliminarEstoy intentando capturar los datos del puerto serie en linux con la ayuda de ttylog, pero no consigo escribir en un archivo.
Como lo haces tu?
Gracias y un saludo
yo ya e probado en linux y pues...funciona igual jeje por si alguien le interesa, me parece muy bien que ahora este esto en windows... jejeje sin discriminar claro =)... felicidades
ResponderEliminar¿Cómo puedo visualizar siempre los 20 últimos valores?
ResponderEliminarNo se cómo hacerlo, supongo que habrá que tocar en Edit Plot>Range y en expression, pero no se cómo se utilizan las expresiones, no me funciona nada de lo que pongo.
Gracias!
en linux como haces el archivo que va a leer kst??
ResponderEliminarEs un trabajo muy bueno el que estan haciendo muchachos.
ResponderEliminardesde Verona - roberto
info@termovisione.eu
mil bendiciones para usted, gracias x compartir sus conocimientos, esto es de mucha ayuda y evita que utilice excel para cada proyecto de control de mis cursos de ingenieria, "el hombre es libre el conocimiento es libre"
ResponderEliminarHola, gracias por el aporte. La verdad soy nuevo en esto del Arduino. Pero tengo una duda, ¿para que funciona el while (1). Espero alguien me pueda ayudar. Gracias
ResponderEliminarLo que hace es no salir nunca del while, ya que siempre la condicion es TRUE (1). Es decir, es un bucle infinito.
EliminarME SALE ERROR EN EL BYTE
ResponderEliminarSerial.print(';',BYTE);
LA PALABRA CLAVE /BYTE/ NO ESTA SOPORTADA
ayuda porfavor , necesito para un trabajo de la universidad
A partir de la versión 1.0, no está soportado BYTE. Puedes ojear la info en la web de Arduino sobre Serial.print y Serial.write.
EliminarSaludos
Igor
mismo error, no me resulta nada por eso :/
EliminarDescarga cualquier version de IDE Arduino que no comienze con 1, ejemplo: 1.0.3, 1.0.1, descargate cualquiera que sea 0022, 0023 etc... con esto solucionas el error del byte no soportado
Eliminarme preguntaba si podria leer dos o mas valores por separado , por ejemplo dos o mas sensores . gracias
ResponderEliminarSi podrías, cada columna es un parámetro diferente.
EliminarDisculpa cómo se le puede hacer para que kst lea los datos continuamente como en tu video, ya que solo me grafica los datos que se encuentran en el txt al momento de crear el grafico, muchas gracias.
ResponderEliminar