The MinIMU-9 v6 by Pololu (Part ID: IMU) is a compact and cost-effective inertial measurement unit (IMU) that integrates a 3-axis accelerometer, a 3-axis gyroscope, and a 3-axis magnetometer. This versatile sensor is designed to measure motion, orientation, and magnetic field data, making it ideal for applications such as robotics, drones, motion tracking, and navigation systems. Its small form factor and I²C/SPI communication interfaces make it easy to integrate into a wide range of projects.
Parameter | Specification |
---|---|
Accelerometer | ±2/±4/±8/±16 g selectable range |
Gyroscope | ±125/±250/±500/±1000/±2000 dps selectable range |
Magnetometer | ±4/±8/±12/±16 gauss selectable range |
Communication Interfaces | I²C (default) and SPI |
Operating Voltage | 2.5 V to 5.5 V |
Current Consumption | ~10 mA (typical) |
Dimensions | 20 mm × 13 mm × 3 mm |
Weight | 0.6 g |
Operating Temperature Range | -40°C to +85°C |
The MinIMU-9 v6 has a total of 8 pins. The table below describes each pin:
Pin Name | Pin Number | Description |
---|---|---|
VIN | 1 | Power supply input (2.5 V to 5.5 V) |
GND | 2 | Ground connection |
SCL | 3 | I²C clock line (or SPI clock line in SPI mode) |
SDA | 4 | I²C data line (or SPI data input in SPI mode) |
SDO | 5 | I²C address selection (or SPI data output in SPI mode) |
CS | 6 | Chip select for SPI mode (active low) |
INT1 | 7 | Interrupt output 1 |
INT2 | 8 | Interrupt output 2 |
Below is an example of how to interface the MinIMU-9 v6 with an Arduino UNO using the I²C interface:
#include <Wire.h>
// I2C addresses for the accelerometer/gyroscope and magnetometer
#define LSM6DS33_ADDR 0x6B // Accelerometer and gyroscope
#define LIS3MDL_ADDR 0x1E // Magnetometer
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication for debugging
// Initialize the accelerometer and gyroscope
Wire.beginTransmission(LSM6DS33_ADDR);
Wire.write(0x10); // CTRL1_XL register
Wire.write(0x80); // Set accelerometer to 1.66 kHz, ±2 g
Wire.endTransmission();
Wire.beginTransmission(LSM6DS33_ADDR);
Wire.write(0x11); // CTRL2_G register
Wire.write(0x80); // Set gyroscope to 1.66 kHz, ±125 dps
Wire.endTransmission();
// Initialize the magnetometer
Wire.beginTransmission(LIS3MDL_ADDR);
Wire.write(0x20); // CTRL_REG1 register
Wire.write(0x70); // Set magnetometer to 10 Hz, high-performance mode
Wire.endTransmission();
}
void loop() {
// Read accelerometer data
Wire.beginTransmission(LSM6DS33_ADDR);
Wire.write(0x28 | 0x80); // Start reading at OUTX_L_XL (auto-increment enabled)
Wire.endTransmission();
Wire.requestFrom(LSM6DS33_ADDR, 6); // Request 6 bytes (X, Y, Z)
int16_t ax = Wire.read() | (Wire.read() << 8);
int16_t ay = Wire.read() | (Wire.read() << 8);
int16_t az = Wire.read() | (Wire.read() << 8);
// Print accelerometer data
Serial.print("Accel X: "); Serial.print(ax);
Serial.print(" Y: "); Serial.print(ay);
Serial.print(" Z: "); Serial.println(az);
delay(100); // Delay for readability
}
No Data from the Sensor
Inaccurate Readings
Communication Errors
Q: Can the MinIMU-9 v6 be used with a 3.3 V microcontroller?
Q: How do I select the I²C address?
Q: Do I need to use all three sensors (accelerometer, gyroscope, magnetometer)?
This documentation provides a comprehensive guide to using the Pololu MinIMU-9 v6. For further details, refer to the official datasheet and user manual.