{
    "key": "mpu-6050",
    "kind": "sensor",
    "model": {
        "aliases": [
            "mpu-6050"
        ]
    },
    "driver": {
        "runtime": {
            "init": {
                "args": {
                    "i2c": "board.I2C()",
                    "address": "{i2c_address}"
                },
                "class": "adafruit_mpu6050.MPU6050"
            },
            "apt_packages": [],
            "pip_packages": [
                "adafruit-circuitpython-mpu6050"
            ],
            "python_module": "drivers.mpu6050"
        },
        "targets": [
            "raspberrypi"
        ],
        "verified": {
            "by": null,
            "os": null,
            "date": null,
            "board": null,
            "reviewed_by": null,
            "evidence_url": null
        },
        "interface": "i2c",
        "connection": {
            "pins": [
                {
                    "role": "sda",
                    "notes": null,
                    "required": true
                },
                {
                    "role": "scl",
                    "notes": null,
                    "required": true
                }
            ],
            "i2c_addresses": [
                "0x68",
                "0x69"
            ],
            "supply_voltage": "3.3V",
            "level_shift_required": null
        },
        "constraints": {
            "warmup_seconds": null,
            "read_timeout_seconds": 2,
            "min_read_interval_seconds": 0.1
        },
        "failure_modes": [
            "Address is 0x68 with AD0 low and 0x69 with AD0 high.",
            "Gyroscope output drifts and has a non-zero bias at rest. Bias must be measured while stationary at startup and subtracted.",
            "Accelerometer readings include gravity. A stationary sensor reads approximately 9.81 on whichever axis points down, which is not motion.",
            "The part is obsolete and widely cloned. Clone modules vary in noise and in whether the temperature channel is usable."
        ]
    },
    "source": "platform-seed",
    "status": "draft",
    "platform": {
        "name": "MPU-6050 6-Axis IMU",
        "protocol": "i2c",
        "readings": [
            {
                "slug": "accel-x",
                "unit": "metres per second squared",
                "label": "Acceleration X",
                "data_type": "float",
                "range_max": 16,
                "range_min": -16,
                "unit_symbol": "m/s²",
                "device_class": null,
                "decimal_places": 3,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "accel-y",
                "unit": "metres per second squared",
                "label": "Acceleration Y",
                "data_type": "float",
                "range_max": 16,
                "range_min": -16,
                "unit_symbol": "m/s²",
                "device_class": null,
                "decimal_places": 3,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "accel-z",
                "unit": "metres per second squared",
                "label": "Acceleration Z",
                "data_type": "float",
                "range_max": 16,
                "range_min": -16,
                "unit_symbol": "m/s²",
                "device_class": null,
                "decimal_places": 3,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "gyro-x",
                "unit": "degrees per second",
                "label": "Gyroscope X",
                "data_type": "float",
                "range_max": 2000,
                "range_min": -2000,
                "unit_symbol": "°/s",
                "device_class": null,
                "decimal_places": 2,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "gyro-y",
                "unit": "degrees per second",
                "label": "Gyroscope Y",
                "data_type": "float",
                "range_max": 2000,
                "range_min": -2000,
                "unit_symbol": "°/s",
                "device_class": null,
                "decimal_places": 2,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "gyro-z",
                "unit": "degrees per second",
                "label": "Gyroscope Z",
                "data_type": "float",
                "range_max": 2000,
                "range_min": -2000,
                "unit_symbol": "°/s",
                "device_class": null,
                "decimal_places": 2,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            }
        ],
        "description": "3-axis gyroscope and 3-axis accelerometer over I2C. Used for orientation, vibration detection and fall detection.",
        "sensor_type": "motion",
        "manufacturer": "InvenSense (TDK)",
        "model_number": "MPU-6050",
        "datasheet_url": "https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf",
        "read_interval_seconds": 10
    },
    "revision": 1
}