つれづれなる備忘録

日々の発見をあるがままに綴る

TinkercadによるArduinoシミュレーション42 ~ シリアルプロッタ

以前のシリアルモニタを使って波形情報を表示する記事の中で波形を簡易表示する方法を取り上げたが、

atatat.hatenablog.com

今回はTikercadのシリアルプロッタを用いて波形などのグラフを表示する方法について紹介する。

1. シリアルプロッタの使用方法

 Tinkercad上でArduinoを選択して、変数をシリアルモニタに表示するスケッチを作成する。例えば、Arduinoの経過時間に対する正弦波を変数aに格納してシリアルモニタに出力する。

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

void loop() {
  double a=sin(millis()*3/1000);
  Serial.println(a);
  delay(50);
}

Tinkercadでシリアルモニタを表示したときに、右下のグラフボタンをクリックしてシミュレーションを実行すると、変数aのプロットが得られる。 プロットを得るには改行コードが必要でplotln()またはprint()に続いてprint("\n")と改行を入れることでプロットが実行される。

"シリアルプロッタの設定"
シリアルプロッタの設定

2. シリアルプロッタでの複数プロット

 複数プロットを行う場合はprint(変数1);print(",");print(変数2);print(",");println(変数3)などとして変数間にカンマを出力し、最後に出力する変数はprintln()を用いる。 以下のスケッチはrand1,rand2Arduino IDEのrandom関数を用いて乱数を発生させ、Vは(図は省略するが)アナログ入力0番に関数ジェネレータを接続し、1Hzで0-5Vの正弦波電圧を入力している。 シリアルプロッタで複数プロットする際にみやすくするために、各変数に200ずつの下駄をはかせている。

void setup() {

  Serial.begin(9600);
}

void loop() {

  int rand1 = random(0,255);
  int rand2=  random(0,255)+200;
  int V=analogRead(0);
  V=V/4+400;

  //シリアル出力
  Serial.print(rand1);
  Serial.print(",");
  Serial.print(rand2);
  Serial.print(",");
  Serial.println(V);

  delay(50);
}

以下が実行例だが3つの変数がプロットされていることを確認できる。

"シリアルプロッタに複数プロット"
シリアルプロッタに複数プロット

3. シリアルプロッタの活用方法

 Arduinoのシリアル出力を用いているため、サンプリングのタイミングなどうまく調整できず波形が歪んで表示されることがあり、この点はオシロスコープでモニタした方が確実だ。ただArduino内部での変数の状態、例えば1バイト数値などで、255で定期的にオーバーフローするなどの確認をする上では役に立つことがある。

4. まとめ

 今回はTinkercad上でのArduinoのシリアルプロッタの基本的には使用方法や複数プロットの方法について紹介した。単に波形を確認するにはオシロスコープの方がよさそうだが、Arduino内部処理での変数の状態が確認できるのでデバック作業には役立つと思われる。