

The LSM6DS33 is a high-performance 3D accelerometer and 3D gyroscope sensor manufactured by Pololu. It is designed to provide precise motion sensing capabilities with a digital output. This sensor is widely used in applications such as smartphones, wearables, gaming devices, and IoT systems for detecting orientation, motion, and acceleration. Its compact size and low power consumption make it ideal for portable and battery-powered devices.








| Parameter | Value |
|---|---|
| Manufacturer | Pololu |
| Part ID | LSM6DS33 |
| Sensor Type | 3D Accelerometer and 3D Gyroscope |
| Communication Interface | I²C, SPI |
| Operating Voltage | 1.71 V to 3.6 V |
| Accelerometer Range | ±2 g, ±4 g, ±8 g, ±16 g |
| Gyroscope Range | ±125 dps, ±245 dps, ±500 dps, ±1000 dps, ±2000 dps |
| Output Data Rate (ODR) | Up to 6.66 kHz |
| Operating Temperature Range | -40°C to +85°C |
| Power Consumption | 0.9 mA (accelerometer + gyroscope active) |
| Package Size | 2.5 mm x 3.0 mm x 0.83 mm |
The LSM6DS33 is typically available on breakout boards for easier integration. Below is the pin configuration for a common breakout board:
| Pin Name | Description |
|---|---|
| VIN | Power supply input (1.71 V to 3.6 V). Can be connected to 3.3 V or 5 V. |
| GND | Ground connection. |
| SCL | I²C clock line or SPI clock line. |
| SDA | I²C data line or SPI data input/output. |
| 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 interface the LSM6DS33 with an Arduino UNO using the I²C protocol:
#include <Wire.h>
// LSM6DS33 I2C address
#define LSM6DS33_ADDR 0x6B
// Register addresses
#define CTRL1_XL 0x10 // Accelerometer control register
#define CTRL2_G 0x11 // Gyroscope control register
#define OUTX_L_XL 0x28 // Accelerometer X-axis low byte
#define OUTX_H_XL 0x29 // Accelerometer X-axis high byte
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure accelerometer (±2g, 104 Hz ODR)
writeRegister(CTRL1_XL, 0x40);
// Configure gyroscope (±245 dps, 104 Hz ODR)
writeRegister(CTRL2_G, 0x40);
Serial.println("LSM6DS33 initialized.");
}
void loop() {
int16_t accelX = read16BitRegister(OUTX_L_XL, OUTX_H_XL);
// Convert raw data to g (assuming ±2g range)
float accelX_g = accelX * 0.061 / 1000; // 0.061 mg/LSB for ±2g range
Serial.print("Acceleration X: ");
Serial.print(accelX_g);
Serial.println(" g");
delay(500); // Delay for readability
}
// Function to write a value to a register
void writeRegister(uint8_t reg, uint8_t value) {
Wire.beginTransmission(LSM6DS33_ADDR);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
// Function to read a 16-bit value from two consecutive registers
int16_t read16BitRegister(uint8_t regL, uint8_t regH) {
Wire.beginTransmission(LSM6DS33_ADDR);
Wire.write(regL);
Wire.endTransmission(false);
Wire.requestFrom(LSM6DS33_ADDR, 2);
uint8_t lowByte = Wire.read();
uint8_t highByte = Wire.read();
return (int16_t)((highByte << 8) | lowByte);
}
No Communication with the Sensor
Incorrect or No Data Output
High Noise in Measurements
Q: Can the LSM6DS33 be used with a 5 V microcontroller?
A: Yes, but you may need a level shifter for the I²C or SPI lines if the microcontroller operates at 5 V logic levels.
Q: How do I change the accelerometer or gyroscope range?
A: Modify the appropriate control registers (e.g., CTRL1_XL for the accelerometer and CTRL2_G for the gyroscope) to set the desired range.
Q: What is the maximum sampling rate of the LSM6DS33?
A: The sensor supports an output data rate (ODR) of up to 6.66 kHz for both the accelerometer and gyroscope.
This concludes the documentation for the LSM6DS33 3D Accelerometer. For further details, refer to the official datasheet provided by Pololu.