Arduino

【Arduino】シリアルプロッタでグラフ化!!使用例アリ!!

<この記事について>

  • 「Arduinoで出力値をグラフ化すことができるの?」などと思っている方に向けて書きました。
  • この記事を読むことで、Arduinoでグラフを表示させる方法が分かります。
  • 結論から言うと、手順は簡単で電圧やセンサの値などもグラフ化することが可能です!

こんにちは!こんばんは!

ちゃとらです(・ω・)/

「そういえばArduinoにシリアルプロッタあるやん!ちょっと遊んでみよ!」

「おぉーええやん!面白いなぁ~気に入ったわ!」みたいな感じでシリアルプロッタいじってました(笑)

なので、今回は使用例も含めたシリアルプロッタについて解説していきます!

ちゃとら

知っておくと意外と便利かも⁉

シリアルプロッタの使い方

手順

シリアルプロッタを使うための手順
  • プログラムコードを作成
  • Arduinoにプログラムコードを書き込む
  • Arduino IDEの画面上部のメニューから「ツール」→「シリアルプロッタ」を選択

こんな感じの簡単な手順でシリアルプロッタを表示させることができます。

Arduinoにコードを書き込んで動かすので、当然ですがArduinoを接続しないと動きません!(コードの検証はできます)

ちなみに、シリアルプロッタはCtrl+Shift+Lのショートカットキーでも表示させることができます。

1つの値を表示させる

まずは、1つの値を一次関数のように表示させてみます。

int x = 0;

void setup()
{
  Serial.begin(9600); // 9600bpsでシリアル通信する
}

void loop() 
{
  Serial.println(x); // xの値を送信
  x += 2;
}
1つの値のグラフ化

5行目でシリアル通信する速度を設定しています。とりあえず9600bpsにしておけばOKです。

9600bpsは9600(ビット/秒)、つまり1秒間に9600ビットの速さということです。

10行目でデータを送信しています。

データ+改行をすることで逐一送信した値をグラフ化してくれます。

ちゃとら

10行目を[Serial.print(x); Serial.print(“\n”);]

と書いてもグラフ化してくれますよ。

複数の値を表示させる

次は、2つの値を表示させてみます。先ほどとは少し異なります。

ある値になると増減が変化する一次関数と二次関数をグラフ化してみました。

int x = 0;            // 表示させる値その1 
int y = (x * x) / 50; // 表示させる値その2
int change = 0;       // xの値を切り替える役割

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

void loop() 
{
  // xの値が100になったら右肩下がりにし
  // 0になったら右肩上がりにする
  if(x == 100)  change = 1;
  else if(x == 0)  change = 0;

  if(change == 0)  x++;
  else  x--;
  
  Serial.print(x);
  Serial.print(",");
  Serial.println(y);

  y = (x * x) / 50;
}
2つの値のグラフ化

ポイントは20行目~22行目です。

2つ以上の値をグラフ化するには値と値の間に[,(コンマ)]を入れる必要があります。

つまり、複数の値をグラフ化するときは[値1,値2,値3,…改行]と送信することで各値をグラフ化してくれます。

凡例を表示させる

怒るモブ

凡例って何だよ!

ちゃとら

そんな方は↓を見て、どうぞ。

凡例の説明図

それでは、先ほどのグラフに凡例を付けて表示させてみます。

int x = 0;            // 表示させる値その1 
int y = (x * x) / 50; // 表示させる値その2
int change = 0;       // xの値を切り替える役割

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

void loop() 
{
  // xの値が100になったら右肩下がりにし
  // 0になったら右肩上がりにする
  if(x == 100)  change = 1;
  else if(x == 0)  change = 0;

  if(change == 0)  x++;
  else  x--;

  Serial.print("x:");
  Serial.print(x);
  Serial.print(",");
  Serial.print("y:");
  Serial.println(y);

  y = (x * x) / 50;
}
凡例を含めた2つの値のグラフ化

20行目~24行目に注目してください。

凡例を表示させるには、xの前に[“x:”]、yの前に[“y:”]を入れる必要があります。

なので、凡例を表示させるには各値の前に”○○:”という文字列を送信することで凡例をも表示してくれるようになります。

ちゃとら

他のやり方としては、表示させる値を含めた文字列をString型にまとめてから送信する方法などがあります。

応用例

ただ自分で作成したコードの数値をグラフ化しても面白くないので、ある回路から何かを読み取ってグラフ化してみます。

コンデンサを用いた回路の2つの電圧を読み取ってグラフ表示させてみます!

回路図
配線図

簡単に説明すると、ボタン押下前ではV1=5V,V2=0で押下中はV1=V2かつV2の値が増加しいずれは一定になります(ボタンを離すとまたV1=5V,V2=0に戻っていく)

スイッチはスライドスイッチやトグルスイッチなどでもOKです。

コンデンサは220μFなどのそこそこ大きいものがいいかと思います。

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

void loop() 
{
  // 各アナログピンから読み取った値を0~5V範囲内の値に変更する
  double V1 = analogRead(A1);
  V1 = V1 / 1024.0 * 5.0;
  double V2 = analogRead(A2);
  V2 = V2 / 1024.0 * 5.0;
  
  Serial.print("V1:");
  Serial.print(V1);
  Serial.print(",");
  Serial.print("V2:");
  Serial.println(V2);
}

2つの電圧値をグラフ化

こんな感じで電圧測定することができます。

他の回路に応用すれば、電圧だけでなく様々なセンサの値などもグラフ化することができますよ!

ちゃとら

ぜひ色々な回路で試してみてください!

マルチバイブレータ回路の電圧測定なんか面白そうですね!

まとめ

シリアルプロッタについて

  1. [手順:コード作成→Arduinoにコードを書き込み→シリアルプロッタ表示]と簡単な手順で使える。
  2. 複数の値や凡例を表示させるには少し特徴的なルールがある。
  3. 電圧やセンサの値もグラフ化することが可能。
ちゃとら

グラフ表示、意外と面白いよ!

今回はここまでです。

ちゃとら(・ω・)/