M5StickCでできること 〜加速度センサでデータ採取できる時間間隔

M5StickCには、MPU6886という加速度センサが搭載されています(初期モデルにはSH200Qが搭載されています)。

今回は、このMPU6886を使って、どのぐらいの時間間隔で加速度情報を採取できるか確認してみました。


まずは比較のため、以下のようなスケッチを準備しました。
1秒間に何回loop関数をとおったかをシリアルモニタに表示するだけのものです。

#include <M5StickC.h>
  
unsigned long currentTime;
unsigned long prevTime=0;
unsigned long cnt=0;

void setup() {
  M5.begin();
}

void loop() {
  cnt++;

  currentTime=millis();
  if(currentTime-prevTime>=1000) {
    Serial.println(cnt);
    cnt=0;
    prevTime=currentTime;
  }
}

このスケッチを実行したところ、loop関数を1秒間に755390回とおっていました。

次に、加速度センサの初期化処理を追加しました。

#include <M5StickC.h>
  
unsigned long currentTime;
unsigned long prevTime=0;
unsigned long cnt=0;

void setup() {
  M5.begin();
  M5.Imu.Init();
}

void loop() {
  cnt++;

  currentTime=millis();
  if(currentTime-prevTime>=1000) {
    Serial.println(cnt);
    cnt=0;
    prevTime=currentTime;
  }
}

結果は755323回で、初期化処理を追加する前からほとんど変化はありませんでした。

次に、以下のとおり、加速度情報を採取するための処理を追加しました。

#include <M5StickC.h>
  
unsigned long currentTime;
unsigned long prevTime=0;
unsigned long cnt=0;

float accX = 0.0f;
float accY = 0.0f;
float accZ = 0.0f;

void setup() {
  M5.begin();
  M5.Imu.Init();
}

void loop() {
  M5.IMU.getAccelData(&accX, &accY, &accZ);
  cnt++;

  currentTime=millis();
  if(currentTime-prevTime>=1000) {
    Serial.println(cnt);
    cnt=0;
    prevTime=currentTime;
  }
}

結果は3333回となりました。

次に、以下のとおり、前回採取した加速度情報と今回採取した情報を比較するための処理を追加し、採取値が変化したときだけカウントするようにしました。

#include <M5StickC.h>
  
unsigned long currentTime;
unsigned long prevTime=0;
unsigned long cnt=0;

float accX = 0.0f;
float accY = 0.0f;
float accZ = 0.0f;
float prevX = 0.0f;
float prevY = 0.0f;
float prevZ = 0.0f;

void setup() {
  M5.begin();
  M5.Imu.Init();
}

void loop() {
  M5.IMU.getAccelData(&accX, &accY, &accZ);
  if(accX!=prevX || accY!=prevY || accZ!=prevZ) {
    cnt++;
    prevX=accX;
    prevY=accY;
    prevZ=accZ;
  }

  currentTime=millis();
  if(currentTime-prevTime>=1000) {
    Serial.println(cnt);
    cnt=0;
    prevTime=currentTime;
  }
}

結果は167回となりました。
別のM5StickCで確認したところ、そちらのデバイスでは168回でした。

M5StickC搭載の加速度センサ(MPU6886)では、1秒間に160回程度、データを採取できることがわかりました。

なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。


このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。