はじめに
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 の取り扱いを間違う (縦や横に置く) とセンサー値が変化して曲が変わってしまうため、今回の場合は不都合でした。
#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);
}
ソースコード
こちら です。