본문 바로가기

[ST_MICRO]/STM32G4

[STM32G4 SM EVM] STM32G431 Arduino I2C 테스트 - BMA180 3축 가속도 센서

STM32G4-SM 보드의 I2C는 PB10(SCL), PB11(SDA)에 할당되어 있다.

I2C 인터페이스로 동작하는 BMA180 3축 가속도센서 모듈 을 이용하여 3축 가속도 센서 값을 출력하고 그 값을 이용하여 롤, 피치 기울기 값을 출력하는 예제를 구동해 보자

 

가속도 센서 모듈을 연결할 수 있는 확장 테스트 보드의 핀맵은 아래와 같다.

 

우선 BMA180 3축 가속도 센서의 값을 출력 해 보자

#include <Wire.h>
#include <math.h>
#include "bma180.h"

BMA180 bma180 = BMA180();

void setup()
{
  Wire.begin();
  Serial.begin(115200);
  bma180.setAddress(BMA180_ADDRESS_SDO_LOW);
  bma180.SoftReset();
  bma180.enableWrite();
  bma180.SetFilter(bma180.F10HZ);
  bma180.setGSensitivty(bma180.G15);
  bma180.SetSMPSkip();
  bma180.SetISRMode();
  bma180.disableWrite();
  delay(100);
}


void loop()
{
  bma180.readAccel(&bma180.x, &bma180.y, &bma180.z);

  Serial.print(bma180.x);
  Serial.print(",");
  Serial.print(bma180.y);
  Serial.print(",");
  Serial.println(bma180.z);

  delay(10);
}

 

 

 

 

BMA180 센서 출력값을 이용하여 롤, 피치 기울기 값을 출력 해보자.

void loop()
{
  bma180.readAccel(&bma180.x, &bma180.y, &bma180.z);

  Serial.print(bma180.x);
  Serial.print(",");
  Serial.print(bma180.y);
  Serial.print(",");
  Serial.print(bma180.z);

  float X_out = bma180.getXValFloat();
  float Y_out = bma180.getYValFloat();
  float Z_out = bma180.getZValFloat();

  float roll = atan(Y_out / sqrt(pow(X_out, 2) + pow(Z_out, 2))) * 180 / PI; 
  float pitch = atan(-1 * X_out / sqrt(pow(Y_out, 2) + pow(Z_out, 2))) * 180 / PI; 
  
  Serial.print(",");
  Serial.print(roll);
  Serial.print(",");
  Serial.println(pitch);  

  delay(10);
}

 

processing 코드를 이용하면 좀더 직관적으로 기울기 값을 확인 할 수 있다.

반응형