Features:
- Always-on low-power consumption for both accelerometer and gyroscope
- High-performance combo mode up to 1.6 kHz with just 1.25 mA current
- ±2/±4/±8/±16 g full-scale acceleration range
- ±125/±245/±500/±1000/±2000 DPS full-scale gyroscope range
- Smart FIFO up to 8 KB
- Analog supply voltage: 1.71V to 5V
- SPI/I2C serial interface with processor synchronization
Important Note:
The LSM6DS3 is a 3.3V device. Supplying voltages above 3.6V can damage the IC. Use a logic level shifter for platforms operating at 5V.
Pinout:

Pin Label |
Pin Function |
Notes |
GND |
Ground |
0V voltage supply |
VDD |
Power Supply |
1.8V – 3.6V input |
SDA/SDI |
I2C: Serial Data, SPI: MOSI |
Data line for I2C or input for SPI |
SCL |
Serial Clock |
Clock for I2C/SPI |
SDO/SA0 |
I2C Address LSB, SPI MISO |
Data out or address config |
CS |
Chip Select |
SPI select / I2C mode |
INT1 / INT2 |
Interrupt Pins |
Custom triggers for data ready, motion, tap, etc. |
OCS / SCX / SDX |
Aux SPI/I2C |
Slave interfaces for FIFO |
Applications:
- Motion and tilt detection
- Gesture recognition
- Wearables
- Gaming and VR
- Robotics
Arduino Code Example:
To get started, install the Arduino_LSM6DS3 library from the Library Manager.
#include "Arduino_LSM6DS3.h"
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.print("LSM6DS3 IMU initialization ");
if (IMU.begin()) {
Serial.println("completed successfully.");
} else {
Serial.println("FAILED.");
IMU.end();
while (1);
}
Serial.println();
}
void loop() {
char buffer[8];
float ax, ay, az;
float gx, gy, gz;
if (IMU.accelerationAvailable() && IMU.gyroscopeAvailable() &&
IMU.readAcceleration(ax, ay, az) &&
IMU.readGyroscope(gx, gy, gz)) {
Serial.print("ax = "); Serial.print(dtostrf(ax, 4, 1, buffer)); Serial.print(" g, ");
Serial.print("ay = "); Serial.print(dtostrf(ay, 4, 1, buffer)); Serial.print(" g, ");
Serial.print("az = "); Serial.print(dtostrf(az, 4, 1, buffer)); Serial.print(" g, ");
Serial.print("gx = "); Serial.print(dtostrf(gx, 7, 1, buffer)); Serial.print(" °/s, ");
Serial.print("gy = "); Serial.print(dtostrf(gy, 7, 1, buffer)); Serial.print(" °/s, ");
Serial.print("gz = "); Serial.print(dtostrf(gz, 7, 1, buffer)); Serial.println(" °/s");
}
delay(1000);
}
Features:
- Always-on low-power consumption for both accelerometer and gyroscope
- High-performance combo mode up to 1.6 kHz with just 1.25 mA current
- ±2/±4/±8/±16 g full-scale acceleration range
- ±125/±245/±500/±1000/±2000 DPS full-scale gyroscope range
- Smart FIFO up to 8 KB
- Analog supply voltage: 1.71V to 5V
- SPI/I2C serial interface with processor synchronization
Important Note:
The LSM6DS3 is a 3.3V device. Supplying voltages above 3.6V can damage the IC. Use a logic level shifter for platforms operating at 5V.
Pinout:

Pin Label |
Pin Function |
Notes |
GND |
Ground |
0V voltage supply |
VDD |
Power Supply |
1.8V – 3.6V input |
SDA/SDI |
I2C: Serial Data, SPI: MOSI |
Data line for I2C or input for SPI |
SCL |
Serial Clock |
Clock for I2C/SPI |
SDO/SA0 |
I2C Address LSB, SPI MISO |
Data out or address config |
CS |
Chip Select |
SPI select / I2C mode |
INT1 / INT2 |
Interrupt Pins |
Custom triggers for data ready, motion, tap, etc. |
OCS / SCX / SDX |
Aux SPI/I2C |
Slave interfaces for FIFO |
Applications:
- Motion and tilt detection
- Gesture recognition
- Wearables
- Gaming and VR
- Robotics
Arduino Code Example:
To get started, install the Arduino_LSM6DS3 library from the Library Manager.
#include "Arduino_LSM6DS3.h"
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.print("LSM6DS3 IMU initialization ");
if (IMU.begin()) {
Serial.println("completed successfully.");
} else {
Serial.println("FAILED.");
IMU.end();
while (1);
}
Serial.println();
}
void loop() {
char buffer[8];
float ax, ay, az;
float gx, gy, gz;
if (IMU.accelerationAvailable() && IMU.gyroscopeAvailable() &&
IMU.readAcceleration(ax, ay, az) &&
IMU.readGyroscope(gx, gy, gz)) {
Serial.print("ax = "); Serial.print(dtostrf(ax, 4, 1, buffer)); Serial.print(" g, ");
Serial.print("ay = "); Serial.print(dtostrf(ay, 4, 1, buffer)); Serial.print(" g, ");
Serial.print("az = "); Serial.print(dtostrf(az, 4, 1, buffer)); Serial.print(" g, ");
Serial.print("gx = "); Serial.print(dtostrf(gx, 7, 1, buffer)); Serial.print(" °/s, ");
Serial.print("gy = "); Serial.print(dtostrf(gy, 7, 1, buffer)); Serial.print(" °/s, ");
Serial.print("gz = "); Serial.print(dtostrf(gz, 7, 1, buffer)); Serial.println(" °/s");
}
delay(1000);
}