さて、昨日の記事でM5StickCのセットアップとArduino IDEの使い方は解説した。今日は加速度センサをつかってみよう。
まずはサンプルスケッチコードの実行から。
#include <M5StickC.h>
float accX = 0.0F;
float accY = 0.0F;
float accZ = 0.0F;
float gyroX = 0.0F;
float gyroY = 0.0F;
float gyroZ = 0.0F;
void setup() {
M5.begin();
M5.Sh200Q.Init();
M5.Lcd.setRotation(3);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(0, 15);
M5.Lcd.println(" X Y Z");
}
void loop() {
M5.Sh200Q.getGyroData(&gyroX,&gyroY,&gyroZ);
M5.Sh200Q.getAccelData(&accX,&accY,&accZ);
M5.Lcd.setCursor(0, 30);
M5.Lcd.printf("%6.2f %6.2f %6.2f ", gyroX, gyroY, gyroZ);
M5.Lcd.setCursor(140, 30);
M5.Lcd.print("o/s");
M5.Lcd.setCursor(0, 45);
M5.Lcd.printf(" %5.2f %5.2f %5.2f ", accX, accY, accZ);
M5.Lcd.setCursor(140, 45);
M5.Lcd.print("G");
delay(1000);
}

もうあっさりと動いた。上の列が傾き、下の列が加速度を表示していいる。地球の重力は1Gなので、ちゃんとZ軸には1G(1.13だけど)が表示されている。
さて、今日は何を作るの?
センサの値を読んで、X・Y・Z軸いずれか閾値を超えたら、画面が赤くなるだけという機械を作ってみようと思う。何の役に立つのかは聞かないでほしい。タクシーの乱暴運転度を計測するとか、自分がころんだことを検知するとか、いろいろ活用できるにちがいないよ。
#include <M5StickC.h>
float accX = 0.0F;
float accY = 0.0F;
float accZ = 0.0F;
float accX_max = 0.5F; //X軸方向の閾値(超えたら光る)
float accY_max = 0.5F; //X軸方向の閾値
float accZ_max = 1.5F; //X軸方向の閾値
void setup() {
M5.begin();
M5.Sh200Q.Init();
M5.Lcd.setRotation(3);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(0, 15);
M5.Lcd.println(" X Y Z");
}
void loop() {
// まず加速度の値をとる
M5.Sh200Q.getAccelData(&accX,&accY,&accZ);
// 加速度の値を表示する
M5.Lcd.setCursor(0, 30);
// 閾値を超えた場合
if(accX > accX_max | accY > accY_max | accZ > accZ_max) {
// 背景を赤くする
M5.Lcd.fillScreen(RED);
}
// 加速度の値を表示する
M5.Lcd.printf(" %5.2f %5.2f %5.2f ", accX, accY, accZ);
delay(1000);
// 1秒まって背景を黒に戻す
M5.Lcd.fillScreen(BLACK);
}
さあ結果はどうか

まずは黒。加速度は閾値の下。
さあ、M5StickCをもってブンブンふりまします。

はいっ。Y軸の加速度が閾値を超えたため、画面が赤く光りました。今夜は以上です。
この記事へのコメントはありません。