MPU-6050 Explained: What It Measures, How It Works, and How to Wire It to an Arduino Uno
Share
The MPU-6050 is a six-axis inertial measurement unit (IMU) from InvenSense that combines a 3-axis accelerometer, a 3-axis gyroscope, an on-die temperature sensor, and a Digital Motion Processor (DMP) on one chip. It communicates over I²C at address 0x68 (or 0x69 with the AD0 pin pulled high), runs its logic at 3.3V, and is commonly powered from 3.3–5V through a breakout board — which is why it drops straight onto an Arduino Uno's 5V rail without a level shifter.
What does the MPU-6050 measure?
| Output | What it measures | Selectable ranges |
|---|---|---|
| Accelerometer | Linear acceleration on X/Y/Z, in g | ±2 / ±4 / ±8 / ±16 g |
| Gyroscope | Angular rate around X/Y/Z, in °/s | ±250 / ±500 / ±1000 / ±2000 °/s |
| Temperature | On-die, used to compensate the gyroscope's drift | — |
Each axis is a 16-bit ADC, so at the ±2g range you get roughly 0.06 mg of resolution, and at ±250°/s about 0.0076°/s. The range is a register setting, not a hardware choice — software picks it at boot.
How does the MPU-6050 actually work?
Both sensors are MEMS — microscopic mechanical structures etched directly onto the silicon. The accelerometer is a tiny proof mass suspended on silicon springs between capacitor plates. Acceleration displaces the mass, the capacitance between the plates changes, and the chip converts that into a g value. It cannot tell gravity apart from acceleration — at rest it reads 1g pointing down, and that's not a limitation, it's what lets you derive tilt from the accelerometer alone.
The gyroscope uses the Coriolis effect: a proof mass vibrates continuously, and when the chip rotates, that vibration deflects sideways in proportion to the rotation rate. It measures rate, not angle — you have to integrate the rate to get an angle, and integration is exactly where drift comes from.
Why does a build need both the accelerometer and the gyroscope?
The two sensors fail in opposite, complementary ways. The accelerometer is stable over the long term (gravity is a fixed reference) but noisy and easily fooled by vibration or linear motion. The gyroscope is smooth and fast but drifts, because every small bias error accumulates the moment you integrate it. A complementary or Kalman filter blends the two — or you let the MPU-6050's onboard DMP do the fusion itself and hand your microcontroller a ready quaternion instead of raw numbers.
How do you wire the MPU-6050 to an Arduino Uno?
| Arduino Uno | MPU-6050 | Signal |
|---|---|---|
| 5V | VCC | power |
| GND | GND | ground |
| A4 | SDA | I²C |
| A5 | SCL | I²C |
That's it — four wires. The optional INT pin only matters if you want interrupt-driven reads instead of polling; most first builds skip it. Leave AD0 unconnected (it's pulled low internally) unless you're running two MPU-6050 sensors on the same bus, in which case pulling one AD0 high moves it to address 0x69 so the two don't collide.
Is the MPU-6050 safe to power directly from an Arduino Uno's 5V pin?
Yes. The chip's own logic runs at 3.3V, but a standard breakout board (the common "GY-521" form factor) includes a regulator, so it accepts 3.3–5V on its power input and is 5V-tolerant on its data lines. The thing to actually watch is calibration, not voltage: flat on a table, the gyroscope should read close to 0 on all axes and the accelerometer should read roughly (0, 0, 1g). Zeroing the gyro bias at startup is what turns "noisy raw numbers" into a usable tilt reading.
Watch it built live: a real Arduino Uno + MPU-6050 project
Rather than describe a generic build, we typed one real sentence into Compoden's AI build assistant on the storefront and let it do the part-picking, pricing, and explaining — unscripted, screenshotted as it happened:
"I want to build a motion-sensing project using an MPU6050 and an Arduino Uno."

It picked five in-stock parts, explained the reasoning for each, and flagged the one real risk unprompted: the Uno runs 5V logic and the MPU-6050 runs 3.3V, and while the module's power pin tolerates 3.3–5V, the data lines need care so the sensor isn't damaged.
Watch the firmware get generated
We then asked Compoden's build companion, Soldr, to write the actual Arduino sketch for the same project — real I²C init code, real register setup, targeting the Uno specifically:

The generated sketch includes the Adafruit MPU6050 library setup, the exact wiring comments matching the table above, and a debug-print macro pattern so the serial monitor stays readable. It's editable in place and compiles to a dozen board targets beyond the Uno, from ESP32 variants to the Raspberry Pi Pico.
So what is the MPU-6050 actually good for?
Any project that needs to know how something is tilting or how fast it's turning: self-balancing robots, drone flight controllers, gesture-controlled devices, fall detectors, pedometers, and gimbal stabilization. It's the standard first motion sensor for makers precisely because it's cheap, well-documented, and needs only four wires to an Uno.
Get everything in this build
The exact five parts Soldr picked above, at today's live price and stock — each links straight to checkout, or add the whole tray in one click.
| Part | Price | |
|---|---|---|
| Arduino Uno R3 CH340G ATmega328P Board | ₹230 | Add to cart → |
| MPU-6050 3-Axis Gyro/Accel Sensor Module | ₹180 | Add to cart → |
| 23 AWG Multi-Strand Breadboard Wire | ₹10 | Add to cart → |
| Male-to-Male Breadboard Jumper Wires (20cm, 24AWG) | ₹40 | Add to cart → |
| USB-C 5V 3A Power Supply Adapter | ₹180 | Add to cart → |
| Total | ₹640 | Add all 5 to cart → |
Prices and stock verified live at the time this was written; Compoden's storefront always reflects the current price at checkout.
Built and Backed by Compoden
Every part above ships from Compoden's own India stock, tested for compatibility before it's carded together — not sourced individually and hoped to work. Delivery in 3–7 days across India, with COD and UPI available at checkout. If a part in this build doesn't perform as described, Compoden's support team will help you troubleshoot or replace it.
FAQ
What I2C address does the MPU-6050 use?
0x68 by default. Pulling the AD0 pin high moves it to 0x69, which lets two MPU-6050 sensors share one I2C bus without conflicting.
Why does the MPU-6050 need calibration?
The gyroscope carries a small bias error that, left uncorrected, integrates into drift over time. Zeroing that bias at startup, with the sensor flat and still, is what makes the readings accurate.
Can I power the MPU-6050 directly from an Arduino Uno's 5V pin?
Yes — the breakout board's onboard regulator accepts 3.3–5V even though the chip's own logic is 3.3V. The data lines are the part that needs care if you're mixing logic levels with other components on the same bus.
What's the difference between the MPU-6050's accelerometer and gyroscope?
The accelerometer measures linear acceleration (including gravity) and is stable long-term but noisy. The gyroscope measures rotational rate, is smooth and fast, but drifts when integrated into an angle over time. Most projects fuse both.