

The WRIST MPU6050, manufactured by InvenSense (Part ID: MPU-6050), is a motion tracking device that integrates a 3-axis gyroscope and a 3-axis accelerometer into a single chip. This component is widely used for detecting hand tremors and monitoring movement, making it ideal for applications in health monitoring, rehabilitation, and wearable devices. Its compact design and high precision make it a popular choice for motion tracking in medical and consumer electronics.








The WRIST MPU6050 offers the following key technical details:
| Parameter | Value |
|---|---|
| Manufacturer | InvenSense |
| Part ID | MPU-6050 |
| Supply Voltage (VDD) | 2.375V to 3.46V |
| Logic Voltage (VDDIO) | 1.8V to VDD |
| Gyroscope Range | ±250, ±500, ±1000, ±2000 degrees/second |
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
| Communication Interface | I2C (up to 400kHz) or SPI (up to 1MHz) |
| Operating Temperature | -40°C to +85°C |
| Package Type | 24-pin QFN (4x4x0.9mm) |
The MPU-6050 has 24 pins, but the most commonly used pins for basic operation are listed below:
| Pin Name | Pin Number | Description |
|---|---|---|
| VDD | 1 | Power supply input (2.375V to 3.46V). |
| VDDIO | 2 | Logic voltage input (1.8V to VDD). |
| GND | 3 | Ground connection. |
| SCL | 6 | I2C clock input. |
| SDA | 7 | I2C data input/output. |
| INT | 12 | Interrupt signal output. |
| FSYNC | 14 | Frame synchronization input. |
| AD0 | 15 | I2C address select (0 or 1). |
| AUX_DA | 18 | Auxiliary I2C data line. |
| AUX_CL | 19 | Auxiliary I2C clock line. |
For a complete pinout, refer to the official datasheet provided by InvenSense.
0x68 or to VDD for address 0x69.Below is an example of how to interface the WRIST MPU6050 with an Arduino UNO using the I2C protocol:
#include <Wire.h>
// MPU6050 I2C address (default is 0x68 when AD0 is connected to GND)
const int MPU6050_ADDR = 0x68;
// Registers for accelerometer and gyroscope data
const int ACCEL_XOUT_H = 0x3B;
const int GYRO_XOUT_H = 0x43;
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication for debugging
// Wake up the MPU6050 (set power management register to 0)
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(0x6B); // Power management register
Wire.write(0); // Set to 0 to wake up the sensor
Wire.endTransmission();
}
void loop() {
int16_t accelX, accelY, accelZ;
int16_t gyroX, gyroY, gyroZ;
// Read accelerometer data
accelX = readMPU6050(ACCEL_XOUT_H);
accelY = readMPU6050(ACCEL_XOUT_H + 2);
accelZ = readMPU6050(ACCEL_XOUT_H + 4);
// Read gyroscope data
gyroX = readMPU6050(GYRO_XOUT_H);
gyroY = readMPU6050(GYRO_XOUT_H + 2);
gyroZ = readMPU6050(GYRO_XOUT_H + 4);
// Print data to the serial monitor
Serial.print("Accel: ");
Serial.print(accelX); Serial.print(", ");
Serial.print(accelY); Serial.print(", ");
Serial.print(accelZ); Serial.print(" | Gyro: ");
Serial.print(gyroX); Serial.print(", ");
Serial.print(gyroY); Serial.print(", ");
Serial.println(gyroZ);
delay(500); // Delay for readability
}
// Function to read 16-bit data from MPU6050
int16_t readMPU6050(int reg) {
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(reg); // Specify the register to read from
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_ADDR, 2, true); // Request 2 bytes of data
int16_t data = Wire.read() << 8 | Wire.read(); // Combine high and low bytes
return data;
}
No Data from MPU6050:
0x68 unless AD0 is connected to VDD).Inaccurate Readings:
Device Not Detected:
By following this documentation, users can effectively integrate the WRIST MPU6050 into their projects for accurate motion tracking and hand tremor detection.