加速度
- M5StickCに搭載の加速度センサはロットによって異なる
- SH200I or MPU6886
- 今回入荷分はMPU6886
- 参考ページ
- このページの内容をもとに,加速度だけを取得するスケッチを書いてみた。
#include <M5StickC.h>
float accX = 0.0F;
float accY = 0.0F;
float accZ = 0.0F;
void setup() {
M5.begin();
M5.IMU.Init();
}
void loop() {
M5.update();
// データ取得
M5.IMU.getAccelData(&accX, &accY, &accZ);
// モードチェンジ
// プロッタ用のタイトル出力
// Serial.printf("accX,accY,accZ\n");//ここのコメントアウトを外すと,Arduino IDE上のシリアルプロッタのデータラベルが表示される。
// データ出力
Serial.printf("%5.2f,%5.2f,%5.2f\n", accX, accY, accZ);
delay(10);
}
 |
. |
 |
プロッタ |
|
モニタ |
皮膚コンダクタンス,皮膚温,3軸加速度をまとめて出力
- 上にある「インターネット経由の時刻合わせ」をしたうえで,下記のスケッチを読ませると,下図のような出力が得られる。
#include <M5StickC.h>
#include "time.h"
float accX = 0.0F;
float accY = 0.0F;
float accZ = 0.0F;
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
void setup() {
M5.begin();
M5.Lcd.setRotation(3);
M5.Lcd.fillScreen(BLACK);
M5.IMU.Init();
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(40, 0, 2);
struct tm timeInfo;
if (getLocalTime(&timeInfo)) {
// Set RTC time
RTC_TimeTypeDef TimeStruct;
TimeStruct.Hours = timeInfo.tm_hour;
TimeStruct.Minutes = timeInfo.tm_min;
TimeStruct.Seconds = timeInfo.tm_sec;
RTC_DateTypeDef DateStruct;
DateStruct.WeekDay = timeInfo.tm_wday;
DateStruct.Month = timeInfo.tm_mon + 1;
DateStruct.Date = timeInfo.tm_mday;
DateStruct.Year = timeInfo.tm_year + 1900;
}
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
// put your main code here, to run repeatedly:
M5.Rtc.GetTime(&RTC_TimeStruct);
M5.Rtc.GetData(&RTC_DateStruct);
M5.Lcd.setCursor(0, 30);
M5.Lcd.printf("Data: %04d-%02d-%02d(%s)\n", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date,wd[RTC_DateStruct.WeekDay]);
M5.Lcd.printf("Time: %02d : %02d : %02d\n", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds);
int mil = millis();
pinMode(26, INPUT);
}
void loop() {
// 経過時間取得
int mil = millis();
// 加速度データ取得
M5.IMU.getAccelData(&accX, &accY, &accZ);
// GSRデータ取得
int gsrval = analogRead(33);
//Serial.printf("Time,accX,accY,accZ,GSR\n");//ここのコメントアウトを外すと,Arduino IDE上のシリアルプロッタのデータラベルが表示される。
//温度データ取得
float voutT = (float)analogRead(26) / 4095.0 * 3.6 + 0.1132;
float temp = voutT / 0.01;
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
// put your main code here, to run repeatedly:
M5.Rtc.GetTime(&RTC_TimeStruct);
M5.Rtc.GetData(&RTC_DateStruct);
M5.Lcd.setCursor(0, 30);
M5.Lcd.printf("Data: %04d-%02d-%02d(%s)\n", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date,wd[RTC_DateStruct.WeekDay]);
M5.Lcd.printf("Time: %02d : %02d : %02d\n", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds);
// データ出力
Serial.printf("%04d-%02d-%02d, %02d:%02d:%02d, ", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date, RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds);
Serial.printf("%6d, %5.2f, %5.2f, %5.2f, %4d, %4.1f\n", mil, accX, accY, accZ, gsrval, temp);
delay(100);
}
