Hi,
Iam trying to read data from MPU6050 using following code
/*
* This sketch is used to read raw data(accelrometer and gyro) from mpu6050
*
* The Following registers have to be configured / used to get the data from mpu6050
*
* Register Name Address (in HEX) VALUE
* Power Management Register 6B 0b00000000
* GYRO Configuration 1B 0b00000000
* ACCELEROMTER Config 1C 0b00000000
* Gyro Readings 43,44,45,46,47,48 43 X_OUT[15:8] , 44 X_OUT[7:0] , Y , Z
* Acceleromter Readings 3B,3C,3D,3E,3F,40 3B ACC_X_OUT[15:8] , 3C ACC_X_OUT[7:0] , Y , Z
*
* Upon power up MPU6050 will go to sleep, we need to set the sleep bit to 0 to put the system in wake mode
* Gyro/Acceler Config is used to set the Full scale setting for Gyro/Accelerometer. selected Full Scale are 200 degrees / seconds for gyro and 2g for accelerometers
* For selected FS Sensitivity scale factor's are 131 for gyro and 16384 for accelrometer.
*
* For more info see
* Data sheet - https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf
* Register Description - https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf
*
*/
#include <Wire.h>
#define GYRO_SENSITIVITY_SCALE_FACTOR 131 //for 200 degrees / sec
#define ACCR_SENSITIVITY_SCALE_FACTOR 16384 // for 2g
#define MPU6050_ADDR 0b1101000
#define PWR_REG_ADDR 0x6B
#define GYRO_CONFIG_REG_ADDR 0x1B
#define ACCR_CONFIG_REG_ADDR 0x1C
#define GYRO_READ_START_ADDR 0x43
#define ACCR_READ_START_ADDR 0x3B
long accrX,accrY,accrZ;
float gForceX,gForceY,gForceZ;
long gyroX,gyroY,gyroZ;
float rotX,rotY,rotZ;
void setup() {
Wire.begin();
Serial.begin(115200);
setUpMPU();
}//end of setup
void loop() {
readAccrRegisters();
readGyroRegisters();
printData();
delay(100);
}//end of loop
/*
* this function is used to
* - put the MPU out of sleep mode
* - set the GYRO Full Scale Range
* - set the Acceleromter Full Scale Range
*/
void setUpMPU(){
//Power Register
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(PWR_REG_ADDR);//Access the power register
Wire.write(0b00000000);
Wire.endTransmission();
//Gyro Config
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(GYRO_CONFIG_REG_ADDR);
Wire.write(0b00000000);
Wire.endTransmission();
//Accr Config
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(ACCR_CONFIG_REG_ADDR);
Wire.write(0b00000000);
Wire.endTransmission();
}//end of setUpMPU Fcn
void readAccrRegisters(){
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(ACCR_READ_START_ADDR);
Wire.end();
Wire.requestFrom(MPU6050_ADDR,6);
while(Wire.available() < 6); // wait until 6 bytes received i.e burst read
accrX = Wire.read() << 8 | Wire.read(); //store first two bytes
accrY = Wire.read() << 8 | Wire.read();
accrZ = Wire.read() << 8 | Wire.read();
processAccrData();
}//end of readAccrRegisters Fcn
void readGyroRegisters(){
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(GYRO_READ_START_ADDR);
Wire.end();
Wire.requestFrom(MPU6050_ADDR,6);
while(Wire.available() < 6);
gyroX = Wire.read() << 8 | Wire.read();
gyroY = Wire.read() << 8 | Wire.read();
gyroZ = Wire.read() << 8 | Wire.read();
processGyroData();
}//end of readGyroRegisters Fcn
void printData(){
Serial.print("Gyro ");
Serial.print("X - ");
Serial.print(rotX);
Serial.print(" Y - ");
Serial.print(rotY);
Serial.print(" Z - ");
Serial.println(rotZ);
Serial.print("Accr ");
Serial.print("X - ");
Serial.print(gForceX);
Serial.print(" Y - ");
Serial.print(gForceY);
Serial.print(" Z - ");
Serial.println(gForceZ);
}//end of printData Fcn
void processAccrData(){
gForceX = accrX / ACCR_SENSITIVITY_SCALE_FACTOR;
gForceY = accrY / ACCR_SENSITIVITY_SCALE_FACTOR;
gForceZ = accrZ / ACCR_SENSITIVITY_SCALE_FACTOR;
}//end of processAccrData Fcn
void processGyroData(){
rotX = gyroX / GYRO_SENSITIVITY_SCALE_FACTOR;
rotY = gyroY / GYRO_SENSITIVITY_SCALE_FACTOR;
rotZ = gyroZ / GYRO_SENSITIVITY_SCALE_FACTOR;
}//end of processGyroData Fcn
Iam getting the following output.
Gyro X - 35.00 Y - 37.00 Z - -232.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -218.00 Y - 187.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 5.00 Y - 7.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - -237.00 Z - 5.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 79.00 Y - 214.00 Z - -78.00
Accr X - 0.00 Y - 0.00 Z - -1.00
Gyro X - 21.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - -1.00 Y - 0.00 Z - 1.00
Gyro X - 0.00 Y - 35.00 Z - 37.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -240.00 Y - -207.00 Z - 187.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -63.00 Y - 39.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - -237.00
Accr X - 1.00 Y - 0.00 Z - 0.00
Gyro X - 11.00 Y - 79.00 Z - 214.00
Accr X - -1.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 21.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - -1.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 35.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 181.00 Y - -189.00 Z - -209.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - -52.00 Z - 1.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 1.00 Z - 0.00
Gyro X - -14.00 Y - 11.00 Z - 79.00
Accr X - 1.00 Y - -1.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 21.00
Accr X - -1.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - -1.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 40.00 Y - 189.00 Z - -242.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -125.00 Y - 0.00 Z - -44.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 1.00
Gyro X - 1.00 Y - -14.00 Z - 11.00
Accr X - 0.00 Y - 1.00 Z - -1.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - -1.00 Y - -1.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -234.00 Y - 68.00 Z - 212.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - -125.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 1.00 Z - 0.00
Gyro X - -38.00 Y - 1.00 Z - -14.00
Accr X - 0.00 Y - 0.00 Z - 1.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - -1.00 Z - -1.00
Gyro X - 157.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -236.00 Y - 215.00 Z - 17.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - -125.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 211.00 Y - 3.00 Z - 3.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 5.00 Y - -38.00 Z - 1.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - -78.00 Y - 0.00 Z - 0.00
Accr X - -1.00 Y - 0.00 Z - -1.00
Gyro X - 0.00 Y - 157.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 1.00 Y - 0.00 Z - 0.00
Gyro X - 37.00 Y - -193.00 Z - -97.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 207.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Gyro X - 0.00 Y - 0.00 Z - 0.00
Accr X - 0.00 Y - 0.00 Z - 0.00
Why iam getting random spikes in Gyro data ? Is it normal ?
Iam using GY-521 Module. Connected Arduino 5v to Module VCC.
is there something wrong with the code ?
or module faulty ?