Dcube Tech Ventures
Published

Interfacing of 3-Axis Gyroscope Sensor BMG160 With Particle

BMG160 is basically a 16-bit, digital, triaxial, gyroscope sensor which can measure angular rates.

IntermediateProtip4 hours653
Interfacing of 3-Axis Gyroscope Sensor BMG160 With Particle

Things used in this project

Hardware components

ControlEverything.com BMG160 16-bit Triaxial Gyroscope
×1
Photon
Particle Photon
×1
I²C Cable
×1
ControlEverything.com Particle Photon Compatible I2C Shield
×1

Story

Read more

Schematics

BMG160

Code

Particle Code

C/C++
#include
#include 
// BMG160 I2C address is 0x68(104)
#define Addr 0x68
int xGyro = 0, yGyro = 0, zGyro = 0;
void setup()
{    
// Set variable    
Particle.variable("i2cdevice","BMG160");    
Particle.variable("xGyro",xGyro);    
Particle.variable("yGyro",yGyro);    
Particle.variable("zGyro",zGyro);
// Initialise I2C communication as MASTER     
Wire.begin();    
// Initialise Serial Communication    
Serial.begin(9600);        
// Start I2C Transmission    
Wire.beginTransmission(Addr);    
// Select Range register    
Wire.write(0x0F);    
// Configure full scale 2000 dps    
Wire.write(0x80);    
// Stop I2C Transmission    
Wire.endTransmission();        
// Start I2C Transmission    
Wire.beginTransmission(Addr);    
// Select Bandwidth register    
Wire.write(0x10);    
// Set Bandwidth = 200 Hz    
Wire.write(0x04);    
// Stop I2C Transmission    
Wire.endTransmission();    
delay(300);
}
void loop()
{    
unsigned int data[6];    
// Start I2C Transmission    
Wire.beginTransmission(Addr);    
// Select data register   
Wire.write(0x02);    
// Stop I2C Transmission    
Wire.endTransmission();    
// Request 6 bytes of data    
Wire.requestFrom(Addr, 6);    
// Read 6 bytes of data    
// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb    
if(Wire.available() == 6)    
{        
data[0] = Wire.read();        
data[1] = Wire.read();        
data[2] = Wire.read();        
data[3] = Wire.read();        
data[4] = Wire.read();        
data[5] = Wire.read();   
 }    
delay(300);
// Convert the data    
xGyro = ((data[1] * 256) + data[0]);   
if (xGyro > 32767)    
{       
 xGyro -= 65536;    
}    
yGyro = ((data[3] * 256) + data[2]);    
if (yGyro > 32767)    
{
yGyro -= 65536;    
}    
zGyro = ((data[5] * 256) + data[4]);    
if (zGyro > 32767)   
{
zGyro -= 65536;    
}        
// Output data to dashboard    
Particle.publish("X-Axis of Rotation :",  String(xGyro));    
Particle.publish("Y-Axis of Rotation :",  String(yGyro));    
Particle.publish("Z-Axis of Rotation :",  String(zGyro));    
delay(1000);
}

Credits

Dcube Tech Ventures

Dcube Tech Ventures

34 projects • 16 followers
Dcube Tech Ventures Pvt Limited is collaboration of Hardware, Embedded and Software endeavour's to create the Internet of things. www.dcubestore.com

Comments