HOME >> 鉄道模型実験室 > 測定したデータをリアルタイムでグラフ表示する方法

鉄道模型実験室 No.210  測定したデータをリアルタイムでグラフ表示する方法

 EXCELのマクロ処理を諦めたので、代わりになる処理方法を探すことにしました。 そこで、ネットサーフィンをしながら可能性のある方法を検討し、Python を使用することにしましたが・・・・・・。

 

  .

  

■ リアルタイムでグラフ表示させる方法の検討

 今回のシステムで肝となる項目はいくつかあるのですが、まずは、リアルタイムモニタとしての機能を探ることにしました。

 最初は「モニタ式の操作盤を作ろう Processing を使う」(2021/9/13)で挑戦したProcessing で探っていたのですが、 「Arduinoで測定したデータをPythonを使ってリアルタイムグラフ表示、保存」 などのサイトを見つけ、Python と matplotlib ライブラリを使う方法に興味を持ちました。 これなら、自分でもこなせる範囲と考えて、関連する情報をあさりました。

 しかし、さらに 「PythonでExcelを操作する方法」 などのサイトも見つけ、EXCELのマクロの代わりに Pythonを使う という新しい流れがあることを知りました。

 このEXCELが使える方法であれば、

  1. データ保管が容易であること。
  2. データの計算処理や修正が容易であること。
  3. グラフの作成が容易であり、スタイルも統一させることができること。
  4. 今まで蓄積してきたデータ類と統一的に使用できること。

などのメリットを感じたので、この線で検討することにしました。 使用するライブラリーは、openpyxl との事なので、早速作業に入ることにした。

 

■ Hello Python

 今回の Python を使うにあたって、参考にした教則本は、「Python ゼロからはじめるプログラミング」 三谷純著、翔泳社 です。 実はこの本は訳けあって半年前に購入して読み始めていたのですが、そのままになっていたものです。 この本を開いてみると、インストール方法や、ファイルに保存したプログラムの実行方法などが解説されていたので、早速実行することにしました。

 まず最初に、Pythonをインストールしました。 そして、教則本に示されたように、 print('Hello Python') と記述したファイルをCドライブの「python」というファルダに保存しました。 そして、cd コマンドでパスを入力してフォルダを移動させ、python hello.py と記述して実行させました。 すると、無事に Hello Python と表示され、教則本の通りに実行することが出来ました。

 簡単! 簡単!と喜んだのはつかの間のことで、この後に、早速つまずきました。                  

   *******************************************************************************************

 

  .

■ 最初のつまずき

 次に、ライブラリー openpyxl を無事にインストールすることが出来たので、さるサイトの解説を参考にして簡単なEXCELファイルへのアクセスファイルを作ってトライすることにしました。

 そして、コマンドラインにて、

 >>> wb = openpyxl.load_workbook("Arduino-new-speed.xlsx") 

と実行させたのですが、エラーとなりました。 そのようなファイルがありませんとのことです。

  *****************************************

 その他にもいろいろ操作をしたのですが、やはりエラーばかりでした。 そしてファイルの保存場所が違うのではないか、と言うことにふと気が付いたのです。 

 そこで、コマンドラインより新しく test-x.xisx という名のファイルを作って、どこに保管されたのかを調べた結果が右の図です。 やはりフォルダの場所が別でしたね。

 さらに気が付くと、コマンドプロンプトが違っていることに気が付きました。 まさに初心者丸出しですな!

  PS と >>> の違いがあるのです。  PS は Windows PoweShell の意味と理解し、>>> はPython が作動中を示すプロンプトであると認識しました。 そして、Python が機能しているゾーンは図のイの領域であり、、>>> プロンプトが作動中はこの中にファイル類が保管されていることが必要なようです。

 また、プログラムファイルを実行させる場合には、そのファイルが保管されているゾーン、すなわち図ではロの部分にパスを移動させて、PSプロンプトの作動中に、Python と言うソフトでファイルを開くことを指示する必要があるものと理解しました。 すなわち、

    PS c:\python > python test-01.py

と記述すれば良いのです。 これで頭の中をすっきりとさせることが出来ました。

 そして、作動させるソフトの名称とフォルダ名の混乱を避けるため、フォルダ名 python をPfile と変更することにしました。 また、作動させるプログラムファイルと作動対象のEXCELファイルを同じフォルダ内に収めておくことも必要なようです。

  ******************************************

 Python には、二つの実行方法があるので、その使い分けを実感した次第である。 、>>> プロンプトが作動中は対話モードで実行中であり、インタプリンタ方式でプログラムが実行されています。 一方で、一般的な方法であるプログラムコードを記述したファイルを実行させる方法は、PSプロンプトの作動中に実行するものであることを勉強しました。

 

■ 確認してみよう

 上記の件について、簡単に確認してみた。 まず、PSプロンプトの状態から >>> プロンプトの移動の確認です。 問題ないですね。

 次に、>>> プロンプトの状態(対話モード)で、ライブラリー openpyxl を呼び出してみました。 これも問題ないですね。

 では次に、PSプロンプトの状態にもどし、パスを C:\Pfile に移動させて、ライブラリー openpyxl を呼び出してみました。 

 ダメと言われました。 用語 ’import’ が認識されませんでした。 パスの位置がロではダメなのです。

 次に、プログラムファイルを実行するという形では問題ないのかを確認してみましょう。 このため簡単なファイル hello-x.py を作り、その中に import openpyxl を実行させてみることにしました。 正常に作動するならば、その後の print 命令が実行されるはずのです。 そしてこのファイルをパス位置がロのフォルダ内に保管し、Python を使ってそのファイルを実行させてみました。

 思惑どうりに、問題なく実行することが出来ました。

 フムフムと一人で感心しながら、なんとか Python の操作の仕組みを理解したつもりです。

 

■ 課題

 Python の使い方を理解したので、プログラム作成の前に課題を整理しておこう。 実行すべき項目と課題は、

  1. シリアル通信による受信データの取り込みと処理方法。 Arduino からは測定ゲートを通過ごとに、コンマ区切りの7個のデータを送信して来ます。 そのデータの受信方法と処理方法を習得する必要があります。 また、送信タイミングは車両の走行速度によって変化するが、その間隔はPython がデータを処理するのには充分な時間があると考えているので、通信があったことを知って作動すれば良いだろうと考えている。 データの受信ミス(スルー)やダブル受信があったとしても、リアルタイムでモニタリングしておれば何ら問題はありません。
  2. 読み込んだデータを必要なデータに分解する方法。 データはコンマ区切りの一行のデータとして送られて来ます。 これをコンマ毎に区切ってひとつづつのデータに分解しておく必要があります。
  3. 分解したデータを一つずつEXCELのセルの入力させる方法。 分解したデータをEXCELの指定のセルに書込んでいくこと。
  4. EXCELに入力されたデータをリアルタイムにグラフに表示させる方法。 書込まれた一連のデータは、セルの中で計算され、供給電圧、消費電流、スケール速度、牽引力として換算処理されます。 この処理されたデータをグラフに表示させるのですが、一行のデータごとにグラフをリフレッシュさせ、リアルタイムモニターとして機能させる必要があります。

などが考えられる。 これらの課題をサンプルデータを使いながら取り組んで行くことにします。

 

ページトップへ戻る  .


 2022/6/14