

The 10-DOF IMU L3GD20H + LSM303 + BMP180 (Adafruit Part ID: 1604) is a compact and versatile sensor module that integrates multiple sensing capabilities into a single board. It combines a 3-axis gyroscope (L3GD20H), a 3-axis accelerometer, a 3-axis magnetometer (LSM303), and a barometric pressure sensor (BMP180). This makes it ideal for applications requiring motion tracking, orientation sensing, and environmental monitoring.








| Parameter | Specification |
|---|---|
| Operating Voltage | 3.3V to 5V |
| Communication Interface | I2C (default), SPI (optional for L3GD20H only) |
| Gyroscope (L3GD20H) Range | ±250, ±500, ±2000 degrees/second |
| Accelerometer (LSM303) Range | ±2g, ±4g, ±8g, ±16g |
| Magnetometer (LSM303) Range | ±1.3 to ±8.1 gauss |
| Barometric Pressure (BMP180) | 300 to 1100 hPa (hectopascals) |
| Temperature Sensor Range | -40°C to +85°C |
| Dimensions | 20mm x 20mm x 3mm |
| Pin Name | Description |
|---|---|
| VIN | Power input (3.3V to 5V) |
| GND | Ground |
| SDA | I2C data line |
| SCL | I2C clock line |
| CS | Chip select for SPI communication (optional, used with L3GD20H) |
| SDO | SPI data output (optional, used with L3GD20H) |
| INT1 | Interrupt pin 1 for L3GD20H (optional, for advanced configurations) |
| INT2 | Interrupt pin 2 for L3GD20H (optional, for advanced configurations) |
VIN pin to a 3.3V or 5V power source and the GND pin to ground.SDA and SCL pins to connect the module to the I2C bus of your microcontroller. Pull-up resistors (typically 4.7kΩ) may be required on the I2C lines if not already present.CS, SDO, and SCL pins to the appropriate SPI pins on your microcontroller.Below is an example Arduino sketch to read data from the IMU using I2C:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_L3GD20_U.h>
#include <Adafruit_LSM303_U.h>
#include <Adafruit_BMP085_U.h>
// Create sensor objects
Adafruit_L3GD20_Unified gyro = Adafruit_L3GD20_Unified(20);
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301);
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(30302);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(180);
void setup() {
Serial.begin(9600);
Serial.println("10-DOF IMU Test");
// Initialize sensors
if (!gyro.begin()) {
Serial.println("Failed to initialize gyroscope!");
while (1);
}
if (!accel.begin()) {
Serial.println("Failed to initialize accelerometer!");
while (1);
}
if (!mag.begin()) {
Serial.println("Failed to initialize magnetometer!");
while (1);
}
if (!bmp.begin()) {
Serial.println("Failed to initialize barometric sensor!");
while (1);
}
}
void loop() {
// Read gyroscope data
sensors_event_t gyroEvent;
gyro.getEvent(&gyroEvent);
Serial.print("Gyro X: "); Serial.print(gyroEvent.gyro.x);
Serial.print(" Y: "); Serial.print(gyroEvent.gyro.y);
Serial.print(" Z: "); Serial.println(gyroEvent.gyro.z);
// Read accelerometer data
sensors_event_t accelEvent;
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);
// Read magnetometer data
sensors_event_t magEvent;
mag.getEvent(&magEvent);
Serial.print("Mag X: "); Serial.print(magEvent.magnetic.x);
Serial.print(" Y: "); Serial.print(magEvent.magnetic.y);
Serial.print(" Z: "); Serial.println(magEvent.magnetic.z);
// Read barometric pressure
sensors_event_t bmpEvent;
bmp.getEvent(&bmpEvent);
Serial.print("Pressure: "); Serial.print(bmpEvent.pressure);
Serial.println(" hPa");
delay(1000); // Wait 1 second before next reading
}
No Data from Sensors:
Inaccurate Readings:
Module Not Detected:
CS pin and SPI settings in your code.This documentation provides a comprehensive guide to using the Adafruit 10-DOF IMU (Part ID: 1604) effectively in your projects.