The LSM6DS3 is a system-in-package featuring a 3D digital accelerometer and a 3D digital gyroscope performing at 1.25 mA (up to 1.6 kHz ODR) in high-performance mode and enabling always-on low-power features for an optimal motion experience for the consumer.
The LSM6DS3 supports main OS requirements, offering real, virtual and batch sensors with 8 kbyte for dynamic data batching.
ST’s family of MEMS sensor modules leverages the robust and mature manufacturing processes already used for the production of micromachined accelerometers and gyroscopes.
The various sensing elements are manufactured using specialized micromachining processes, while the IC interfaces are developed using CMOS technology that allows the design of a dedicated circuit which is trimmed to better match the characteristics of the sensing element.
The LSM6DS3 has a full-scale acceleration range of ±2/±4/±8/±16 g and an angular rate range of ±125/±250/±500/±1000/±2000 dps.
High robustness to mechanical shock makes the LSM6DS3 the preferred choice of system designers for the creation and manufacturing of reliable products.
The LSM6DS3 is available in a plastic land grid array (LGA) package.
Key Features
Power consumption: 0.9 mA in combo normal mode and 1.25 mA in combo high-performance mode up to 1.6 kHz.
“Always-on” experience with low power consumption for both accelerometer and gyroscope
Smart FIFO up to 8 kbyte based on features set
Compliant with Android K and L
Hard, soft ironing for external magnetic sensor corrections
±2/±4/±8/±16 g full scale
±125/±250/±500/±1000/±2000 dps full scale
Analog supply voltage: 1.71 V to 3.6 V
Independent IOs supply (1.62 V)
Compact footprint, 2.5 mm x 3 mm x 0.83 mm
SPI/I2 C serial interface with main processor data synchronization feature
Code
I used the sparkfun library –https://github.com/sparkfun/SparkFun_LSM6DS3_Arduino_Library
This is the minimal example, there are many others
[codesyntax lang=”cpp”]
#include "SparkFunLSM6DS3.h" #include "Wire.h" #include "SPI.h" LSM6DS3 myIMU; //Default constructor is I2C, addr 0x6B void setup() { // put your setup code here, to run once: Serial.begin(9600); delay(1000); //relax... Serial.println("Processor came out of reset.\n"); //Call .begin() to configure the IMU myIMU.begin(); } void loop() { //Get all parameters Serial.print("\nAccelerometer:\n"); Serial.print(" X = "); Serial.println(myIMU.readFloatAccelX(), 4); Serial.print(" Y = "); Serial.println(myIMU.readFloatAccelY(), 4); Serial.print(" Z = "); Serial.println(myIMU.readFloatAccelZ(), 4); Serial.print("\nGyroscope:\n"); Serial.print(" X = "); Serial.println(myIMU.readFloatGyroX(), 4); Serial.print(" Y = "); Serial.println(myIMU.readFloatGyroY(), 4); Serial.print(" Z = "); Serial.println(myIMU.readFloatGyroZ(), 4); Serial.print("\nThermometer:\n"); Serial.print(" Degrees C = "); Serial.println(myIMU.readTempC(), 4); Serial.print(" Degrees F = "); Serial.println(myIMU.readTempF(), 4); delay(1000); }
[/codesyntax]
Output
Open the serial monitor and you should see something like this
Accelerometer:
X = -5.3704
Y = -3.1305
Z = 5.1440
Gyroscope:
X = 0.2800
Y = 0.0000
Z = 125.4400
Thermometer:
Degrees C = 25.0000
Degrees F = 77.0000
Accelerometer:
X = -3.2257
Y = -5.1040
Z = -1.9618
Gyroscope:
X = 0.2800
Y = 0.0000
Z = 125.4400
Thermometer:
Degrees C = 25.0000
Degrees F = 77.0000