Strike while the iron is hot.

「鉄は熱いうちに打て」
驚くことに、このことわざは英語でもそのままです。
”Strike while the iron is hot.”
日本語が先か、英語が先か、それとも偶然なのか、わかりません。

さて、11th Projectの候補のひとつとしてGメーターを作ってみようと思ったわけですが、やる気が失せないうちに行けるとこまで行ってみます。最近は、集中力の持続時間がどんどん短くなっているような気がするので。

で、ここまで進みました。
140404-01

まずはブレッドボードで動作確認。
中央のX, Y, Z並進の加速度センサとTz,Ty,Tzのジャイロが入ったMPU-6050からデータを読み出して、右側のOLED SSD1306に表示しています。両者ともArduinoとはI2Cで接続。上のLCDキャラクタ・ディスプレイは読み出しデータの確認用です。OLEDのデータシートが、とても不親切でI2Cのピンアサインを読み取るのに苦労しました。これに半分くらいの時間を費やした気がします。
MPU-6050は、とりあえず生値を表示しています。Z軸の加速度が17000くらいを示しているので、9.8m/s2≒17000くらいだと思われます。まだ、データシートをきちんと読んでいませんが、たぶんどこかに換算値があるでしょう。

今は20Hzのタイミングで読み出しています。もちろん、もっと高い周波数で読み出せますが、そうするとディスプレイの数字がつぶれて読めなくなってしまうので、わざと低い周波数で読んでいます。最終的にはできるだけ高い周波数で読み出してローパスをかけたいところです。
webで情報を漁っていると、MPU-6050にはDigital Motion Processing (DMP)という可能があって、モーション合成などをチップの方でやってくれるみたいですが、その辺の使い方が、まだ謎。ヤコビ行列変換とかやってくれるのかもしれません。

とりあえず、加速度センサの値を、そのままOLEDに書き出すところまでは出来ました。次は、OLEDの表示をカッコいいのに工夫します。