ÍNDICE DE CONTEÚDO
Neste artigo veremos como usar o SerialPlot e através dele plotar gráficos com os dados vindos pela porta serial.
Quantas vezes não nos deparamos com a necessidade de visualizar os dados aquisitados por um microcontrolador. Em muitos casos é usado um terminal serial conhecido para visualizar os dados aquisitados, porém os dados chegam até nós de uma forma bruta e fica difícil acompanhar a mudança do sinal ao longo do tempo. Algumas ferramentas ainda nos dão a possibilidade de gravar os dados na forma de log, como é o caso do moserial (terminal serial para Linux).
Após receber e salvar os dados, acabamos os importando e os plotando usando uma ferramenta Excel, planilha Google, etc. Resumindo, não conseguimos aquisitar, plotar e visualizar a mudança de sinal em tempo real. É neste momento que entra o SerialPlot!
O SerialPlot é um projeto open source implementado em C++, criado em Qt, que pode ser instalado tanto no Windows quanto numa distribuição Linux. O SerialPlot aceita três tipos diferentes de entrada de dados:
- Fluxo binário simples, suporta formatos numéricos diferentes (unsigned / signed – 8/16/32 bits e float);
- Dados ASCII no formato CSV;
- Formato de quadro personalizado definido pelo usuário.
Ele ainda permite enviar mensagens e gravar os dados aquisitados. Mensagens recebidas fora do formato esperado pelo SerialPlot são exibidas na aba de log.
Instalação no Windows
Instalação no Ubuntu/Linux
1 2 3 |
$ sudo add-apt-repository ppa:hyozd/serialplot $ sudo apt-get update $ sudo apt-get install serialplot |
Montagem dos Frames no SerialPlot
O formato ASCII é o mais simples de ser usado. A separação dos dados se dá pelo caractere “vírgula” e o caracter ‘\n’ indica o final do frame de dados enviados.
A rotina abaixo mostra como o frame de dados deve ser montado.
1 2 3 4 5 6 |
uint8_t payload[20]; uint16_t len; len = sprintf(payload, "%.2f,%.2f\n", ad0, ad1); HAL_UART_Transmit(&huart1, payload, len); |
Frame enviado:
Dado 1 |
Separador |
Dado 2 |
Fim de frame | ||||||
0 |
. |
3 |
5 |
, |
4 |
. |
7 |
2 |
‘\n’ |
É importante a presença do caractere ‘\n’ no final do frame.
Configurando o SerialPlot
Na aba “Port” é feita toda a configuração da comunicação serial.
Na aba “Data Format” indicaremos quantos dados diferentes nosso frame contém e o formato que o dado está sendo enviado. Neste exemplo estamos usando o formato ASCII e estamos enviando 2 dados diferentes. A ferramenta SerialPlot consegue plotar até 32 dados diferentes. No formato ASCII não é preciso se preocupar com o formato no qual os dados estão sendo enviados (float, uint32, uint16, etc), somente tenha certeza que o caractere vírgula está sendo usado para separar os dados. Existe a possibilidade de você usar os formatos “Simple Binary” e “Custom Frame”, mas estes são utilizados para casos muito específicos onde você quer receber dados pelo número de bytes da variável ou até mesmo aplicar um filtro para as mensagens que o SerialPlot deve plotar.
Na apa “Plot” podemos customizar algumas coisas, como cor e a legenda do sinal.
Na aba “Record” é possível salvar dados.
Há ainda uma aba para enviar dados pela serial ao dispositivo (o uso do caractere ‘\n’ neste caso vai depender da sua aplicação).
Resultado Final
Saiba mais
Usando a porta serial em Node.js
Comunicação Serial com Intel 8051
Conclusão
Neste artigo apresentamos o programa open source SerialPlot e mostramos o necessário para instalar e configurar a ferramenta.
A grande vantagem de usar este software é poder ver e acompanhar a mudança de um sinal em tempo real, aplicar zoom, salvar os dados aquisitados, atribuir legendas e cores diferentes para cada sinal. Caso você queira customizar ou até mesmo contribuir com o desenvolvimento dele, segue abaixo o link com o código fonte.
Desvantagens: É preciso lembrar que usar a porta serial do microcontrolador para debug de sinais críticos não é uma prática recomendada, portanto usar esta ferramenta nestes tipos de casos poderá não ilustrar fielmente o comportamento de seu sinal.
Parabéns, ja cansei de procurar isso ai, inclusive acabei montando uma rotina em matlab para quebrar o galho
Parabéns Jorge,
Muito bom!!! parabéns
Muito bom principalmente pelo numero de configuração. Uma opção rápida é o Serial Monitor da IDE Arduino, mas não tem nenhuma opção de configuração
Beleza !!! ? ótima informação!!!