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 코드를 이용하면 좀더 직관적으로 기울기 값을 확인 할 수 있다.
반응형