GY-801 10DOF 9-Axis Attitude L3G4200D ADXL345 HMC5883L BMP085 Module

SKU: FA2161
Sensor Chip

Bosch BMP085

Pressure Range

300 – 1100 hPa (altitude: -500m to +9,000m)

Pressure Accuracy (Standard Mode)

0.06 hPa (0.5 meter altitude resolution)

Pressure Accuracy (Ultra-High Res Mode)

0.03 hPa (0.25 meter altitude resolution)

Temperature Range

-40°C to +85°C

Temperature Accuracy

±0.5°C (typical)

Supply Voltage (VCC)

3.3V – 5V DC (module level)

Core Voltage (VDDA)

1.8V – 3.6V

Digital I/O Voltage (VDDD)

1.62V – 3.6V

Active Current

5 µA (standard mode)

Standby Current

0.1 µA

Communication Protocol

I²C (100 kHz / 400 kHz)

Conversion Time

7.5 ms (typical)

Module Dimensions

Approx. 13mm × 11mm × 4mm

Operating Temperature

-40°C to +85°C

Product Overview

The GY-801 10DOF IMU Module is a comprehensive 9-axis motion tracking board that integrates five high-performance sensors on a single compact PCB. It combines a 3-axis gyroscope, a 3-axis accelerometer, a 3-axis magnetometer, and a barometric pressure sensor, providing a complete solution for applications requiring orientation sensing, motion tracking, and altitude measurement .

“10DOF” (Degrees of Freedom) refers to the combined sensing capabilities of the module:

  • 3 axes of angular velocity (gyroscope)

  • 3 axes of linear acceleration (accelerometer)

  • 3 axes of magnetic field (magnetometer/compass)

  • 1 barometric pressure channel (altitude)

This module is widely used in drones (UAVs), robotics, virtual reality systems, gaming controllers, GPS navigation systems, and inertial measurement units (IMUs). All sensors communicate via the I2C protocol, requiring only 2 data lines (SDA and SCL) to connect to your microcontroller .


Sensor Components

L3G4200D – 3‑Axis Gyroscope

  • Measures angular velocity (rate of rotation) around X, Y, and Z axes

  • User‑selectable full scales: ±250, ±500, or ±2000 degrees per second (dps)

  • 16‑bit digital output with built‑in temperature sensor for drift compensation 

ADXL345 – 3‑Axis Accelerometer

  • Measures linear acceleration (including gravity) on X, Y, and Z axes

  • Selectable ranges: ±2g, ±4g, ±8g, ±16g

  • 13‑bit resolution (4 mg/LSB) – capable of detecting inclination changes as small as 0.25° 

HMC5883L / MMC5883MA – 3‑Axis Magnetometer

  • Measures the Earth’s magnetic field for compass heading

  • 12‑bit ADC with 1° to 2° heading accuracy

  • Integral degaussing straps and offset cancellation 

BMP085 / BMP180 – Barometric Pressure & Temperature Sensor

  • Measures atmospheric pressure (300 to 1100 hPa) and temperature

  • Absolute accuracy down to 0.03 hPa

  • Altitude resolution of approximately 0.25 meters 


Key Features

  • 9‑Axis Motion Tracking: Gyroscope + accelerometer + magnetometer provides full 3D orientation sensing (yaw, pitch, roll)

  • Altitude & Weather Sensing: Barometric pressure sensor adds altitude measurement and pressure trend detection

  • Single I2C Interface: All sensors share the same I2C bus – only 2 pins (SDA, SCL) are needed

  • Wide Voltage Compatibility: Operates from 3V to 5V, compatible with both 3.3V and 5V microcontrollers 

  • Built‑in Sensor Fusion Ready: Sensor data can be combined using algorithms like Madgwick or Mahony filters for stable orientation estimation

  • Compact Size: Small form factor (approx. 25x17mm) for easy integration into drones and robots 


Technical Specifications

Parameter Value
Operating Voltage 3V – 5V DC
Communication Protocol I2C (100 kHz / 400 kHz)
Gyroscope (L3G4200D) ±250/500/2000 dps, 16‑bit output
Accelerometer (ADXL345) ±2/4/8/16g, 13‑bit resolution (4 mg/LSB)
Magnetometer (HMC5883L) ±8 Gauss, 12‑bit ADC, 1‑2° heading accuracy
Barometer (BMP085) 300 – 1100 hPa, ±0.03 hPa accuracy
I2C Addresses ADXL345: 0x53; L3G4200D: 0x69; HMC5883L: 0x1E; BMP085: 0x77 
Dimensions Approx. 25mm × 17mm × 2mm

Pinout & Connection Guide

Pin Definitions

Pin Label Function
VIN VCC / 5V Power supply (3V – 5V DC)
GND GND Ground
SCL SCL / SCK I2C Clock Line
SDA SDA / SDI I2C Data Line
3.3V 3.3V 3.3V output (from onboard regulator)
A_INT1 / A_INT2 ADXL345 Interrupts Optional – data ready / motion detection
G_INT1 / G_INT2 L3G4200D Interrupts Optional – data ready / interrupt
M_DRDY Magnetometer Data Ready Optional – indicates new data available

Wiring to Arduino Uno

GY‑801 Pin Arduino Uno Pin
VIN 5V
GND GND
SCL A5 (SCL)
SDA A4 (SDA)

Note: Interrupt pins (A_INT, G_INT, M_DRDY) are optional – connect only if needed for your application.


Usage Guide

Sensor Fusion: Why Combine Multiple Sensors?

Each sensor type has strengths and weaknesses. Sensor fusion combines them for accurate and stable orientation:

  • Accelerometer: Measures gravity – excellent for tilt (pitch/roll) but susceptible to linear acceleration noise.

  • Gyroscope: Measures rotation rate – stable over short periods but drifts over time.

  • Magnetometer: Measures magnetic north – provides absolute yaw reference but affected by magnetic interference.

By combining these using algorithms like Madgwick or Mahony filters, you get smooth, accurate, drift‑free orientation (yaw, pitch, roll).

Software Setup (Arduino IDE)

Step 1: Install Required Libraries

Install the following libraries via Library Manager:

Sensor Recommended Library
ADXL345 Adafruit ADXL345
L3G4200D L3G4200D (by “Fusion” or Pololu)
HMC5883L Adafruit HMC5883 Unified
BMP085 Adafruit BMP085 Unified
Sensor Fusion Madgwick or MahonyAHRS

Step 2: Basic Sensor Initialization Code

cpp
/*
  GY-801 10DOF IMU – Basic Sensor Initialization
*/

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <Adafruit_HMC5883_U.h>
#include <Adafruit_BMP085_U.h>
#include <L3G4200D.h>

// Create sensor objects
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
L3G4200D gyro;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  // Initialize Accelerometer
  if(!accel.begin()) {
    Serial.println("ADXL345 not found!");
    while(1);
  }
  accel.setRange(ADXL345_RANGE_2_G);

  // Initialize Magnetometer
  if(!mag.begin()) {
    Serial.println("HMC5883L not found!");
    while(1);
  }

  // Initialize Barometer
  if(!bmp.begin()) {
    Serial.println("BMP085 not found!");
    while(1);
  }

  // Initialize Gyroscope
  gyro.init();
  gyro.setFullScale(L3G4200D_FULLSCALE_2000);

  Serial.println("GY-801 Sensors Ready");
}

Step 3: Reading All Sensors

cpp
void loop() {
  sensors_event_t accelEvent, magEvent;
  sensors_vec_t   orientation;

  // Accelerometer
  accel.getEvent(&accelEvent);
  Serial.print("Accel X: "); Serial.print(accelEvent.acceleration.x);
  Serial.print(" Y: "); Serial.print(accelEvent.acceleration.y);
  Serial.print(" Z: "); Serial.println(accelEvent.acceleration.z);

  // Magnetometer & Compass Heading
  mag.getEvent(&magEvent);
  float heading = atan2(magEvent.magnetic.y, magEvent.magnetic.x) * 180/PI;
  if(heading < 0) heading += 360;
  Serial.print("Heading: "); Serial.println(heading);

  // Barometer & Altitude
  bmp.getEvent(&bmpEvent);
  float altitude = bmp.pressureToAltitude(SENSORS_PRESSURE_SEALEVELHPA,
                                          bmpEvent.pressure);
  Serial.print("Altitude: "); Serial.println(altitude);

  delay(500);
}
Q: How accurate is the altitude measurement?

The BMP085 can achieve altitude resolution of approximately 0.25 meters (8 inches) in ultra-high resolution mode . However, absolute accuracy depends on proper calibration with local sea-level pressure. For relative altitude changes (e.g., climbing stairs), the sensor is extremely precise.

Q: What is the difference between GY-65 and BMP180/BMP280 sensors?

The GY-65 uses the BMP085 sensor, which is an older but still capable sensor. The BMP180 and BMP280 offer improved specifications (lower noise, wider range) but the BMP085 remains a cost-effective choice for many altitude and weather applications. The GY-65 module is widely available and well-supported by libraries .

Q: Can I use this sensor with 5V logic microcontrollers like Arduino Uno?

Yes. The GY-65 module is both 3.3V and 5V compatible, so it can be used directly with 5V Arduinos without level shifters .

Q: What is the default I²C address of the GY-65 module?

The BMP085 has a fixed I²C address of 0x77 (119 decimal) .

Q: Why is my module not detected on the I²C bus?

Common issues:

  1. Wiring: Verify VCC, GND, SCL, and SDA connections

  2. Pull-up resistors: Ensure 4.7kΩ pull-ups are present on SCL and SDA lines

  3. Power: Ensure your power supply can provide adequate current

  4. Library: Verify the correct library is installed

Q: How do I improve altitude reading stability?

For stable altitude readings:

  1. Use ultra-high resolution mode (OSS=3) for maximum precision 

  2. Apply a moving average filter to smooth readings

  3. Allow the sensor to warm up for a few minutes before critical measurements

  4. Protect the sensor from direct airflow (wind)

  5. Re-calibrate the sea-level pressure reference when moving to different locations

Q: What oversampling setting should I use?

The choice depends on your application:

  • OSS=0 (Ultra-Low Power): Battery-powered, low-power applications

  • OSS=1 (Standard): General purpose, default setting

  • OSS=2 (High Resolution): Higher accuracy needs

  • OSS=3 (Ultra-High Resolution): Maximum precision (0.25m altitude resolution)

Q: Do I need to calibrate the sensor?

No. The BMP085 sensor is factory-calibrated, and the 11 calibration coefficients are stored in the sensor’s internal E²PROM. Your library will automatically read these coefficients and use them to convert raw ADC readings to accurate pressure and temperature values. No user calibration is required .

Q: Is the GY-65 suitable for use in drones or UAVs?

The BMP085 works well for altitude hold in drones, but it has a slower update rate than newer sensors like the BMP280 or MS5611. For basic altitude stabilization, it is sufficient, but for acrobatic or high-speed flight, a faster sensor is recommended.

Q: What is the power consumption in different modes?

The sensor is very power-efficient:

  • Active mode (converting): 5 µA typical 

  • Standby mode: 0.1 µA 

  • For battery-powered applications, place the sensor in standby between readings to conserve power