前回,MultiWiiConfでMultiWii SE V2.5 CRIUSを動かしてみました.
感想としては,なんかよくわからないけどすごい.といったところでしょうか.
なんか,ソフトウェアとして,全て完成されてますよね.だからなんかよくわかんないんですよね.このまま,マルチコプターをつくるにはとてもよさそうです.
だからこそ,自分で作ってる感じはなさそうだな,とか,自由度が低くなってしまうかなという感じもあります.
よって,一旦,ソフトウェアとしてのMultiWiiからは離れてみて,マイコンボード上のセンサーをうまく使いこなす術を磨きたいなと思います.勉強になるし,きっと.
というわけで,今回はまず,MultiWiiボードについているセンサーの値を取得するために各センサーのI2Cのアドレスを見ていきたいと思います.
*以下,マイコンボードとしての,MultiWii(SE V2.5 CRIUS)という意味で,「MultiWiiボード」ということとします.
どんなセンサーがついているのか
最初の記事で述べたように,MultiWiiボード上には,3つのセンサーがついており,それで4種類,10個の物理量を計測することができます.
搭載センサーは次の通り.
- 加速度/ジャイロセンサ:MPU6050C
- 磁気センサ:HMC5883L
- 気圧センサ:BMP085
で,MultiWiiのプログラムでは,これらのセンサーの値ををいい感じにフュージョンして,姿勢や向き,高度を表示してくれるわけです.
でも,これらのセンサーの生データを取得できれば,自分の好きなようにプログラムして自分の好きなものを作れる...はず...
というわけで,
「センサーの生データ,欲しくない?」
センサーの値をどうやって取得するのか
それぞれのセンサーの計測値を取得するには,マイコンとセンサーでなんらかの情報のやり取りが必要です.
MultiWiiボードではセンサーとマイコンでI2Cという通信方式をつかって通信して,計測値を取得するようです.
I2Cとはってところは,詳しくはまだわかりませんが,Wikipediaさんにかいてありますね.
それで,詳しくはまだわかりませんが,I2C通信では,図1のように,1つのマスター(ここではマイコン)に対して,複数のスレーブ(ここではセンサーたち)を並列に繋げることができるようです.
ここで,複数あるスレーブを区別するため,それぞれのスレーブはアドレスというものをもっています.
まぁ,この辺まで調べてみてなんとなくわかったような気になります.詳しくよくわk(略)
とりあえず各センサーのアドレスを取得してみた
いきなりセンサー生データを取得する前に,本当にI2Cでつながっているのかの確認もかねて,各センサーのアドレスを取得してみようと思います.
海外のデキる人がArduinoにI2Cで接続されている機器のアドレスをスキャンする,"I2C Scanner"というプログラムがあったので,それを使って,MultiWiiボードについているセンサーのI2Cアドレスを取得します.
A I2C Scanner for Arduino · GitHub
前回と同じ要領で,接続し,書き込んでいきます.
書き込んだら,右上の虫眼鏡みたいなマークをクリックしてシリアルモニターを開き,結果を確認します.
ボーレート(右下で変更できる)は9600です.
3つのアドレスで,I2C機器が検出されています!!
ちょっとぐぐってみたところ,アドレスの対応としては,
- 0x1E:HMC5883L
- 0x68:MPU6050C
- 0x77:BMP085
のようです.
とりあえず,今後はこれらのセンサーの生の計測値をなんとか取得していきたいと思います.
その後↓