Programas de plotagem de dados seriais


36

Preciso plotar dados seriais do Arduino.

Eu preciso de suporte para:

  1. Vários formatos de dados (por exemplo, assinado, não assinado, 8 bits, 16 bits);
  2. Plota vários dados nos mesmos eixos;
  3. Exporta / importa dados de arquivo.

Como plotar dados seriais do Arduino é uma necessidade comum, minha pergunta é: Quais programas / utilitários estão disponíveis para plotar dados seriais do Arduino que atendam às necessidades acima?

Quais são as vantagens / desvantagens do método que você sugeriu?


Decidi reabrir com sua última edição. Como esta pergunta está, parece estar no tópico porque é específica. Serei claro para qualquer pessoa (já que não há muitos desses tipos de perguntas): se isso sair muito do tópico, talvez eu precise intervir. No entanto, a probabilidade de isso acontecer é rara. :) @JRobert Se o GnuPlot atender aos requisitos da pergunta, publique-o.
Anonymous Penguin

11
A "interface com outros Software" página no Arduino Playground mostra um monte de maneiras para plotar dados seriais de um Arduino para um iPhone, um PC com Windows, um PC Linux, etc.
David Cary

Respostas:


19

Existem algumas boas aplicações para visualizar os dados seriais, incluindo:

  • MegunoLink (US $ 29,95; Lite grátis) - plotagem, registro, programação, relatórios e muito mais.

    MegunoLink

  • MakerPlot (US $ 39) - plotagem digital e analógica, monitoramento, interfaces personalizadas e muito mais.

    MakerPlot

  • ArduinoPlot (grátis) - plotagem simples.

    ArduinoPlot

  • arduino-plotter (grátis) - plotagem fácil e leve, com suporte para todos os tipos primitivos

    arduino-plotter

  • Bridge Control Panel (gratuito) - registro, plotagem e muito mais.

    Painel de controle da ponte

  • RealtimePlotter (gratuito) - plotagem de dados de 6 canais.

    RealtimePlotter

  • Plotter de dados seriais em tempo real (gratuito) - plotagem de dados CSV, registro e muito mais.

  • SimPlot (gratuito) - plotagem de 4 canais.

    SimPlot

  • Plotter serial do Arduino (gratuito) - construído no Arduino Editor em Ferramentas> Plotador serial .

    Plotter Serial Arduino

(Este é um wiki da comunidade, você pode expandir a lista.)


Estou confuso. Postei minha própria solução abaixo, mas agora não tenho certeza se não seria melhor editar sua postagem, pois é um wiki. O que você acha ?
Overdrivr

@Overdrivr Claro, vá estender este wiki para o bem dos outros!
Niutech 01/03

8

GnuPlot

Vantagens: É muito flexível, programável e disponível gratuitamente.

Desvantagens: Um pouco complexo de aprender (mas eu descobri como começar em alguns minutos e bastante funcional em uma ou duas horas), é executado em uma janela do terminal (se você considera isso uma desvantagem).

Algo que achei muito útil foi criar um script para recarregar o arquivo de log do meu programa de terminal periodicamente, para que eu tenha um gráfico dinâmico à medida que minha experiência progride.

Imagem do GnuPlot



Edit: Aqui está o script GnuPlot que o plota:

#!/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

11
Isso parece ótimo. Você poderia adicionar algum código de demonstração?
geometrikal

Mas ele plota os dados do Logfile.txt, não os dados seriais em tempo real. Como conectá-lo a uma porta serial?
Niutech

11
Não, esse script não é "em tempo real" - pode demorar até 4 segundos. Logfile.txt é a saída do arquivo de captura de um programa do terminal. No meu caso, o sistema de coleta de dados coleta e registra a cada 4 segundos e o script GnuPlot substitui o arquivo de log a cada 4 segundos. Isso é dinâmico o suficiente para o que estou fazendo com ele (monitorando a temperatura da sala).
JRobert

7

Eu uso o Matplotlib para qualquer plotagem que eu precise fazer.

Não é específico para o arduino, mas é um excelente kit de ferramentas de plotagem Python .

Eu construí uma série de aplicativos que plotam dados de vários microcontroladores em tempo real para um gráfico, mas esse foi realmente um processo de duas etapas: 1. Colocar dados do dispositivo no computador, 2. plotar dados em tempo real .

Realmente, acho que você deve dividir sua pergunta em duas partes:

  • Como você obtém dados de um dispositivo serial Arduino / Any em um computador facilmente.
  • O que é uma boa biblioteca de plotagem fácil de usar.

+1. O vídeo "Arduino traça em tempo real o Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] usa a mesma técnica?
David Cary

Sim. Ele usa uma chamada que lê os dados do arduino em uma variável matlab e, em seguida, uma chamada que atualiza o gráfico matlab com a variável matlab.
Connor Wolf

Matplotlib é python, não matlab.
DaveP

Eu discordo de você, esta questão não deve ser dividida em 2. Existem soluções (como a que eu postei abaixo) que cuidam de ambas, porque é irritante reiventar a roda para monitoramento e controle remoto de aplicativos do arduino, e também porque escrever código python para gráficos em tempo real é realmente muito longe de trivial. É possível fazer coisas com o matplotlib, mas claramente existem alternativas melhores para isso, como pyqtgraph.
Overdrivr

Para a parte 1: obtendo dados do Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (grátis). Faz tudo o que você precisa e muito mais.

Outras características:

  • Ampliar os dados
  • Clique nos pontos de dados para ver os valores
  • Enviar comandos de volta ao Arduino
  • Ajustar o número total de pontos plotados
  • Capacidade de mostrar cada canal em seu próprio gráfico em escala automática
  • Interpreta pacotes binários, ASCII e personalizados
  • O modo de demonstração permite que você jogue com recursos

insira a descrição da imagem aqui


11
Boa resposta, gostei do serialplot, ele encontrou minha porta COM e taxa de transmissão automaticamente, só tive que mudar de binário para CSV e aumentar para 3 canais (para um magnetômetro) e ele estava tramando muito bem.
Hamish_Fernsby

Este é o mais limpo e fácil de usar - mas eu gostaria que houvesse um binário mac :)
willwade

5

Respondendo à minha própria pergunta aqui .. Eu uso o Bridge Control Panel como mencionado.

Vantagens: Muitos recursos.

Desvantagens: Configuração complicada e relatórios de sintaxe / erro muito ruins.

Para usar: Você precisa gravar os dados do Arduino na porta serial, um byte de cada vez. Para um tipo de dados int com a seguinte aparência:

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

No Bridge, o comando para ler dados é:

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

RX8 é o comando de leitura [h = 43] significa que o próximo byte válido é "C" em ASCII, em seguida, o Byte Alto da Chave1 e o Byte Baixo da Chave1

Parece assim no Bridge:

insira a descrição da imagem aqui

insira a descrição da imagem aqui


5

Você pode tentar o serialchart . É um programa bastante direto. Faz exatamente o que você pediu. A única desvantagem é que requer dados no formato CSV (não atende ao primeiro ponto).

Captura de tela da página do projeto:

exemplo


Eu tentei isso e achei muito desajeitado trabalhar, sem configuração padrão, não é dimensionada automaticamente, depois de meia hora alterando a sintaxe, eu ainda não tinha um gráfico apenas em linha reta, então desisti e usei o SerialPlot, que funcionou em alguns minutos, bastava especificar texto ascii e número de canais.
Hamish_Fernsby

4

Você pode estar interessado em Telemetry Veja no Github . É um protocolo de comunicação, altamente simples de usar, com uma interface limpa, que permite a comunicação bidirecional com dispositivos Arduino / Mbed.

Se você não quiser ler este longo post, consulte Um passo a passo de todos os recursos impressionantes

O poder desta biblioteca vem da interface da linha de comando da área de trabalho (que não requer habilidades de programação em python).

Ele é capaz de abrir gráficos de alto desempenho (muito acima do que pode ser feito com o matplotlib) apenas digitando um comando .

O protocolo suporta estruturas de dados complexas . Por enquanto, matrizes e matrizes esparsas podem ser enviadas da placa incorporada.

Os gráficos abertos a partir da interface da linha de comando compreendem o tipo de dados e, para matrizes, em vez de plotar cada amostra versus tempo, a amostra será plotada em relação ao seu próprio índice.

Em um futuro próximo, está planejado adicionar suporte para coordenadas espaciais (dados xyz), que permitirão plotar dados espaciais imediatamente. Mais uma vez, as plotagens descobrirão tudo, plotarão seus dados no espaço 2D ou 3D e você poderá se concentrar no desenvolvimento do seu aplicativo.

Acredito que esses recursos sejam simplesmente únicos para esse projeto.

CLI de Pytelemetry Versão do PyPI

Depois de instalada pip, a linha de comando pode ser iniciada com

pytlm

Então você pode connect, ls(lista) recebeu tópicos, printos dados recebidos em um tópico, pub(publicar) em um tópico, ou aberto um plotem um tópico para exibir dados recebidos em tempo real

insira a descrição da imagem aqui

insira a descrição da imagem aqui

iniciar

Wiki

PS: Eu sou o autor.

Eu o desenvolvi porque não consegui encontrar uma solução que me permitisse:

  • escreva rapidamente scripts de PC para controlar um Arduino
  • depurar rapidamente
  • plotar dados complexos (não apenas um valor variável no tempo)

tudo isso sem usar soluções proprietárias ou GUIs inchadas.

Usando esta biblioteca, o tempo para configurar uma comunicação entre o Arduino e o PC passou de meio dia para 5 minutos.


PS: o log dos dados da porta serial nos pacotes python (dados brutos e dados decodificados) também é totalmente suportado. Eu pretendo usá-lo para implementar uma função desligada repetição (fluxo de dados seriais simular)
Overdrivr

4

Ninguém mencionou o Processing, que é super versátil. Você pode fazer muito mais do que apenas plotar, mas se isso é tudo o que você quer fazer, pode usar a biblioteca gwoptics; conecte o Arduino e o Processamento conforme indicado aqui .


2

Eu fiz uma ferramenta equivalente em python que imprime dados em tempo real a partir do acelerômetro ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

pode ser que seja útil para alguém

insira a descrição da imagem aqui

Basta escolher o serial com e speed e enviar os dados seriais no seguinte formato:

  • 3 entradas, cada entrada é de 2 bytes (complemento de dois)
  • 6 bytes separados por um espaço
  • o pacote é uma string terminada por '\ n'

Pode ser facilmente adaptado para alterar este formato


Você pode explicar como usar isso e quais são as vantagens e desvantagens disso?
O cara com o chapéu

2

Você pode usar o MATLAB Student Edition . Isso também poupa seu tempo para análises adicionais. Você pode simplesmente abrir a porta COM no MATLAB e plotar o sinal recebido e / ou salvar o sinal na área de trabalho ou o que for. O MATLAB facilita tudo!


2
Bem-vindo ao Arduino SE! Você pode editar sua resposta para adicionar mais informações descrevendo como ele se encaixa nas necessidades do OP e talvez outras informações, como um link ou uma foto? Obrigado!
Anonymous Penguin

Boa resposta, não teria pensado em usar Matlab, há um fio Então aqui sobre isso stackoverflow.com/questions/19483098/...
Hamish_Fernsby

2

O formato CSV é mais versátil para qualquer dado (assinado / não assinado, vários tamanhos e precisão).

Ferramenta de plataforma cruzada (escrita em Java / Scala) O Scsvlog pode receber / analisar seqüências de caracteres CSV da porta / soquete serial, mostrar valores e desenhar gráficos (até 8).


Infelizmente, a ferramenta não pode mais ser encontrada agora - o link original está morto e não consigo encontrar nenhuma cópia.
Арсений Пичугин

2

Você pode experimentar o software que desenvolvi para essa proposta. Destina-se a ser fácil de usar. Consulte SerialGraphicator - Cliente de porta serial livre de código aberto capaz de valores gráficos que são recebidos no formato JSON.


1

Embora eu não o tenha usado, "rqt_plot" em execução no PC parece ser uma maneira popular de plotar dados em um PC que vem através de uma porta serial de um Arduino executando um esboço que inclui a biblioteca rosserial_arduino ou a biblioteca ros_arduino_bridge .


1

Sei que essa é uma pergunta muito antiga, mas recentemente criei um aplicativo para Mac que resolve esse problema muito bem. Você pode encontrar mais informações sobre isso em www.bloonapp.com. Existem alguns vídeos de demonstração no site que você pode conferir.insira a descrição da imagem aqui


11
Em 1º de agosto de 1818, este site estava morto.
Dan

1

Eu sei que você provavelmente estava atrás de uma saída GUI mais avançada, mas consegui replicar uma tarefa que normalmente seria feita com um osciloscópio: Saída do plotador serial Arduino

usando a plotadora serial no Arduino IDE e um módulo ADC, você pode obter US $ 3 no eBay. Admito que é um pouco grosseiro, mas pode valer a pena brincar com a ferramenta por um tempo, antes de investir em soluções no nível Python / Matlab / ect. Foi extremamente fácil de usar. Não seria preciso muito para adicionar a gravação do cartão SD ao processo.

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


0

Telemetry Viewer

Vantagens:

  1. Fácil de usar
  2. UI intuitiva e flexível
  3. Código aberto e gratuito
  4. Diferentes tipos de gráficos
  5. Taxa de atualização de gráfico muito rápida

Desvantagens:

  1. Desenvolvimento interrompido
  2. O formato de dados binários ainda não está completo.
  3. Controles primitivos de gráficos como zoom, captura de tela e ... insira a descrição da imagem aqui

0

Serial Plotter é um programa simples que criei com a Electron que recebe dados no seguinte formato: data1,data2,timestamp;e os converte em um gráfico em tempo real.

insira a descrição da imagem aqui


0

Quase útil. Precisa:

  1. registrando dados seriais em um arquivo OU
  2. gráficos de um arquivo e atualização a cada xxx milissegundos.

O Live Graph é uma opção melhor e eu o uso em conjunto com o Tera Term, que obtém os dados por meio do link USB / serial (e o salva em um arquivo de log que, em seguida, o Live Graph pesquisa).

O Live Graph é um pouco problemático ao armazenar dados em cache e não encontrei uma maneira de definir uma janela móvel para exibir resultados. Além disso, mostrar vários gráficos requer dimensionamento manual, mas apesar de tudo isso, ainda é muito útil. Está escrito em java, então você precisará do JRE. Eu prefiro isso do que ter que instalar o python como alguns outros programas gráficos. Outra desvantagem é que ele abre 4 janelas diferentes, o que é uma dor quando eu quero alternar entre ele e Tera Term.

Ainda estou para encontrar um software que seja

  1. Um executável (.EXE), portanto, não possui dependência externa
  2. Inclui um emulador de terminal ou registrador de dados serial
  3. Registra dados seriais
  4. Representa graficamente vários itens de um CSV
  5. Permite dados delimitados por tabulações e CSV AND (que é muito mais fácil de ler à medida que rola ao longo do monitor enquanto monitora simultaneamente o gráfico.
  6. Permite definir escalas diferentes para cada gráfico sobreposto, sem ter que dimensionar tudo para [0..1] ou configurar um multiplicador, ou seja, permitir definir um intervalo [y0..y1] para cada item representado no gráfico.

11
Bem-vindo ao Arduino SE! Sua resposta é informativa, mas você poderia melhorar a formatação da resposta usando o guia de descontos que pode visualizar pressionando o ?botão no editor.
Avamander

0

Estou usando processing.org para plotagem serial do Arduino. Foi o único aplicativo que pude encontrar que me permitiu fazer histogramas reais (por exemplo, um milhão de eventos em cem caixas) e exibir vários números de informações, além de significar sigma para cada canal. Dois grandes problemas: A) acabou sendo baseado em Java sem bytes não assinados; B) sincronizou com entrada necessária de buffer circular e marcadores nos dados. (alta velocidade, sem aperto de mão)


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.