シリアルデータプロットプログラム


36

Arduinoからシリアルデータをプロットする必要があります。

次のサポートが必要です。

  1. さまざまなデータ形式(たとえば、符号付き、符号なし、8ビット、16ビット)。
  2. 同じ軸に複数のデータをプロットします。
  3. ファイルデータをエクスポート/インポートします。

Arduinoからシリアルデータをプロットすることは一般的なニーズであるため、私の質問は次のとおりです。

あなたが提案した方法の利点/欠点は何ですか?


最後の編集で再開することにしました。この質問が立っているように、それは特定ものであるため、話題になっているようです。私は誰にでもはっきりします(これらのタイプの質問はそれほど多くないので):これがトピックから外れすぎると、私は介入しなければならないかもしれません。しかし、そのようなことが起こる可能性はまれです。:) @JRobert GnuPlotが質問の要件を満たしている場合は、投稿してください。
匿名のペンギン14

1
「その他のソフトウェアとのインタフェース」 Arduinoの遊び場上のページには、などiPhone、WindowsのPC、LinuxのPCへのArduinoからのシリアルデータをプロットする方法の束を示す
デヴィッド・カリー

回答:


19

シリアルデータの視覚化には、次のような優れたアプリケーションがあります。

  • MegunoLink(29.95ドル、Lite無料)-プロット、ロギング、プログラミング、レポートなど。

    MegunoLink

  • MakerPlot($ 39)-デジタルおよびアナログのプロット、監視、カスタムインターフェイスなど。

    MakerPlot

  • ArduinoPlot(無料)-簡単なプロット。

    ArduinoPlot

  • arduino-plotter(無料)-すべてのプリミティブタイプをサポートする簡単で軽量なプロット

    Arduinoプロッター

  • Bridge Control Panel(無料)-ロギング、プロットなど。

    ブリッジコントロールパネル

  • RealtimePlotter(無料)-6チャネルのデータプロット。

    RealtimePlotter

  • リアルタイムシリアルデータプロッター(無料)-CSVデータのプロット、ロギングなど。

  • SimPlot(無料)-4チャネルプロット。

    SimPlot

  • Arduinoのシリアルプロッタ(無料) -に建てられたArduinoのエディタの下で[ツール]>シリアルプロッタ

    Arduinoシリアルプロッター

(これはコミュニティWikiです。リストを展開できます。)


よくわかりません。以下に自分のソリューションを投稿しましたが、今はウィキだからあなたの投稿を編集する方が良いかどうかわかりません。どう思いますか ?
オーバー

@Overdrivrもちろん、他の人のためにこのwikiを拡張してください!
-niutech

8

GnuPlot

利点:非常に柔軟で、スクリプト可能で、自由に利用できます。

短所:学習するのが少し複雑です(ただし、数分で開始する方法と、1〜2時間で非常に機能する方法を見つけました)。

非常に便利だと思ったのは、スクリプトを作成して端末プログラムのログファイルを定期的にリロードすることで、実験が進むにつれて動的なグラフが表示されました。

GnuPlotの画像



編集:これはプロットするGnuPlotスクリプトです:

#!/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
これは素晴らしいですね。デモコードを追加してもらえますか?
geometrikal 14

ただし、リアルタイムシリアルデータではなく、Logfile.txtのデータをプロットします。シリアルポートに接続する方法は?
niutech

1
いいえ、このスクリプトは「リアルタイム」ではありません。最大で約4秒遅れる可能性があります。Logfile.txtは、ターミナルプログラムから出力されるキャプチャファイルです。私の場合、データ収集システムは4秒ごとにサンプリングしてログを記録し、GnuPlotスクリプトは4秒ごとにログファイルを再プロットします。これは、私がやっていることに十分に動的です(室温の監視)。
-JRobert

7

必要なプロットにはMatplotlibを使用します。

arduino固有のものではありませんが、非常に優れたPythonプロットツールキットです。

さまざまなマイクロコントローラーのデータをリアルタイムでグラフにプロットする多くのアプリケーションを作成しましたが、それは実際には2ステップのプロセスでした。 。

本当に、あなたはあなたの質問を2つの部分に分けるべきだと思う:

  • Arduino / Anyシリアルデバイスからコンピューターにデータを簡単に取得する方法。
  • 使いやすい優れたプロットライブラリとは何ですか。

+1。「ArduinoリアルタイムプロットMatlab」[ youtube.com/watch?v=ntHZsLmNkgw]ビデオは同じテクニックを使用していますか?
デビッドケーリー14

うん。arduinoデータをmatlab変数に読み込む呼び出しを使用し、次にmatlab変数でmatlabプロットを更新する呼び出しを使用します。
コナーウルフ14

matplotlibはpythonであり、matlabではありません。
-DaveP

私はあなたに同意しません、この質問は2に分割すべきではありません。両方を処理する解決策があります。また、リアルタイムプロット用のpythonコードを書くことは実際には簡単ではありません。物事はmatplotlibで行うことができますが、明らかにpyqtgraphなどのより良い代替手段があります。
オーバー

パート1:Arduinoからデータを取得する:github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot(無料)。それはあなたが必要とするすべてとそれ以上を行います。

その他の機能:

  • データを拡大する
  • データポイントをクリックして値を表示します
  • Arduinoにコマンドを送り返す
  • プロットされたポイントの総数を調整する
  • 独自の自動スケールプロットで各チャネルを表示する機能
  • バイナリ、ASCII、およびカスタムパケットを解釈します
  • デモモードでは、機能を試すことができます

ここに画像の説明を入力してください


1
良い答えは、私はシリアルプロットが好きで、COMポートとボーレートを自動的に見つけたので、バイナリからCSVに変更し、磁力計用に3チャンネルに増やすだけでうまくプロットできました。
Hamish_Fernsby

これは最も簡単で使いやすい-しかし、Macのバイナリがあったらいいのに:)
willwade

5

ここで自分の質問に答える..前述のように、ブリッジコントロールパネルを使用します。

利点:多くの機能。

短所:セットアップが難しく、構文/エラーレポートが非常に貧弱です。

使用するには:シリアルポートを介してArduinoデータを1バイトずつ書き込む必要があります。次のようなintデータ型の場合:

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

Bridgeでは、データを読み取るコマンドは次のとおりです。

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

RX8は読み取りコマンド[h = 43]で、次の有効なバイトはASCIIの「C」、Key1の上位バイト、Key1の下位バイトを意味します。

Bridgeでは次のようになります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


5

serialchartを試すことができます。それはかなり単純なプログラムです。それはまさにあなたが尋ねたとおりです。唯一の欠点は、CSV形式のデータが必要なことです(最初のポイントを満たしていません)。

プロジェクトページのスクリーンショット:

例


私はこれを試してみましたが、動作するのは非常に不格好で、デフォルトの設定はなく、オートスケールしません。構文に30分手を加えた後、私はまだ直線のみのプロットを持っていなかったので、SerialPlotをあきらめて使用しました数分以内に機能し、ASCIIテキストとチャンネル数を指定するだけでした。
Hamish_Fernsby

4

Telemetry GithubのSeeに興味があるかもしれません。Arduino / Mbedデバイスとの双方向通信を可能にする、クリーンなインターフェースを備えた、非常に使いやすい通信プロトコルです。

この長い投稿を読みたくない場合は、そのすべての素晴らしい機能のチュートリアルをご覧ください

このライブラリの威力は、デスクトップコマンドラインインターフェースから得られます(Python プログラミングスキルは不要です)。

コマンドを入力するだけで、高性能なプロット(matplotlibでできることよりもはるかに高い)を開くことができます

プロトコルは複合データ構造をサポートします。現時点では、組み込みボードから配列と疎配列を送信できます。

コマンドラインインターフェイスから開かれたプロットは、データの種類を理解し、配列の場合、各サンプルを時間に対してプロットするのではなく、サンプルは独自のインデックスに対してプロットされます。

近い将来、空間座標(xyzデータ)のサポートを追加して、空間データをすぐにプロットできるようにする予定です。もう一度、プロットがすべてを把握し、データを2Dまたは3D空間にプロットし、アプリの開発に集中できます。

これらの機能は、そのようなプロジェクトに特有のものであると思います。

パイテレメトリーCLI PyPIバージョン

でインストールするpipと、コマンドラインは

pytlm

その後のことができconnectls(リスト)受信トピック、printトピックに受信したデータ、pub(公開)トピックに関する、またはオープンA plotリアルタイムで受信したデータを表示するためのトピックに関する

ここに画像の説明を入力してください

ここに画像の説明を入力してください

始めましょう

Wiki

PS:私は著者です。

私ができるソリューションを見つけることができなかったため、私はそれを開発しました:

  • Arduinoを制御するためのPCスクリプトをすばやく作成する
  • すばやくデバッグする
  • 複雑なデータをプロットする(時変値だけでなく)

独自のソリューションや肥大化したGUIを使用しない上記のすべて。

このライブラリを使用すると、ArduinoとPC間の通信をセットアップする時間が通常半日から5分になりました。


PS:pythonパッケージのシリアルポートデータ(生データとデコードされたデータ)のログ記録も完全にサポートされています。オフライン再生機能を実装するために使用する予定です(シリアルデータフローをシミュレートする)
Overdrivr

4

誰も、超多用途の処理について言及していませんでした。単なるプロット以上のことを行うことができますが、それがやりたい場合は、gwopticsライブラリを使用できます。ここでの指示に従って、ArduinoとProcessingを接続します


2

ADXL345加速度計からリアルタイムデータを出力する同等のツールをPythonで作成しました。 https://github.com/mba7/SerialPort-RealTime-Data-Plotter

誰かに役立つかもしれない

ここに画像の説明を入力してください

シリアル通信と速度を選択し、次の形式でシリアルデータを送信するだけです。

  • 3つの入力、すべての入力は2バイト(2の補数)
  • スペースで区切られた6バイト
  • パケットは '\ n'で終了する文字列です

この形式を簡単に変更できます


これの使い方と、これの長所と短所を説明できますか?
帽子を持つ男14

2

MATLAB Student Editionを使用できます。これにより、さらに分析する時間を節約できます。MATLABでCOMポートを開いて、受信した信号をプロットしたり、ワークスペースなどに信号を保存したりできます。MATLABはすべてを簡単にします!


2
Arduino SEへようこそ!回答を編集して、OPのニーズにどのように適合するかを説明する情報や、リンクや写真などのその他の情報を追加してください。ありがとう!
匿名のペンギン14

良い答えは、Matlabを使用することを考えていないだろう、それについてSOスレッドがありますstackoverflow.com/questions/19483098/…–
Hamish_Fernsby

2

CSV形式は、あらゆるデータ(符号付き/符号なし、さまざまなサイズと精度)で最も汎用性があります。

クロスプラットフォーム(Java / Scalaで作成)ツールScsvlogは、シリアルポート/ソケットからCSV文字列を受信/解析し、値を表示し、グラフを描画できます(最大8)。


残念ながら、ツールは現在見つかりません。元のリンクは無効であり、コピーが見つからないようです。
АрсенийПичугин

2

その提案のために私が開発したソフトウェアを試すことができます。使いやすさを目指しています。SerialGraphicator -JSON形式で受信したグラフ値に対応したオープンソースの無料シリアルポートクライアントを参照してください。


1

私はそれを自分自身を使用していないものの、「rqt_plot」 PC上で実行しては、スケッチ実行しているのArduinoからシリアルポート経由で来てPC上のプロットデータへの一般的な方法であるように思わrosserial_arduinoのライブラリやros_arduino_bridgeのライブラリを。


1

これは非常に古い質問ですが、最近この問題を非常によく解決するMacアプリケーションを作成しました。詳細については、www.bloonapp.comをご覧ください。Webサイトには、確認できるデモビデオがいくつかあります。ここに画像の説明を入力してください


1
18年8月1日現在、このウェブサイトは死んでいます。
ダン

1

おそらくより高度なGUI出力を使用した後であることは承知していますが、通常はオシロスコープで行うタスクを複製することができました。 Arduino Serial Plotterの出力

Arduino IDEのシリアルプロッターとADCモジュールを使用すると、eBayで3ドルで入手できます。私はそれが少し粗雑であることを認めますが、Python / Matlab / ectレベルのソリューションに投資する前に、しばらくの間このツールを試してみる価値があります。それは非常に使いやすかったです。SDカードの記録をプロセスに追加するのにそれほど時間はかかりません。

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


0

テレメトリビューアー

利点:

  1. 使いやすい
  2. 直感的で柔軟なUI
  3. オープンソースで無料
  4. さまざまな種類のグラフ
  5. 非常に高速なグラフ更新レート

短所:

  1. 開発中止
  2. バイナリデータ形式はまだ完全ではありません。
  3. ズーム、スクリーンショットなどのプリミティブグラフコントロール... ここに画像の説明を入力してください

0

Serial Plotterは、Electronで作成した単純なプログラムで、次の形式でデータを受け取り、 data1,data2,timestamp;それをリアルタイムのチャートに変換します。

ここに画像の説明を入力してください


0

ほぼ役に立ちます。が必要だ:

  1. シリアルデータをファイルに記録するOR
  2. ファイルからグラフ化し、xxxミリ秒ごとに更新します。

Live Graphは優れたオプションであり、Tera Termと組み合わせて使用​​します。TeraTermは、USB /シリアルリンクを介してデータを取得します(ログファイルに保存し、Live Graphがポーリングします)。

ライブグラフは、データをキャッシュするときに少しバグがあり、結果を表示するために移動ウィンドウを設定する方法を見つけていません。また、複数のグラフを表示するには、手動でスケーリングする必要がありますが、それにもかかわらず、非常に便利です。Javaで記述されているため、JREが必要になります。他のグラフ作成プログラムのいくつかが行うようにpythonをインストールするよりもこれが好きです。もう1つの欠点は、4つの異なるウィンドウが開くことです。これは、Tera Termと切り替えたいときに苦痛です。

私はまだソフトウェアを見つけていません

  1. 実行可能ファイル(.EXE)であるため、外部に依存しません
  2. ターミナルエミュレータまたはシリアルデータロガーを含む
  3. シリアルデータを記録します
  4. CSVから複数のアイテムをグラフ化します
  5. CSVおよびタブ区切りデータを許可します(同時にグラフを監視しながらスクロールするため、読みやすくなります)。
  6. すべてを[0..1]にスケーリングしたり、乗数を設定したりせずに、オーバーレイされたグラフごとに異なるスケールを設定できます。つまり、グラフ化された各アイテムに[y0..y1]範囲を設定できます。

1
Arduino SEへようこそ!回答は参考になり?ますが、エディターのボタンを押して表示できるマークダウンガイドを使用して、回答の書式を改善してください。
アバンマンダー

0

Arduinoからのシリアルプロットにprocessing.orgを使用しています。これは、実際のヒストグラム(100ビンの100万イベントなど)を作成し、各チャネルの平均シグマに加えてさまざまな情報番号を表示できる唯一のアプリでした。2つの主要な問題:A)符号なしバイトのないJavaに基づいていることが判明したB)データの入力に必要な循環バッファーとマーカーとの同期。(高速、ハンドシェイクなし)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.