.
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??
ResponderEliminarPuedes pasarte por mi otro post => http://real2electronics.blogspot.co.uk/2011/09/arduino-adc-muestreo-alta-velocidad.html
EliminarEs 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
EliminarCambiándolo por Serial.write(';'); ya funciona ;)
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.
ResponderEliminarIgor,
ResponderEliminarAntes que nada felicitarte por tu excelente tutorial me ha servido mucho para el proyecto que estoy desarrollando, ya que puedo monitorear en linea la termocuplas que le he instalado a mi reactor para producir biogas. La unica pregunta que te haria y si los datos que grafico en tiempo real los puedo pasar a excel, gracias y saludos desde El Salvador.
Hola Carlos,
EliminarMuchas gracias por sus comentarios.
Si te fijas, estas grabando los datos en un fichero de texto (formato *.csv). Dicho archivo es el que "alimenta" la entrada de datos del KST. También podrías abrir dicho fichero con el Excel.
Recomiendo también la lectura de mi otro post => http://real2electronics.blogspot.co.uk/2011/09/arduino-adc-muestreo-alta-velocidad.html
Saludos,
Igor
Hola Igor,
EliminarGracias por tu pronta respuesta, respecto a tu otro tutorial esta muy interesante y creo que dedicare mi tiempo libre a leer todos tus tutoriales ya que como ingenierio quimico no tengo muchos conocimientos en estos temas y por eso que te repito que fue de muchisima ayuda tu post de graficar en linea.
Felicitaciones por tu trabajo y el de tus colaboradores.
Saludos.
Gracias por tu tutorial podrias por favor poner un esquema de la conexión del arduino, y estoy usando arduino UNO.
ResponderEliminarGracias
Hola amigo.
ResponderEliminarMuy pero muy bueno tu tutorial. Explicas todo muy bien.
Quisiera saber si hay alguna forma de hacer lo que tu haces con el Kst, pero conectando arduino a Matlab, y en especifico a Simulink.
Lo que pasa es que al conectar arduino a simulink me genera muchos problemas y quisiera lograr un muestreo de alta velocidad en simulink, como tu lo haces con kst.
Espero que me puedas ayudar...
Hola,
ResponderEliminarEstoy haciendo un datalog con un arduino uno y saco los datos con Realterm y KST en el ordenador. Al poco rato de empezar a crear los graficos en KST me aparece un mensaje que dice:
"Error while reading ASCII file"
"The file could not be read because not enough memory is available."
"Try setting a file buffer limit in the configuration options."
Que puede ser? como lo puedo solucionar?
Gracias
Se terminó tu memoria RAM
EliminarHola. Muy buen post. Intente hacerlo, me grafica correctamente, pero no lo hace en tiempo real. solo se actualiza la grafica si apreto -stop capture- y luego -start append- desde el real term. Tenes ieda que puede sucederme?
ResponderEliminarDesde ya gracias
Saludos, estoy igual que el comentario anterior como podria automatizar ese parametro
Eliminarencontre tambien que el kst 2 ya no existe esa opcion de actualizacion automatica, viene un icon de un ciclo verde si quieres actualizar asi, solo que despues de un rato al parecer se satura y ya no funciona...
Eliminarun saludo
Hola, antes que todo muchas gracias por tan buen aporte.
ResponderEliminarMi pregunta es ¿en que parte del programa controlo los intervalos de muestro? ¿como puedo saber cuales son los pasos de muestro? ¿debo ocupar interrupciones internas (timmer de arduino) si es que quiero distintos intervalos de muestreo?
Gracias de antemano.
J. Garcia