upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
Public Member Functions | Protected Attributes

API for the BMI055 6-axis Sensor Module. More...

Detailed Description

The BMI055 is an inertial measurement unit (IMU) for the detection of movements and rotations in 6 degrees of freedom (6DoF). It reflects the full functionality of a triaxial, low-g acceleration sensor and at the same time it is capable to measure angular rates. Both - acceleration and angular rate - in three perpendicular room dimensions, the x-, y- and z-axis.

The BMI055 is essentially 2 separate devices in one: the BMA250E Accelerometer and the BMG160 Gyroscope. They are completely independent of each other.

This driver provides a very simple interface to these two devices. If finer control is desired, you should just use the separate BMA25E and BMG160 device classes directly. This driver simply initializes both devices, and provides a mechanism to read accelerometer and gyroscope data from them.

// Instantiate an BMI055 using default I2C parameters
upm::BMI055 sensor;
// now output data every 250 milliseconds
while (shouldRun) {
float x, y, z;
sensor.update();
sensor.getAccelerometer(&x, &y, &z);
cout << "Accelerometer x: " << x << " y: " << y << " z: " << z << " g" << endl;
sensor.getGyroscope(&x, &y, &z);
cout << "Gyroscope x: " << x << " y: " << y << " z: " << z << " degrees/s" << endl;
cout << endl;
upm_delay_us(250000);
}

Public Member Functions

 BMI055 (int accelBus=BMA250E_DEFAULT_I2C_BUS, int accelAddr=BMA250E_DEFAULT_ADDR, int accelCS=-1, int gyroBus=BMG160_DEFAULT_I2C_BUS, int gyroAddr=BMG160_DEFAULT_ADDR, int gyroCS=-1)
 
 ~BMI055 ()
 
void update ()
 
void initAccelerometer (BMA250E_POWER_MODE_T pwr=BMA250E_POWER_MODE_NORMAL, BMA250E_RANGE_T range=BMA250E_RANGE_2G, BMA250E_BW_T bw=BMA250E_BW_250)
 
void initGyroscope (BMG160_POWER_MODE_T pwr=BMG160_POWER_MODE_NORMAL, BMG160_RANGE_T range=BMG160_RANGE_250, BMG160_BW_T bw=BMG160_BW_400_47)
 
void getAccelerometer (float *x, float *y, float *z)
 
std::vector< float > getAccelerometer ()
 
void getGyroscope (float *x, float *y, float *z)
 
std::vector< float > getGyroscope ()
 

Protected Attributes

BMA250Em_accel
 
BMG160m_gyro
 

Constructor & Destructor Documentation

BMI055 ( int  accelBus = BMA250E_DEFAULT_I2C_BUS,
int  accelAddr = BMA250E_DEFAULT_ADDR,
int  accelCS = -1,
int  gyroBus = BMG160_DEFAULT_I2C_BUS,
int  gyroAddr = BMG160_DEFAULT_ADDR,
int  gyroCS = -1 
)

BMI055 constructor.

This device can support both I2C and SPI. For SPI, set the addr to -1, and specify a positive integer representing the Chip Select (CS) pin for the cs argument. If you are using a hardware CS pin (like edison with arduino breakout), then you can connect the proper pin to the hardware CS pin on your MCU and supply -1 for cs. The default operating mode is I2C.

Parameters
accelBusI2C or SPI bus to use. -1 to skip initializing this device.
accelAddrThe address for this device. -1 for SPI.
accelCSThe gpio pin to use for the SPI Chip Select. -1 for I2C or for SPI with a hardware controlled pin.
gyroBusI2C or SPI bus to use. -1 to skip initializing this device.
gyroAddrThe address for this device. -1 for SPI.
gyroCSThe gpio pin to use for the SPI Chip Select. -1 for I2C or for SPI with a hardware controlled pin.

Here is the call graph for this function:

~BMI055 ( )

BMI055 Destructor.

Member Function Documentation

void update ( void  )

Update the internal stored values from sensor data.

Here is the call graph for this function:

void initAccelerometer ( BMA250E_POWER_MODE_T  pwr = BMA250E_POWER_MODE_NORMAL,
BMA250E_RANGE_T  range = BMA250E_RANGE_2G,
BMA250E_BW_T  bw = BMA250E_BW_250 
)

Initialize the accelerometer and start operation. This function is called from the constructor so will not typically need to be called by a user unless the device is reset or you want to change these values.

Parameters
pwrOne of the BMA250E_POWER_MODE_T values. The default is BMA250E_POWER_MODE_NORMAL.
rangeOne of the BMA250E_RANGE_T values. The default is BMA250E_RANGE_2G.
bwOne of the filtering BMA250E_BW_T values. The default is BMA250E_BW_250.

Here is the call graph for this function:

void initGyroscope ( BMG160_POWER_MODE_T  pwr = BMG160_POWER_MODE_NORMAL,
BMG160_RANGE_T  range = BMG160_RANGE_250,
BMG160_BW_T  bw = BMG160_BW_400_47 
)

Initialize the gyroscope and start operation. This function is called from the constructor so will not typically need to be called by a user unless the device is reset or you want to change these values.

Parameters
pwrOne of the BMG160_POWER_MODE_T values. The default is BMG160_POWER_MODE_NORMAL.
rangeOne of the BMG160_RANGE_T values. The default is BMG160_RANGE_250.
bwOne of the filtering BMG160_BW_T values. The default is BMG160_BW_400_47.

Here is the call graph for this function:

void getAccelerometer ( float *  x,
float *  y,
float *  z 
)

Return accelerometer data in gravities. update() must have been called prior to calling this method.

Parameters
xPointer to a floating point value that will have the current x component placed into it.
yPointer to a floating point value that will have the current y component placed into it.
zPointer to a floating point value that will have the current z component placed into it.

Here is the call graph for this function:

std::vector< float > getAccelerometer ( )

Return accelerometer data in gravities in the form of a floating point vector. update() must have been called prior to calling this method.

Returns
A floating point vector containing x, y, and z in that order.

Here is the call graph for this function:

void getGyroscope ( float *  x,
float *  y,
float *  z 
)

Return gyroscope data in degrees per second. update() must have been called prior to calling this method.

Parameters
xPointer to a floating point value that will have the current x component placed into it.
yPointer to a floating point value that will have the current y component placed into it.
zPointer to a floating point value that will have the current z component placed into it.

Here is the call graph for this function:

std::vector< float > getGyroscope ( )

Return gyroscope data in degrees per second in the form of a floating point vector. update() must have been called prior to calling this method.

Returns
A floating point vector containing x, y, and z in that order.

Here is the call graph for this function:

Collaboration diagram for BMI055:
Collaboration graph
[legend]

The documentation for this class was generated from the following files: