まなびサイエンス

RaspberryPi と gnuplot でセンサの測定値をグラフ描画する

カバーイメージ
  • graph
  • Photo by Esther Simpson
    • CreativeCommons
    • Attribution
    • NonCommercial
    • ShareAlike

 I2C を利用して、RaspberryPi と加速度センサ電子コンパスなどのセンサを簡単に接続することができました。しかし、今のところセンサの測定値が、画面にだらだらと数字で表示されているだけで、あまり面白味がありません。そこで次は、これらセンサの測定値をグラフに出力できるようにしてみます。

gnuplot

 グラフ描画の処理を自前で書くのは面倒くさいので、gnuplot (ぐにゅーぷろっと)という既存のグラフ描画用のプログラムを利用することにします。gnuplot は、2 次元または 3 次元のグラフを作成するためのアプリケーション ソフトウェアで、インターネットで無料で配布されています。無料でありながら、非常に高機能かつ高精度で、学術研究の分野などで広く使われており、使い方を解説したウェブサイトも多数あるので、困った時には参考になる情報が多く助かります。RaspberryPi にも簡単にインストールできるので、早速インストールしてみます。

$ sudo apt-get install gnuplot

 たったこれだけです。インストールが終わったら、試しに何かグラフを描いてみます(Fig.1 )。

$ gnuplot -p -e "set pm3d; set xrange[-pi:pi]; set yrange[-pi:pi]; splot sin(x)*cos(y);"
または
$ gnuplot
> set pm3d
> set xrange[-pi:pi]
> set yrange[-pi:pi]
> splot sin(x)*cos(y)
> quit


Fig.1 z=sin(x)cos(x)

 …と、ちょいちょいとコマンドを入力するだけで、このように美しい 3 次元グラフを簡単に表示することができます。

データ ファイルからグラフ描画

 gnuplot は、データ ファイルから数値を読込んでグラフを描くことができるので、センサの測定プログラムから出力された測定値をデータ ファイルに保存し、そのデータ ファイルを gnuplot に読みこんでグラフを描いてみます。早速、例として、I2C で簡単接続できる加速度センサの測定値をグラフにしてみます。

$ python i2c_mpu6050_1.py >sensor.txt

 i2c_mpu6050_1.py は、0.1 秒ごとに、加速度センサから X・Y・Z 軸方向の加速度を測定し、画面に出力する python プログラムです。この画面出力を、>sensor.txt とすることで、測定値を画面に表示する替わりに、データ ファイルに書き出すようにしています。
 上記のコマンドを実行すると、画面には何も表示されず、一見して何も起こっていないように見えますが、この間にも測定値がどんどんデータ ファイルに書き込まれています。しばらくの間、加速度センサを上下左右に自由に傾けたり、振ったりしながら sensor.txt に測定値を記録していきます*1。10 秒程度を目処に、少ししたら CtrlC と押してプログラムを停止し、記録を終わります。
 生成された sensor.txt をダブルクリックすると、テキスト エディタが開くので、データが記録されていることを確認してみます。

 次に、書き出されたデータ ファイルを gnuplot に読みこんでグラフを描いてみます(Fig.2 )。

$ gnuplot
> plot "sensor.txt" using 1:2 w l, "" using 1:3 w p, "" using 1:4 w lp


Fig.2 加速度の時系列プロット

コマンドの解説

  • データ ファイル "sensor.txt" を読込み、
  • 空白で区切られた 1 ケタ目と 2 ケタ目(X 軸)のデータを使って(using 1:2)、
  • 直線でグラフを描く(with lines)。
  • 更に続けて(,)、
  • 先と同じデータ ファイル("") を使って、
  • 1 ケタ目と 3 ケタ目(Y 軸)のデータ(using 1:3)を点(with points)で、
  • 1 ケタ目と 4 ケタ目(Z 軸)のデータ(using 1:4)を点と線(with linespoints)でグラフを描く。

 このように、gnuplot を利用すると、データを簡単にグラフに書き出すことができます。gnuplot では、他にも様々なスタイルや、線の色、太さを変えたり、ラベルを付けたり、様々にカスタマイズすることが可能です。gnuplot は、センサの測定値に限らず、テキスト形式のデータ ファイルであればおおよそ扱うことができるので、使いこなせるようになると非常に便利です。しかも、gnuplot は Linux の他に、Windows や Mac OS などでも殆ど同じに使うことができるので、一度覚えておくと、他の環境でもそのまま使うことができます。

参考リンク

  1. *1 この時、RaspberryPi と接続しているジャンパ線が抜けないように注意しましょう。ジャンパ線が引っこ抜けると、プログラムが途中で止まります

カテゴリー

過去ログ