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 hours660
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
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
Contact

Comments

Please log in or sign up to comment.