I2C を利用して、RaspberryPi と加速度センサや電子コンパスなどのセンサを簡単に接続することができました。しかし、今のところセンサの測定値が、画面にだらだらと数字で表示されているだけで、あまり面白味がありません。そこで次は、これらセンサの測定値をグラフに出力できるようにしてみます。
グラフ描画の処理を自前で書くのは面倒くさいので、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 秒程度を目処に、少ししたら Ctrl+C と押してプログラムを停止し、記録を終わります。
生成された 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"
を読込み、using 1:2
)、with lines
)。,
)、""
) を使って、using 1:3
)を点(with points
)で、using 1:4
)を点と線(with linespoints
)でグラフを描く。このように、gnuplot を利用すると、データを簡単にグラフに書き出すことができます。gnuplot では、他にも様々なスタイルや、線の色、太さを変えたり、ラベルを付けたり、様々にカスタマイズすることが可能です。gnuplot は、センサの測定値に限らず、テキスト形式のデータ ファイルであればおおよそ扱うことができるので、使いこなせるようになると非常に便利です。しかも、gnuplot は Linux の他に、Windows や Mac OS などでも殆ど同じに使うことができるので、一度覚えておくと、他の環境でもそのまま使うことができます。