

The Troyka IMU 10 DoF is a compact and versatile Inertial Measurement Unit (IMU) designed for applications requiring precise motion and orientation tracking. This module integrates a 3-axis accelerometer, a 3-axis gyroscope, and a 3-axis magnetometer, along with a barometric pressure sensor, to provide 10 degrees of freedom (DoF) for comprehensive motion sensing. It is ideal for robotics, navigation systems, drones, and other projects that demand accurate spatial awareness.








The following table outlines the key technical details of the Troyka IMU 10 DoF:
| Parameter | Specification |
|---|---|
| Manufacturer | Troyka |
| Part ID | IMU 10 DoF |
| Accelerometer | 3-axis (±2g/±4g/±8g/±16g selectable range) |
| Gyroscope | 3-axis (±250/±500/±1000/±2000°/s range) |
| Magnetometer | 3-axis (±4800 µT range) |
| Barometric Sensor | Pressure range: 300–1100 hPa |
| Communication Interface | I2C, SPI |
| Operating Voltage | 3.3V–5V |
| Dimensions | 25mm x 25mm |
| Weight | ~5g |
The Troyka IMU 10 DoF features the following pin layout:
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (3.3V–5V) |
| 2 | GND | Ground |
| 3 | SDA | I2C data line |
| 4 | SCL | I2C clock line |
| 5 | CS | Chip select for SPI communication |
| 6 | SDO | SPI data output |
| 7 | SDI | SPI data input |
| 8 | SCK | SPI clock input |
| 9 | INT1 | Interrupt pin 1 (configurable) |
| 10 | INT2 | Interrupt pin 2 (configurable) |
To use the Troyka IMU 10 DoF with an Arduino UNO, follow these steps:
Below is an example Arduino sketch to read data from the IMU using the I2C interface:
#include <Wire.h>
// Define the I2C address of the IMU
#define IMU_ADDRESS 0x68
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication for debugging
// Wake up the IMU (if required by the specific IMU model)
Wire.beginTransmission(IMU_ADDRESS);
Wire.write(0x6B); // Power management register
Wire.write(0x00); // Set to normal mode
Wire.endTransmission();
Serial.println("Troyka IMU 10 DoF initialized.");
}
void loop() {
Wire.beginTransmission(IMU_ADDRESS);
Wire.write(0x3B); // Starting register for accelerometer data
Wire.endTransmission(false);
Wire.requestFrom(IMU_ADDRESS, 6, true); // Request 6 bytes of data
// Read accelerometer data
int16_t accelX = (Wire.read() << 8) | Wire.read();
int16_t accelY = (Wire.read() << 8) | Wire.read();
int16_t accelZ = (Wire.read() << 8) | Wire.read();
// Print accelerometer data to the Serial Monitor
Serial.print("Accel X: "); Serial.print(accelX);
Serial.print(" | Accel Y: "); Serial.print(accelY);
Serial.print(" | Accel Z: "); Serial.println(accelZ);
delay(500); // Wait for 500ms before the next reading
}
No data or incorrect readings from the IMU.
Inconsistent or noisy sensor data.
The IMU is not detected by the Arduino.
Q: Can I use the Troyka IMU 10 DoF with a 3.3V microcontroller?
A: Yes, the IMU supports both 3.3V and 5V logic levels, making it compatible with a wide range of microcontrollers.
Q: How do I calibrate the sensors?
A: Calibration can be performed by collecting raw data from the sensors and applying offsets or scaling factors. Many libraries (e.g., MPU6050 or BNO055 libraries) include built-in calibration functions.
Q: Can I use SPI instead of I2C?
A: Yes, the IMU supports SPI communication. Refer to the pin configuration table for SPI pin connections.
Q: What is the maximum sampling rate of the IMU?
A: The sampling rate depends on the specific sensor configuration. Refer to the sensor datasheets for detailed information.