Arduino101/Genuino101に内蔵された6軸センサーとBluetoothLE(BluetoothLowEnergy(以下BLE))を両方を同時に使ってみました。6軸センサー(加速度、ジャイロ)の情報をBLE経由でスマホへ送信、自作Androidアプリで姿勢角を可視化してます。
▼6軸センサー情報をBLE経由してスマホで可視化▼
ワイヤーフレームで可視化したのですが、少し見難かったです。
Arduino101/Genuono101側のスケッチ
Genuino側スケッチの概要です。6軸センサー(CurieIMU)からの加速度、角加速度の計測値からカルマンフィルターを通して各軸の回転角度を算出。カンマ区切り文字でBLE送信します。CurieBLEでは1つのCharacteristicで20byteまで送信できるため、ついでにスケッチ内のループ処理時間も情報としてBLE送信してます。
▼送信部のスケッチ抜粋▼
char s[7]; char t[7]; char u[7]; char buf[20]; float freq = 1 / dt; dtostrf(pitch, 1, 1, s); dtostrf(roll, 1, 1, t); dtostrf(freq, 1, 1, u); sprintf(buf, "%s,%s,%s", s, t, u ); int bufSize = strlen(buf); axisCharacteristic.setValue((unsigned char*)buf, bufSize);
取得、算出したroll、pitch回転角度とループ処理時間の3つの値をBLE送信します。3つの値をdtostrf()で少数第一位で整えて、sprintf()でカンマ区切りの文字配列として格納。最後にBLEで送信してます。
Android側アプリ
アプリはMIT APP Inventor2で作成。公式環境ではBLEに対応していないため、テスト環境を使用しています。
画面上方でBLE受信した回転角度をもとにGenuino101の姿勢をワイヤーフレームで可視化。下方ではBLE接続状態や受信した情報をリアルタイムで表示してます。
Genuino101が1台あればこれだけのことが外付け部品いっさい無しで実現できて、さらにスマホを使用すれば制御やモニターができるとは非常に良い世の中になってきたものです。
Genuino101の内蔵機能の個々の使い方はこちらの投稿に集約してます。
コメント
20bite>20byte