1. kitazaki

    Posted

    kitazaki
Changes in title
+M5StickC のジャイロセンサー (MPU6886) を使って ワイヤレススピーカーシステム Sonos を操作してみた。
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,50 @@
+# はじめに
+<A HREF="https://qiita.com/advent-calendar/2019/m5stack">M5Stack Advent Calendar 2019</A> 17 日目の記事「<A HREF="https://qiita.com/kitazaki/items/005bda4e3c809ffaa9eb">M5Stack / M5StickC で Sonos を操作してみた。</A>」の発展形になります。
+
+# やったこと
+M5StickC のボタン操作で「曲の巻き戻し」「音楽再生の一時停止・再開」「曲の先送り」を行なっていましたが、M5StickC に搭載されているジャイロセンサー「MPU6886」を使用して M5StickC の回転操作でも「曲の巻き戻し」「曲の先送り」を行えるようにしました。
+<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/91a257c0-60b0-8480-f9bc-4fcf5552e745.png" width="50%">
+
+## 動画
+<A HREF="https://youtu.be/P7keDcvDNog"><img width="75%" alt="スクリーンショット 2020-01-12 15.53.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/58e3762d-e148-0b8d-6a16-d9499d8b5751.png"></A>
+
+# ジャイロセンサー (MPU6886) の動作確認
+まずは簡単なコードを書いてジャイロセンサー (MPU6886) の動作を確認します。
+Arduino IDE のシリアルプロッタの機能を使用してセンター値を見える化 (グラフ化) します。
+M5StickC を動かしながらそれぞれの値がどのように変化するか観察します。
+今回の場合は Y 軸ジャイロセンサー値 (gyroY) が ± 50.0 以上 (左回転の場合は -50.0以下、右回転の場合は +50.0以上) に変化した場合をトリガーにしました。
+最初、加速度センサー値 (Accel) を使用する予定でしたが、 M5StickC の傾きに応じて加速度センサー値が変化するので、M5StickC の取り扱いを間違う (縦や横に置く) とセンサー値が変化して曲が変わってしまうため、今回の場合は不都合でした。
+
+(ジャイロセンター値の変化)
+<img width="75%" alt="getGyroData.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e2d2e170-91e0-6ca9-b6d3-c7d098439287.png">
+
+(加速度センサー値の変化)
+<img width="75%" alt="getAccelData.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/3980c7db-c315-740a-ace6-7cde0e6228bb.png">
+
+```c++: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);
+}
+```
+
+## ソースコード
+<A HREF="https://github.com/kitazaki/sonos/blob/master/examples/Sonos_Controller_M5StickC_2/Sonos_Controller_M5StickC_2.ino">こちら</A> です。