M5Stack Gray에 탑재된 가속도 센서 MPU-9250의 보수계 기능을 이용

8242 단어 M5stackmpu9250
(2019/11/23 추가)
신규 로트의 M5Stack Gray에는 MPU-9250이 탑재되어 있지 않기 때문에 본 기사의 내용에 해당되지 않으므로 주의해 주십시오.

본 제품에 탑재된 9축 센서에 대해서, 초기 모델에 탑재된 MPU9250에서, 2019년 8월 14일 당사 입하분 이후는 MPU6886+BMM150이라고 하는 조합으로 변경되었습니다. (2019년 8월 14일)
htps //w w. 슈 tch-s 시엔세. 코 m/타타 g/3648/


MPU-9250에는 DMP(Digital Motion Processor)라는 작은 칩이 타고 있어 보수계나 동작 인터럽트 등의 모션 관련 처리를 움직일 수 있다.
MPU-9250 도착-Sabotenboy's sigh

목적



DMP로 보수계 기능을 실행시켜 M5Stack의 화면에 표시한다.

환경



개발 환경: Arduino IDE(1.8.7) (arduino-esp32 v1.0.1)
장비: M5Stack Gray

구현



DMP로 움직이는 기능의 바이너리를 업로드하는 부분이나, 거기에의 I2C 접속등을 실장할 필요가 있지만, 이것들을 실장 끝난 편리한 라이브러리가 있으므로 그것을 이용한다.

라이브러리 추가



sparkfun/SparkFun_MPU-9250-DMP_Arduino_Library
Arduino IDE에 설치.

라이브러리 편집



그대로 이용하려고 하면 에러가 발생하기 때문에(원래 SparkFun의 제품용의 라이브러리를 위해), 일부 수정.
라이브러리 설치 대상으로 이동 다음 두 가지 사항 편집

/src/util/inv_mpu.c
#define min(X,Y) ((X) < (Y) ? (X) : (Y))
// 上の方(例えば40行目)あたりに追加

/library.properties
architectures=* 

걸음 수를 화면에 표시



다음 코드를 작성합니다. (스케치 예 SparkFun MPU-9250 Digital Motion Processing (DMP) Arduino Library > MPU9250_DMP_Pedometer를 M5Stack용으로 수정)

* 이하의 코드는 무보증입니다. 자기 책임으로 이용하십시오.

MPU9250_DMP_Pedometer.ino
/************************************************************
MPU9250_DMP_Pedometer
 Pedometer example for MPU-9250 DMP Arduino Library 
Jim Lindblom @ SparkFun Electronics
original creation date: November 23, 2016
https://github.com/sparkfun/SparkFun_MPU9250_DMP_Arduino_Library

The MPU-9250's digital motion processor (DMP) can estimate
steps taken -- effecting a pedometer.

After uploading the code, try shaking the 9DoF up and
down at a "stepping speed."

Development environment specifics:
Arduino IDE 1.6.12
SparkFun 9DoF Razor IMU M0

Supported Platforms:
- ATSAMD21 (Arduino Zero, SparkFun SAMD21 Breakouts)
*************************************************************/
#include <M5Stack.h>
#include <SparkFunMPU9250-DMP.h>


MPU9250_DMP imu;

unsigned long stepCount = 0;
unsigned long stepTime = 0;
unsigned long lastStepCount = 0;

void setup() 
{
  M5.begin();

  // Call imu.begin() to verify communication and initialize
  if (imu.begin() != INV_SUCCESS)
  {
    while (1)
    {
      Serial.println("Unable to communicate with MPU-9250");
      Serial.println("Check connections, and try again.");
      Serial.println();
      delay(5000);
    }
  }

  imu.dmpBegin(DMP_FEATURE_PEDOMETER);
  imu.dmpSetPedometerSteps(stepCount);
  imu.dmpSetPedometerTime(stepTime);
  M5.Lcd.setTextSize(4);

  M5.lcd.print("Walked 0 steps");
}

void loop() 
{
  stepCount = imu.dmpGetPedometerSteps();
  stepTime = imu.dmpGetPedometerTime();
  if (stepCount != lastStepCount)
  {
    lastStepCount = stepCount;
    M5.lcd.clear();
    M5.Lcd.setCursor(0,0);
    M5.lcd.print("Walked " + String(stepCount) + " steps");
    M5.lcd.print(" (" + 
              String((float)stepTime / 1000.0) + " s)");
  }
}

동작 이미지





요약



보수계 기능을 쉽게 이용할 수 있었다. 처리는 센서 칩내에서 행해지므로 메인의 처리의 방해도 하지 않을 것.

DMP에는 그 밖에도 기울기 검출 기능이나 탭 기능? 등도 있는 것 같아서 시험해보고 싶다.

좋은 웹페이지 즐겨찾기