

The Adafruit LSM6DS33 (Part ID: 4480) is a compact and versatile inertial measurement unit (IMU) that integrates a 3-axis accelerometer and a 3-axis gyroscope. This sensor is designed to measure linear acceleration and angular velocity, making it ideal for motion sensing and orientation tracking. Its small form factor and high precision make it suitable for a wide range of applications, including robotics, drones, wearable devices, and gaming peripherals.








The Adafruit LSM6DS33 is built on STMicroelectronics' LSM6DS33 chip and offers the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 3.3V (logic level) |
| Communication Interface | I2C (default address: 0x6A or 0x6B) and SPI |
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g (configurable) |
| Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s (configurable) |
| Output Data Rate (ODR) | Up to 6.66 kHz for both accelerometer and gyroscope |
| Operating Temperature Range | -40°C to +85°C |
| Dimensions | 20mm x 18mm x 2mm |
The LSM6DS33 breakout board has the following pin layout:
| Pin Name | Description |
|---|---|
| VIN | Power input (3.3V or 5V) |
| GND | Ground connection |
| SCL | I2C clock line (or SPI clock line in SPI mode) |
| SDA | I2C data line (or SPI MOSI line in SPI mode) |
| CS | Chip select for SPI communication (active low) |
| INT1 | Interrupt 1 output (can be configured for various events) |
| INT2 | Interrupt 2 output (can be configured for various events) |
Below is an example of how to use the LSM6DS33 with an Arduino UNO via I2C:
#include <Wire.h>
#include <Adafruit_LSM6DS33.h>
// Create an instance of the LSM6DS33 class
Adafruit_LSM6DS33 lsm6ds33;
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10); // Wait for Serial Monitor to open
}
// Initialize the LSM6DS33 sensor
if (!lsm6ds33.begin_I2C()) {
Serial.println("Failed to find LSM6DS33 chip");
while (1) {
delay(10); // Halt if sensor initialization fails
}
}
Serial.println("LSM6DS33 Found!");
// Configure the accelerometer and gyroscope ranges
lsm6ds33.setAccelRange(LSM6DS_ACCEL_RANGE_4_G);
lsm6ds33.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS);
// Set the output data rate
lsm6ds33.setAccelDataRate(LSM6DS_RATE_104_HZ);
lsm6ds33.setGyroDataRate(LSM6DS_RATE_104_HZ);
}
void loop() {
sensors_event_t accel, gyro, temp;
// Get sensor events
lsm6ds33.getEvent(&accel, &gyro, &temp);
// Print accelerometer data
Serial.print("Accel X: "); Serial.print(accel.acceleration.x); Serial.print(" m/s^2 ");
Serial.print("Y: "); Serial.print(accel.acceleration.y); Serial.print(" m/s^2 ");
Serial.print("Z: "); Serial.print(accel.acceleration.z); Serial.println(" m/s^2");
// Print gyroscope data
Serial.print("Gyro X: "); Serial.print(gyro.gyro.x); Serial.print(" rad/s ");
Serial.print("Y: "); Serial.print(gyro.gyro.y); Serial.print(" rad/s ");
Serial.print("Z: "); Serial.print(gyro.gyro.z); Serial.println(" rad/s");
// Print temperature data
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" °C");
delay(500); // Delay for readability
}
Sensor Not Detected:
Incorrect or No Data:
Interrupts Not Working:
Q: Can I use the LSM6DS33 with a 5V microcontroller?
A: Yes, the breakout board includes a voltage regulator and level shifters, making it compatible with 5V systems.
Q: How do I change the I2C address?
A: The I2C address can be changed by connecting the SDO pin to GND (0x6A) or VIN (0x6B).
Q: What is the maximum cable length for I2C communication?
A: The maximum length depends on the pull-up resistor values and the I2C clock speed. For most applications, keep the cable length under 1 meter.
Q: Can I use both I2C and SPI simultaneously?
A: No, the sensor can operate in either I2C or SPI mode, but not both at the same time.