Programas de trazado de datos en serie


36

Necesito trazar datos en serie de Arduino.

Necesito soporte para:

  1. Varios formatos de datos (por ejemplo, con signo, sin signo, 8 bits, 16 bits);
  2. Traza varios datos en los mismos ejes;
  3. Exporta / Importa datos de archivos.

Como trazar datos en serie de Arduino es una necesidad común, mi pregunta es: ¿Qué programas / utilidades están disponibles para trazar datos en serie de Arduino que satisfagan las necesidades anteriores?

¿Cuáles son las ventajas / desventajas del método que ha sugerido?


Decidí volver a abrir con tu última edición. Tal como está esta pregunta, parece estar en el tema porque es específica. Seré claro para cualquiera (ya que no hay muchas preguntas de este tipo): si esto se sale demasiado del tema, es posible que deba intervenir. Sin embargo, la probabilidad de que eso ocurra es rara. :) @JRobert Si GnuPlot cumple con los requisitos de la pregunta, publíquelo.
Anonymous Penguin

1
La página "Interfaz con otro software" en el Arduino Playground muestra un montón de formas de trazar datos en serie de un Arduino a un iPhone, una PC con Windows, una PC con Linux, etc.
David Cary

Respuestas:


19

Hay algunas buenas aplicaciones para visualizar los datos en serie, que incluyen:

(Esta es una wiki comunitaria, puede expandir la lista).


Estoy confundido. Publiqué mi propia solución a continuación, pero ahora no estoy seguro de si no sería mejor editar tu publicación, ya que es una wiki. Qué piensas ?
Overdrivr

@Overdrivr Claro, ¡ve a extender esta wiki por el bien de los demás!
niutech

8

GnuPlot

Ventajas: es muy flexible, programable y disponible gratuitamente.

Desventajas: un poco complejo de aprender (pero descubrí cómo comenzar en unos minutos y bastante funcional en una o dos horas), se ejecuta en una ventana de terminal (si lo considera una desventaja).

Algo que encontré muy útil fue escribirlo para volver a cargar el archivo de registro de mi programa de terminal periódicamente, así que obtuve un gráfico dinámico a medida que avanzaba mi experimento.

Imagen de GnuPlot



Editar: Aquí está el script GnuPlot que lo traza:

#!/usr/local/bin/gnuplot -rv
# Note reverse video here ^^^   til I find a way to put it in the script

# gpFanCtl - Plots DiffThermo fan controller data (aloft, alow, Tdiff, fan-state).
# $Id: gpFanCtl,v 1.8 2014-04-28 09:40:51-04 jrobert Exp jrobert $

set terminal x11 1 noraise
set xtics 3600
set mxtics 4
set xdata time

set ytics 1 nomirror
set mytics 2

set y2range [0:3]
set y2tics 1
set my2tics 4

set grid
set ylabel 'Temperature, degC'
set y2label 'Tdiff, degC' textcolor rgb '#00CD63'

cd '/Users/jrobert/Desktop'
plot "Logfile.txt" using ($0*4):1 title "Aloft" with lines lc rgb "red",\
     "Logfile.txt" using ($0*4):2 title "Alow" with lines lc rgb "#3982FF",\
     "Logfile.txt" using ($0*4):3 title "Tdiff" with lines lc rgb "#00CD63" axis x1y2,\
     "Logfile.txt" using ($0*4):4 title "Fan" with lines lc rgb "orange" axis x1y2;
pause 4
refresh
reread

1
Esto se ve genial. ¿Podría agregar un código de demostración?
geometrikal

Pero traza los datos de Logfile.txt, no los datos en serie en tiempo real. ¿Cómo conectarlo a un puerto serie?
niutech

1
No, este script no es "en tiempo real", podría demorar hasta unos 4 segundos. Logfile.txt es la salida del archivo de captura de un programa de terminal. En mi caso, el sistema de recopilación de datos muestrea y registra cada 4 segundos y el script GnuPlot responde el archivo de registro cada 4 segundos. Esto es lo suficientemente dinámico para lo que estoy haciendo con él (monitoreo de la temperatura ambiente).
JRobert

7

Uso Matplotlib para cualquier trazado que necesite hacer.

No es específico de Arduino de ninguna manera, pero es un excelente kit de herramientas de trazado de Python .

He creado una serie de aplicaciones que trazan datos de una variedad de microcontroladores en tiempo real a un gráfico, pero realmente fue más un proceso de dos pasos: 1. Obtener datos del dispositivo a la computadora, 2. trazar datos en tiempo real .

Realmente, creo que deberías dividir tu pregunta en dos partes:

  • ¿Cómo se obtienen datos de un Arduino / Cualquier dispositivo serie en una computadora fácilmente?
  • ¿Qué es una buena biblioteca de trazado que es fácil de usar?

+1. ¿El video "Arduino en tiempo real trama Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] usa esa misma técnica?
David Cary

Sí. Utiliza una llamada que lee los datos de arduino en una variable de matlab, y luego una llamada que actualiza el diagrama de matlab con la variable de matlab.
Connor Wolf

Matplotlib es python, no matlab.
DaveP

No estoy de acuerdo con usted, esta pregunta no debe dividirse en 2. Existen soluciones (como la que publiqué a continuación) que se encargan de ambas, porque es molesto volver a activar la rueda para el monitoreo y control remoto de aplicaciones arduino, y también porque escribir código de Python para trazados en tiempo real en realidad está muy lejos de ser trivial. Las cosas se pueden hacer con matplotlib pero claramente hay mejores alternativas para eso, como pyqtgraph.
Overdrivr

Para la parte 1: obtener datos de Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (gratis). Hace todo lo que necesita y mucho más.

Otras características:

  • Acercar datos
  • Haga clic en los puntos de datos para ver los valores.
  • Enviar comandos de vuelta a Arduino
  • Ajustar el número total de puntos trazados
  • Posibilidad de mostrar cada canal en su propia trama autoescalada
  • Interpreta paquetes binarios, ASCII y personalizados.
  • El modo de demostración te permite jugar con funciones

ingrese la descripción de la imagen aquí


1
Buena respuesta, me gustó el diagrama de serie, encontró mi puerto COM y velocidad de transmisión automáticamente, solo tuve que cambiar de binario a CSV y aumentar a 3 canales (para un magnetómetro) y estaba trazando muy bien.
Hamish_Fernsby

Este es el más limpio y fácil de usar, pero desearía que hubiera un Mac Binary :)
lanzará

5

Respondiendo a mi propia pregunta aquí ... Uso el Panel de control de Bridge como se mencionó.

Ventajas: muchas características.

Desventajas: difícil de configurar e informes de sintaxis / error muy pobres.

Para usar: debe escribir los datos de Arduino sobre el puerto serie un byte a la vez. Para un tipo de datos int que se vería de la siguiente manera:

// RX8 [h=43] @1Key1 @0Key1
Serial.print("C");
Serial.write(data>>8);
Serial.write(data&0xff);

En Bridge, el comando para leer datos es:

RX8 [h=43] @1Key1 @0Key1

RX8 es el comando de lectura [h = 43] significa que el siguiente byte válido es "C" en ASCII, luego el byte superior de la clave1 y el byte inferior de la clave1

Se ve así en Bridge:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


5

Puedes probar el serialchart . Es un programa bastante directo. Hace exactamente lo que pediste. La única desventaja es que requiere datos en formato CSV (no cumple con el primer punto).

Captura de pantalla de la página del proyecto:

ejemplo


Intenté esto y encontré que era muy complicado trabajar, no hay configuración predeterminada, no se escala automáticamente, después de media hora con la sintaxis, todavía no tenía un gráfico solo en línea recta, así que me di por vencido y usé SerialPlot, que trabajó en unos pocos minutos, solo tenía que especificar el texto ASCII y el número de canales.
Hamish_Fernsby

4

Quizás te interese Telemetry Ver en Github . Es un protocolo de comunicación, muy fácil de usar, con una interfaz limpia, que permite la comunicación bidireccional con dispositivos Arduino / Mbed.

Si no desea leer esta larga publicación, vea un tutorial de todas las características increíbles que contiene.

El poder de esta biblioteca proviene de la interfaz de línea de comandos del escritorio (que no requiere habilidades de programación en python).

Es capaz de abrir trazados de alto rendimiento (mucho más altos que lo que se puede hacer con matplotlib) simplemente escribiendo un comando .

El protocolo admite estructuras de datos complejas . Por ahora, se pueden enviar matrices y matrices dispersas desde la placa integrada.

Las gráficas abiertas desde la interfaz de línea de comando comprenden el tipo de datos, y para las matrices, en lugar de trazar cada muestra en función del tiempo, la muestra se trazará en función de su propio índice.

En un futuro cercano, se planea agregar soporte para coordenadas espaciales (datos xyz), que le permitirán trazar datos espaciales de inmediato. Una vez más, las tramas resolverán todo, trazarán sus datos en espacio 2D o 3D y podrá concentrarse en desarrollar su aplicación.

Creo que esas características son simplemente únicas para tal proyecto.

Pylelemetry CLI Versión PyPI

Una vez instalado con pip, la línea de comando se puede iniciar con

pytlm

A continuación, puede connect, ls(lista) recibió los temas, printlos datos recibidos sobre un tema, pub(publicar) sobre un tema, o una abierta plotsobre un tema para mostrar los datos recibidos en tiempo real,

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Empezar

Wiki

PD: soy el autor.

Lo desarrollé porque no pude encontrar una solución que me permitiera:

  • escribir rápidamente scripts de PC para controlar un Arduino
  • depurar rápidamente
  • trazar datos complejos (no solo un valor variable en el tiempo)

todo lo anterior sin usar soluciones patentadas o GUI hinchadas.

Usando esta biblioteca, el tiempo para configurar una comunicación entre Arduino y la PC pasó generalmente de medio día a 5 minutos.


PD: el registro de los datos del puerto serie en los paquetes de Python (datos sin procesar y datos decodificados) también es totalmente compatible. Tengo la intención de usarlo para implementar una función de reproducción fuera de línea (simular el flujo de datos en serie)
Overdrivr

4

Nadie había mencionado el procesamiento, que es súper versátil. Puede hacer mucho más que solo trazar, pero si eso es todo lo que quiere hacer, puede usar la biblioteca gwoptics; conecte Arduino y Processing como se indica aquí .


2

Hice una herramienta equivalente en python que imprime datos en tiempo real desde el acelerómetro ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

puede ser útil para alguien

ingrese la descripción de la imagen aquí

Simplemente elija el com serial y la velocidad y envíe los datos seriales en el siguiente formato:

  • 3 entradas, cada entrada es un 2 bytes (complemento de dos)
  • 6 bytes separados por un espacio
  • el paquete es una cadena terminada por '\ n'

Podría adaptarse fácilmente para cambiar este formato


¿Puede explicar cómo usar esto y cuáles son sus ventajas y desventajas?
El chico con el sombrero

2

Puede usar MATLAB Student Edition , esto también puede ahorrarle tiempo para análisis adicionales. Simplemente puede abrir el puerto COM en MATLAB y trazar la señal recibida y / o guardar la señal en el espacio de trabajo o lo que sea. ¡MATLAB hace que todo sea fácil!


2
¡Bienvenido a Arduino SE! ¿Puede editar su respuesta para agregar más información que describa cómo se ajusta a las necesidades del OP y tal vez un poco más de información como un enlace o una foto? ¡Gracias!
Anonymous Penguin

Buena respuesta, no habría pensado en usar Matlab, hay un hilo SO aquí al respecto stackoverflow.com/questions/19483098/…
Hamish_Fernsby

2

El formato CSV es más versátil para cualquier dato (firmado / no firmado, varios tamaños y precisión).

La herramienta multiplataforma (escrita en Java / Scala) Scsvlog puede recibir / analizar cadenas CSV desde el puerto / socket serie, mostrar valores y dibujar gráficos (hasta 8).


La herramienta ya no se puede encontrar ahora, desafortunadamente, el enlace original está muerto y parece que no puedo encontrar ninguna copia.
Арсений Пичугин

2

Puede probar el software que desarrollé para esa propuesta. Su objetivo es ser fácil de usar. Consulte SerialGraphicator : cliente de puerto serie gratuito de código abierto capaz de graficar valores que se reciben en formato JSON.


1

Si bien no lo he usado yo mismo, "rqt_plot" que se ejecuta en la PC parece ser una forma popular de trazar datos en una PC que proviene de un puerto serie de un Arduino que ejecuta un boceto que incluye la biblioteca rosserial_arduino o la biblioteca ros_arduino_bridge .


1

Sé que esta es una pregunta muy antigua, pero recientemente creé una aplicación para Mac que resuelve muy bien este problema. Puede encontrar más información al respecto en www.bloonapp.com. Hay algunos videos de demostración en el sitio web que puede consultar.ingrese la descripción de la imagen aquí


1
A partir del 1 de agosto de 18 este sitio web está muerto.
Dan

1

Sé que probablemente buscabas una salida de GUI más avanzada, pero logré replicar una tarea que normalmente se haría con un osciloscopio: Arduino Serial Plotter de salida

usando el plotter en serie en el IDE de Arduino y un módulo ADC que puede obtener por $ 3 en eBay. Admito que es un poco tosco, pero puede valer la pena jugar con la herramienta por un tiempo, antes de invertir en soluciones de nivel Python / Matlab / ect. Fue extremadamente fácil de usar. No tomaría mucho agregar la grabación de la tarjeta SD al proceso.

Ver: https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/


0

Visor de telemetría

Ventajas:

  1. Fácil de usar
  2. IU intuitiva y flexible
  3. Código abierto y gratuito
  4. Diferentes tipos de gráficos
  5. Muy rápida tasa de actualización de gráficos

Desventajas

  1. Desarrollo detenido
  2. El formato de datos binarios aún no está completo.
  3. Controles de gráficos primitivos como zoom, captura de pantalla y ... ingrese la descripción de la imagen aquí

0

Serial Plotter es un programa simple que hice con Electron que recibe datos en el siguiente formato: data1,data2,timestamp;y los convierte en un gráfico en tiempo real.

ingrese la descripción de la imagen aquí


0

Casi útil Necesita:

  1. registrar datos en serie en un archivo O
  2. graficando desde un archivo y actualizando cada milisegundos xxx.

Live Graph es una mejor opción y la uso junto con Tera Term, que obtiene los datos a través del enlace USB / serie (y los guarda en un archivo de registro que luego sondea Live Graph).

Live Graph es un poco defectuoso cuando almacena datos en caché y no he encontrado una manera de configurar una ventana móvil para mostrar los resultados. Además, mostrar múltiples gráficos requiere una escala manual, pero a pesar de todo esto, sigue siendo muy útil. Está escrito en Java, por lo que necesitará el JRE. Prefiero esto a tener que instalar Python como lo hacen algunos de los otros programas de gráficos. Otro inconveniente es que abre 4 ventanas diferentes, lo cual es un dolor cuando quiero cambiar entre él y Tera Term.

Todavía tengo que encontrar el software que es

  1. Un ejecutable (.EXE) para que no tenga dependencia externa
  2. Incluye un emulador de terminal o un registrador de datos en serie.
  3. Registra datos en serie
  4. Grafica varios elementos de un CSV
  5. Permite CSV Y datos delimitados por tabuladores (que es mucho más fácil de leer a medida que se desplaza mientras se monitorea simultáneamente el gráfico.
  6. Permite configurar diferentes escalas para cada gráfico superpuesto sin tener que escalar todo a [0..1] o configurar un multiplicador, es decir, permitir configurar un rango [y0..y1] para cada elemento graficado.

1
¡Bienvenido a Arduino SE! Su respuesta es informativa, pero ¿podría mejorar el formato de la respuesta utilizando la guía de rebajas que puede ver presionando el ?botón en el editor.
Avamander

0

Estoy usando processing.org para trazar en serie desde Arduino. Fue la única aplicación que pude encontrar que me permitió hacer histogramas reales (por ejemplo, un millón de eventos en cien contenedores) y mostrar varios números de información además de la sigma media para cada canal. Dos problemas principales: A) resultó estar basado en Java sin bytes sin firmar B) sincronizar ig con la entrada requerida buffer circular y marcadores en los datos. (alta velocidad, sin apretón de manos)


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.