M5Stack gray의 9축 센서 MPU9250으로 가속도 검출

4187 단어 MPUM5stack

소개



M5Stack gray에 들어있는 9축 IMU의 MPU9250을 움직여 보았습니다.
조금 빠진 점이 있었으므로 내용을 남겨 둡니다.
다만, 시도한 시기에 의존한 문제도 있으므로 그 점은 양해 바랍니다.

MPU9250



3축 가속도, 3축 자이로, 3축 지자기가 결합된 9축 센서입니다.
이른바 자주 있는 x, y, z축의 가속도 센서입니다.
이 기사에서는 가속도만 다룹니다.

데이터시트
레지스터 맵

개발 환경



Arduino IDE

M5Stack 라이브러리 얻기



Arduino IDE의 보드 관리자에서 얻은 M5Stack-Core-ESP32에서는 MPU9250이 작동하지 않았습니다. (2018/10/18 현재 정보)

참고
Doesn't work sample sketch "MP9250BasicAHRS" on M5Stack Gray

I2C 주위에 트러블이 있는 것 같기 때문에, 최신을 gitHub로부터 clone 해 넣습니다. (안정판이 아니므로 다른 문제가 발생할 가능성이 있습니다.)
htps : // 기주 b. 코 m / 에 sp 레시 f / 아 r 즈이 노 에 sp32

설치 방법은 아래 참조
arduino-esp32 설치 방법 (Windows)

clone 대상C:\Users\UserName\Documents\Arduino\hardware\espressif\esp32

샘플을 움직여보세요



우선은 M5Stack의 스케치 예에 MPU9250을 움직일 수 있는 것이 있기 때문에 그것을 실제로 움직여 보겠습니다.

스케치 예/M5Stack/Modules/MPU9250/MPU9250BasicAHRS

MPU9250의 센서값이 LCD에 표시되면 OK입니다.



교정


calibrateMPU9250() 가 캘리브레이션을 실행하고 있습니다.
샘플에서는 setup() 안에서 불립니다.
// Calibrate gyro and accelerometers, load biases in bias registers
IMU.calibrateMPU9250(IMU.gyroBias, IMU.accelBias);

이 함수를 호출하면 MPU9250의 비 휘발 영역에 오프셋 값을 저장하기 때문에 일단 보정 실행 후 호출 할 필요가 없습니다.
나는 캘리브레이션시에는 X, Y를 수평(M5Stack의 LED를 상향)으로 해 실행했습니다. 그 후는 기본 calibrateMPU9250() 는 코멘트 아웃하고 있습니다.

가속도 획득



MPU9250은 자이로·지자기도 취할 수 있습니다만, 우선 가속도만 사용해 봅니다.
가속도는 IMU.ax,ay,az에 저장됩니다.
IMU.ax = (float)IMU.accelCount[0]*IMU.aRes;
IMU.ay = (float)IMU.accelCount[1]*IMU.aRes;
IMU.az = (float)IMU.accelCount[2]*IMU.aRes;

M5Stack이 놓은 방향 감지



여기까지 가속도가 검출되어 있으므로 M5Stack을 둔 방향을 검출하는 코드를 씁니다.

예를 들어, 정지 상태에서 LCD 위로 향하면 이상적으로
Z : 1000mG, X,Y : 0mG
됩니다.
단, 오차가 있으므로 적당하게 임계값을 마련하여 어느 쪽을 향하고 있는지 확인합니다.

ACCEL_THR_MAX 는 하향(거의 1000mG) 걸리는 방향을 검출하기 위한 임계치.
const static uint32_t ACCEL_THR_MAX = 700;
const static uint32_t ACCEL_THR_MIN = 300;

if(az >=  ACCEL_THR_MAX && abs(ax) <= ACCEL_THR_MIN && abs(ay) <= ACCEL_THR_MIN){
  //DETECT_FRONT
}

이것을 전방향분 쓰면 M5Stack를 쓰러뜨린 방향을 가속도 센서로 검출할 수 있습니다.
      if(      ax >=  ACCEL_THR_MAX && abs(ay) <= ACCEL_THR_MIN && abs(az) <= ACCEL_THR_MIN){
        //DETECT_LEFT
      }else if(ax <= -ACCEL_THR_MAX && abs(ay) <= ACCEL_THR_MIN && abs(az) <= ACCEL_THR_MIN){
        //DETECT_RIGHT
      }else if(ay >=  ACCEL_THR_MAX && abs(ax) <= ACCEL_THR_MIN && abs(az) <= ACCEL_THR_MIN){
        //DETECT_TOP
      }else if(ay <= -ACCEL_THR_MAX && abs(ax) <= ACCEL_THR_MIN && abs(az) <= ACCEL_THR_MIN){
        //DETECT_BOTTOM
      }else if(az >=  ACCEL_THR_MAX && abs(ax) <= ACCEL_THR_MIN && abs(ay) <= ACCEL_THR_MIN){
        //DETECT_FRONT
      }else if(az <= -ACCEL_THR_MAX && abs(ax) <= ACCEL_THR_MIN && abs(ay) <= ACCEL_THR_MIN){
        //DETECT_BACK
      }else{
        //not update
      }

샘플



검출하는 M5Stack의 방향에 의해 Avatar로 말하는 표정이 바뀌는 샘플을 만들었습니다.

좋은 웹페이지 즐겨찾기