M5StickC のジャイロセンサー (MPU6886) を使って ワイヤレススピーカーシステム Sonos を操作してみた。


はじめに

M5Stack Advent Calendar 2019 17 日目の記事「M5Stack / M5StickC で Sonos を操作してみた。」の発展形になります。

SONOS Japan User Group に他の記事もあるので参考になります。

やったこと

M5StickC のボタン操作で「曲の巻き戻し」「音楽再生の一時停止・再開」「曲の先送り」を行なっていましたが、M5StickC に搭載されているジャイロセンサー「MPU6886」を使用して M5StickC の回転操作でも「曲の巻き戻し」「曲の先送り」を行えるようにしました。

動画

ジャイロセンサー (MPU6886) の動作確認

まずは簡単なコードを書いてジャイロセンサー (MPU6886) の動作を確認します。
Arduino IDE のシリアルプロッタの機能を使用してセンター値を見える化 (グラフ化) します。
M5StickC を動かしながらそれぞれの値がどのように変化するか観察します。
今回の場合は Y 軸ジャイロセンサー値 (gyroY) が ± 50.0 以上 (左回転の場合は -50.0以下、右回転の場合は +50.0以上) に変化した場合をトリガーにしました。
最初、加速度センサー値 (Accel) を使用する予定でしたが、 M5StickC の傾きに応じて加速度センサー値が変化するので、M5StickC の取り扱いを間違う (縦や横に置く) とセンサー値が変化して曲が変わってしまうため、今回の場合は不都合でした。

(ジャイロセンサー値の変化)

(加速度センサー値の変化)

M5StickC_MPU6886.ino
#include <M5StickC.h>

float gyroX, gyroY, gyroZ;  // ジャイロデータ取得 →回転(左90 0/-50/0, 右90 0/50/0)
float ax, ay, az;  // 加速度データ取得 →傾き(X/Y/Z: 正 0/0/1, 左90 1/0/0, 右90 -1/0/0, 上90 0/-1/0, 下90 0/1/0)

void setup() {
  Serial.begin(115200);
  M5.begin();
  M5.MPU6886.Init();
}
void loop() {
  M5.MPU6886.getGyroData(&gyroX, &gyroY, &gyroZ);
  M5.MPU6886.getAccelData(&ax, &ay, &az);
  M5.Lcd.setCursor(0, 30);

  M5.Lcd.printf("X:%7.2f\nY:%7.2f\nZ:%7.2f mg", gyroX * M5.MPU6886.gRes, gyroY * M5.MPU6886.gRes, gyroZ * M5.MPU6886.gRes);
  Serial.printf("%7.2f,%7.2f,%7.2f\n", gyroX * M5.MPU6886.gRes, gyroY * M5.MPU6886.gRes, gyroZ * M5.MPU6886.gRes);
  M5.Lcd.printf("X:%7.2f\nY:%7.2f\nZ:%7.2f mg", ax , ay , az );
  Serial.printf("%7.2f,%7.2f,%7.2f\n", ax , ay , az);

  delay(50);
}

ソースコード

こちら です。