おもちゃラボ

Unityで遊びを作ってます

Arduino IDEだけでOK!シリアルの出力値をグラフ化する方法

f:id:nn_hokuson:20211002152108p:plain:w600
Arduinoでシリアルで出力した値をグラフ化したいときがあります。
でもそのためにProcessingで表示プログラムを作るのは面倒!

そんなときは・・・!

Arduinoエディタにはシリアルプロッタが標準で付属しているので、
コレを使いましょう。この記事ではシリアルプロッタの使い方を紹介します。

目次は次のとおりです。

sin波を出力してみる

まずはシリアル通信でsin波を出力するプログラムを作ってください。

float t = 0;

void setup() 
{
  Serial.begin(19200);
}

void loop() {
  t += 0.05;
  int p = 50 * sin(t) + 50;

  String str = String(p);
  Serial.println(str);
}

setupメソッドの中で通信レート19200bpsに設定しています。また、loopメソッドでsin波の値を毎フレームごとシリアル通信で出力しています。

プログラムが作れたら、Arduinoに書き込んでおきましょう。

シリアルプロッタで表示

スケッチをArduinoに書き込めたら、いよいよシリアルプロッタを使ってグラフを表示してみましょう。

メニューバーからツール→シリアルプロッタを選択してください。

f:id:nn_hokuson:20211002153412p:plain:w300

シリアルプロッタの画面が表示されたら、画面左下のボーレートを19200に設定します。すると次のようなSin波が表示されるはずです。

f:id:nn_hokuson:20211002151544p:plain:w600

シリアルプロッタで複数の値を出力する

シリアルプロッタで複数のグラフを描画したい場合は、次のように、それぞれのグラフの値を「,(コンマ)」で区切って出力します。

Serial.println(値, 値, 値);

ここではsin波とcos波の2つのグラフをシリアルプロッタで表示してみます。プログラムを次のように変更してください。

float t = 0;

void setup() 
{
  Serial.begin(19200);
}

void loop() {
  t += 0.05;
  int p = 50 * sin(t) + 80;
  int q = 80 * cos(t*2) + 80;

  String str = String(p) + "," + String(q);
  Serial.println(str);
}

プログラムが作れたら、Arduinoに書き込んでからシリアルプロッタで表示を確認してみてください。次のように2つのグラフが表示されているはずです。

f:id:nn_hokuson:20211002152108p:plain:w600

凡例も表示したい

シリアルプロッタの表示に凡例も合わせて表示したい場合には、次のようなフォーマットでシリアル出力します。

Serial.println(凡例1:値1, 凡例2:値2, 凡例3:値3);

ここでは、それぞれのグラフに「sin」「cos」という凡例をつけて表示してみます。次のプログラムを入力してください。

float t = 0;

void setup() 
{
  Serial.begin(19200);
}

void loop() {
  t += 0.05;
  int p = 50 * sin(t) + 80;
  int q = 80 * cos(t*2) + 80;

  String str = "sin:"+String(p) + "," +"cos:" + String(q);
  Serial.println(str);
}

Arduinoにプログラムが書き込めたら、シリアルプロッタで表示を確認してみてください。シリアルプロッタの画面左上に正しく凡例が表示されていると思います。

f:id:nn_hokuson:20211002153555p:plain:w350

まとめ

Aruduinoでシリアル出力した値をグラフ化シたい場合には、Arduinoエディタに標準で付属しているシリアルプロッタが便利です。