mbed.2) mbed【NUCLEO-F303K8】 BMX055を使って加速度、角速度、地磁気を測定する。
【NUCLEO-F303K8】 BMX055を使って加速度、角速度、地磁気を測定します。
今後、GPSと組み合わせた自己位置推定を行いたいと考えています。
さて、本題へ。
必要なもの
- NUCLEO-F303K8
- 9軸センサーBMX055
- 9軸とは加速度x3次元、角速度×3次元、地磁気x3次元のことです。
- 今回はkitを使用秋月電子のページへ
- レジストリへの書き込み・読み込みなど、様々な設定が出来るみたいです。(すべて読めてません)
- ブレッドボード
- ジャンパーWire
- micro USB(F303K8への書き込み、電源用)
作業概要
- 9軸センサーのハードウェア作業
- 回路を組む
- プログラム作成作業
作業詳細
- 作業1(9軸センサーのハードウェア作業)
9軸センサーは、裏面にあるジャンパーピン(JP)によって各センサー(加速度、ジャイロ、地磁気)のアドレスが設定されます。
秋月電子で買った場合は、説明書にあるように、以下の3つのJPをショートさせました。見ずらいですが、図の赤丸の箇所です。
- プルアップ抵抗を自分で設定しない場合は,JP4,5をショートさせる
- 電源洗濯のため、JP7をショートさせる
- 作業1の参考図
BMX055.jpg
-
作業2(回路を組む)
今回はF303K8を使用し、I2C通信を行うために、それぞれを結線します。- PB_7:I2C-SDA, PB_6:I2C_SCLをセンサーと結線する。
- 5Vと3V3の電源に、センサーのVCCと3V3をそれぞれ結線する。
-
作業3(プログラム作成)
リンク先のライブラリが参考になりました。BMX055- 新規のプログラムを作成します。
- リンク先のライブラリのBMX055.hのみをコピーし使用しました。
- ただし、内部のPIN設定は異なるので、PB_7とPB_6に修正する必要があります。
4. ヘッダーファイルに合わせて、main関数も作成しました。
5. "mbed.h"は、プロジェクトフォルダ内にある
mbed
という設定フォルダが無いとエラーになるので、他のtemplateからコピーして取ってきました。
cpp BMX055.h
// Set up I2C, (SDA,SCL)
I2C i2c2(PB_11, PB_10);
cpp main.cpp
#include "mbed.h"
#include "BMX055.h"
BMX055 bmx;
int main() {
bmx.init();
while(1) {
float ax, ay, az, gx, gy, gz, mx, my, mz;
bmx.getMotion9(&ax,&ay,&az,
&gx,&gy,&gz,
&mx,&my,&mz);
printf("acc(%05.3f, %05.3f, %05.3f), gyro(%05.3f,%05.3f,%05.3f), mag(%05.3f,%05.3f,%05.3f)\r\n", ax, ay, az, gx, gy, gz, mx, my, mz);
wait(1.0);
}
}
今後は、Madgwickフィルタとクオータニオンを学びながら実装していく予定です。(BMX055.hの中にもコードがあります。)
- 今後の方針
- 9軸センサーを使用した"sensor fusion"(自己姿勢、自己位置推定)を行う。
- GPSセンサーを用いて、sensor fusionの精度を上げる。
- SDカードへの保存を行う。
- wifiを搭載しソケット通信を行い、クラウドとの連携を行う。
Author And Source
この問題について(mbed.2) mbed【NUCLEO-F303K8】 BMX055を使って加速度、角速度、地磁気を測定する。), 我々は、より多くの情報をここで見つけました https://qiita.com/hamanonzzz/items/a47f20b036233522be16著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .