Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

How to Use MPU6050: Examples, Pinouts, and Specs

Image of MPU6050Design with MPU6050 in Cirkit Designer

Introduction

The MPU6050 is a 6-axis motion tracking device that combines a 3-axis gyroscope and a 3-axis accelerometer on a single chip. This integration enables the measurement of angular velocity and acceleration in three-dimensional space, making it a versatile and widely used sensor in motion tracking applications.

Explore Projects Built with MPU6050

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Image of ESP32-Controlled Multi-MPU6050 and MPU9250 IMU Data Aggregator: A project utilizing MPU6050 in a practical application
ESP32-Controlled Multi-MPU6050 and MPU9250 IMU Data Aggregator

This circuit features an ESP32 microcontroller interfaced with multiple MPU-6050 sensors and a single MPU-9250 sensor through an Adafruit TCA9548A I2C multiplexer, allowing for the reading of multiple inertial measurement units (IMUs) over the same I2C bus. The ESP32 collects and processes acceleration and gyroscopic data from the sensors to calculate angles in the X and Y axes. Power management is handled by a TP4056 charging module and an AMS1117 voltage regulator, which together with two 18650 Li-ion batteries, provide a stable power supply for the microcontroller and sensors.

Open Project in Cirkit Designer

Common Applications and Use Cases

Technical Specifications

The MPU6050 is a highly integrated sensor 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)
Dimensions 4x4x0.9 mm (QFN package)

Pin Configuration and Descriptions

The MPU6050 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.
5 SDA I2C data line.
6 AD0 I2C address select (connect to GND for 0x68 or VDD for 0x69).
7 INT Interrupt output (active high, can be used for motion detection).
8 RESV Reserved pin (leave unconnected).

Usage Instructions

How to Use the MPU6050 in a Circuit

  1. Power Supply: Connect the VDD pin to a 3.3V power source and the GND pin to ground. If your microcontroller operates at 5V logic, use a level shifter for the I2C lines.
  2. I2C Communication: Connect the SCL and SDA pins to the corresponding I2C pins on your microcontroller. Use pull-up resistors (typically 4.7kΩ) on both lines.
  3. Address Selection: Set the I2C address by connecting the AD0 pin to GND (address 0x68) or VDD (address 0x69).
  4. Interrupt Pin: Optionally, connect the INT pin to a GPIO pin on your microcontroller to handle motion detection interrupts.

Important Considerations and Best Practices

Example Code for Arduino UNO

Below is an example of how to interface the MPU6050 with an Arduino UNO using the Wire library:

#include <Wire.h>

// MPU6050 I2C address (default is 0x68 when AD0 is connected to GND)
const int MPU6050_ADDR = 0x68;

// MPU6050 register addresses
const int PWR_MGMT_1 = 0x6B; // Power management register
const int ACCEL_XOUT_H = 0x3B; // Accelerometer X-axis high byte

void setup() {
  Wire.begin(); // Initialize I2C communication
  Serial.begin(9600); // Initialize serial communication for debugging

  // Wake up the MPU6050 (it starts in sleep mode)
  Wire.beginTransmission(MPU6050_ADDR);
  Wire.write(PWR_MGMT_1); // Access power management register
  Wire.write(0); // Set to 0 to wake up the sensor
  Wire.endTransmission();

  Serial.println("MPU6050 initialized");
}

void loop() {
  // Request accelerometer data
  Wire.beginTransmission(MPU6050_ADDR);
  Wire.write(ACCEL_XOUT_H); // Start reading from ACCEL_XOUT_H register
  Wire.endTransmission(false); // Send restart condition
  Wire.requestFrom(MPU6050_ADDR, 6); // Request 6 bytes (X, Y, Z high and low)

  if (Wire.available() == 6) {
    int16_t accelX = (Wire.read() << 8) | Wire.read(); // Combine high and low bytes
    int16_t accelY = (Wire.read() << 8) | Wire.read();
    int16_t accelZ = (Wire.read() << 8) | Wire.read();

    // Print accelerometer values
    Serial.print("Accel X: "); Serial.print(accelX);
    Serial.print(" | Accel Y: "); Serial.print(accelY);
    Serial.print(" | Accel Z: "); Serial.println(accelZ);
  }

  delay(500); // Wait 500ms before the next reading
}

Troubleshooting and FAQs

Common Issues

  1. No I2C Communication:

    • Ensure the correct I2C address (0x68 or 0x69) is used.
    • Check the pull-up resistors on the SDA and SCL lines.
    • Verify the wiring and connections.
  2. Incorrect or No Sensor Data:

    • Confirm the sensor is powered correctly (check VDD and GND connections).
    • Perform calibration to eliminate offsets in the readings.
  3. Interrupt Pin Not Working:

    • Ensure the INT pin is connected to a GPIO pin configured as an input.
    • Verify the interrupt configuration in the MPU6050 registers.

Tips for Troubleshooting

FAQs

Q: Can the MPU6050 operate at 5V?
A: No, the MPU6050 operates at a maximum of 3.46V. Use a level shifter for 5V systems.

Q: How do I calibrate the MPU6050?
A: Calibration involves reading raw data from the sensor and calculating offsets for the gyroscope and accelerometer. These offsets can then be subtracted from the raw readings during operation.

Q: What is the maximum sampling rate of the MPU6050?
A: The MPU6050 supports a maximum sampling rate of 1kHz for both the gyroscope and accelerometer.

Q: Can I use the MPU6050 without an interrupt pin?
A: Yes, the interrupt pin is optional. You can poll the sensor data over I2C without using interrupts.