

The IMU Digital Combo Board 6DOF (Manufacturer Part ID: SEN-10121) by SparkFun Electronics is a compact and versatile Inertial Measurement Unit (IMU) that integrates an accelerometer and a gyroscope. This combination enables six degrees of freedom (6DOF) motion tracking, making it ideal for applications requiring precise motion sensing and orientation data.








The IMU Digital Combo Board 6DOF features the following key specifications:
| Parameter | Value |
|---|---|
| Manufacturer | SparkFun Electronics |
| Part Number | SEN-10121 |
| Degrees of Freedom | 6 (3-axis accelerometer + 3-axis gyroscope) |
| Communication Protocol | I2C |
| Operating Voltage | 3.3V |
| Dimensions | 20.3mm x 20.3mm |
| Parameter | Value |
|---|---|
| Measurement Range | ±2g, ±4g, ±8g, ±16g |
| Sensitivity | 256 LSB/g (±2g) |
| Output Data Rate | 0.1 Hz to 3200 Hz |
| Communication Protocol | I2C or SPI |
| Parameter | Value |
|---|---|
| Measurement Range | ±2000°/s |
| Sensitivity | 14.375 LSB/(°/s) |
| Output Data Rate | 1 kHz |
| Communication Protocol | I2C |
The IMU Digital Combo Board 6DOF has the following pin layout:
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (3.3V) |
| 2 | GND | Ground |
| 3 | SDA | I2C data line |
| 4 | SCL | I2C clock line |
| 5 | INT1 | Interrupt output from ADXL345 accelerometer |
| 6 | INT2 | Interrupt output from ITG-3200 gyroscope |
To use the IMU Digital Combo Board 6DOF with an Arduino UNO, follow these steps:
Below is an example Arduino sketch to read data from the IMU using the I2C protocol:
#include <Wire.h>
// I2C addresses for the sensors
#define ACCEL_ADDRESS 0x53 // ADXL345 accelerometer I2C address
#define GYRO_ADDRESS 0x68 // ITG-3200 gyroscope I2C address
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication for debugging
// Initialize accelerometer
Wire.beginTransmission(ACCEL_ADDRESS);
Wire.write(0x2D); // Power control register
Wire.write(0x08); // Set to measurement mode
Wire.endTransmission();
// Initialize gyroscope
Wire.beginTransmission(GYRO_ADDRESS);
Wire.write(0x3E); // Power management register
Wire.write(0x00); // Set to normal operation mode
Wire.endTransmission();
}
void loop() {
int16_t accelX, accelY, accelZ;
int16_t gyroX, gyroY, gyroZ;
// Read accelerometer data
Wire.beginTransmission(ACCEL_ADDRESS);
Wire.write(0x32); // Start reading from data registers
Wire.endTransmission(false);
Wire.requestFrom(ACCEL_ADDRESS, 6); // Request 6 bytes (X, Y, Z)
if (Wire.available() == 6) {
accelX = Wire.read() | (Wire.read() << 8);
accelY = Wire.read() | (Wire.read() << 8);
accelZ = Wire.read() | (Wire.read() << 8);
}
// Read gyroscope data
Wire.beginTransmission(GYRO_ADDRESS);
Wire.write(0x1D); // Start reading from data registers
Wire.endTransmission(false);
Wire.requestFrom(GYRO_ADDRESS, 6); // Request 6 bytes (X, Y, Z)
if (Wire.available() == 6) {
gyroX = Wire.read() << 8 | Wire.read();
gyroY = Wire.read() << 8 | Wire.read();
gyroZ = Wire.read() << 8 | Wire.read();
}
// Print data to Serial Monitor
Serial.print("Accel: X=");
Serial.print(accelX);
Serial.print(" Y=");
Serial.print(accelY);
Serial.print(" Z=");
Serial.println(accelZ);
Serial.print("Gyro: X=");
Serial.print(gyroX);
Serial.print(" Y=");
Serial.print(gyroY);
Serial.print(" Z=");
Serial.println(gyroZ);
delay(500); // Delay for readability
}
No data or incorrect readings from the IMU.
Unstable or noisy sensor readings.
Arduino cannot detect the IMU.
Q: Can I use this IMU with a 5V microcontroller?
A: The IMU operates at 3.3V. If using a 5V microcontroller, use a logic level shifter for the I2C lines to prevent damage.
Q: How do I calibrate the sensors?
A: Calibration involves collecting raw data while the IMU is stationary and calculating offsets for each axis. Apply these offsets in your code to correct the readings.
Q: Can I use SPI instead of I2C?
A: The ADXL345 supports SPI communication, but the ITG-3200 is limited to I2C. For simplicity, use I2C for both sensors.