

The MPU 6050 is a 6-axis motion tracking device that combines a 3-axis gyroscope and a 3-axis accelerometer on a single chip. This compact and versatile sensor is widely used in applications requiring motion sensing and orientation detection. Its ability to measure angular velocity and linear acceleration makes it ideal for robotics, drones, smartphones, gaming devices, and wearable technology.








The MPU 6050 is a highly integrated device with the following key specifications:
| Parameter | Value |
|---|---|
| Supply Voltage | 2.375V to 3.46V |
| Logic Voltage Level | 1.8V to VDD |
| Gyroscope Range | ±250, ±500, ±1000, ±2000 °/s |
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
| Communication Interface | I2C (up to 400kHz) |
| Operating Temperature | -40°C to +85°C |
| Power Consumption | 3.9mA (typical) |
| Package | 4x4x0.9mm QFN |
The MPU 6050 has 8 pins, as described in the table below:
| Pin | Name | Description |
|---|---|---|
| 1 | VDD | Power supply input (2.375V to 3.46V). |
| 2 | VLOGIC | Logic voltage input (1.8V to VDD). |
| 3 | GND | Ground connection. |
| 4 | SCL | I2C clock line. Connect to the microcontroller's I2C clock pin. |
| 5 | SDA | I2C data line. Connect to the microcontroller's I2C data pin. |
| 6 | AD0 | I2C address select. Connect to GND (address 0x68) or VDD (address 0x69). |
| 7 | INT | Interrupt output. Can be used to signal data availability or motion detection. |
| 8 | RESV | Reserved. Leave unconnected. |
Below is an example of how to interface the MPU 6050 with an Arduino UNO using the I2C protocol:
#include <Wire.h>
// MPU 6050 I2C address (default is 0x68 when AD0 is connected to GND)
const int MPU_ADDR = 0x68;
// Variables to store raw accelerometer and gyroscope data
int16_t accelX, accelY, accelZ;
int16_t gyroX, gyroY, gyroZ;
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication for debugging
// Wake up the MPU 6050 (it starts in sleep mode)
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x6B); // Access the power management register
Wire.write(0); // Set to 0 to wake up the sensor
Wire.endTransmission();
}
void loop() {
// Request accelerometer and gyroscope data
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x3B); // Starting register for accelerometer data
Wire.endTransmission(false);
Wire.requestFrom(MPU_ADDR, 14, true); // Request 14 bytes of data
// Read accelerometer data
accelX = Wire.read() << 8 | Wire.read();
accelY = Wire.read() << 8 | Wire.read();
accelZ = Wire.read() << 8 | Wire.read();
// Skip temperature data (2 bytes)
Wire.read();
Wire.read();
// Read gyroscope data
gyroX = Wire.read() << 8 | Wire.read();
gyroY = Wire.read() << 8 | Wire.read();
gyroZ = Wire.read() << 8 | Wire.read();
// Print the data to the Serial Monitor
Serial.print("Accel X: "); Serial.print(accelX);
Serial.print(" | Accel Y: "); Serial.print(accelY);
Serial.print(" | Accel Z: "); Serial.println(accelZ);
Serial.print("Gyro X: "); Serial.print(gyroX);
Serial.print(" | Gyro Y: "); Serial.print(gyroY);
Serial.print(" | Gyro Z: "); Serial.println(gyroZ);
delay(500); // Wait for 500ms before the next reading
}
No Data or Incorrect Readings:
I2C Communication Errors:
Inconsistent or Noisy Data:
Interrupt Pin Not Working:
Q: Can the MPU 6050 be used with a 5V microcontroller?
A: Yes, but you must use a logic level shifter for the I2C lines, as the MPU 6050 operates at 3.3V logic.
Q: How do I calibrate the MPU 6050?
A: Calibration involves determining and compensating for offsets in the accelerometer and gyroscope readings. This can be done in software by averaging multiple readings when the sensor is stationary.
Q: What is the maximum sampling rate of the MPU 6050?
A: The MPU 6050 supports a maximum sampling rate of 1kHz for both the accelerometer and gyroscope.
Q: Can I use the MPU 6050 for tilt detection?
A: Yes, the accelerometer data can be used to calculate tilt angles relative to the Earth's gravity.