The LSM6DS3TR-C + LIS3MDL is plugged into the Arduino board's STEMMA port, if available, with a STEMMA QT cable. Otherwise, it can be wired to the board's pins.
-
Board 5V to sensor VIN (red wire)
-
Board GND to sensor GND (black wire)
-
Board SCL to sensor SCL (yellow wire)
- Board SDA to sensor SDA (blue wire)
Library Installation
You can install the Adafruit LIS3MDL library and the Adafruit LSM6DS library for Arduino using the Library Manager in the Arduino IDE.
Click the Manage Libraries ... menu item, search for Adafruit LIS3MDL, and select the Adafruit LIS3MDL library:
Follow the same process for the Adafruit LSM6DS library.
If asked about dependencies, click "Install all".
If the "Dependencies" window does not come up, then you already have the dependencies installed.
// SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries // // SPDX-License-Identifier: MIT #include <Adafruit_LSM6DS3TRC.h> int x; int y; int z; Adafruit_LSM6DS3TRC lsm6ds; void setup() { // put your setup code here, to run once: Serial.begin(9600); if (!lsm6ds.begin_I2C()) { while (1) { delay(10); } } lsm6ds.setAccelRange(LSM6DS_ACCEL_RANGE_2_G); lsm6ds.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS); lsm6ds.setAccelDataRate(LSM6DS_RATE_104_HZ); lsm6ds.setGyroDataRate(LSM6DS_RATE_104_HZ); } void loop() { // put your main code here, to run repeatedly: sensors_event_t accel; sensors_event_t gyro; sensors_event_t temp; lsm6ds.getEvent(&accel, &gyro, &temp); x = map(accel.acceleration.x, -12, 11, 180, -180); y = map(accel.acceleration.y, -19, 20, -180, 180); z = map(accel.acceleration.z, -17, 15, 180, -180); Serial.print("|"); Serial.print(x); Serial.print("|"); Serial.print(y); Serial.print("|"); Serial.print(z); Serial.println(); delay(50); }
For this code to work, you need to follow the calibration steps outlined in the How to Fuse Motion Sensor Data into AHRS Orientation Learn Guide.
// SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries // // SPDX-License-Identifier: MIT #include <Adafruit_LSM6DS3TRC.h> #include <Adafruit_AHRS.h> #include <Adafruit_Sensor_Calibration.h> #include <Adafruit_LIS3MDL.h> Adafruit_Sensor *accelerometer, *gyroscope, *magnetometer; Adafruit_LIS3MDL lis3mdl; Adafruit_LSM6DS3TRC lsm6ds; //Adafruit_NXPSensorFusion filter; // slowest //Adafruit_Madgwick filter; // faster than NXP Adafruit_Mahony filter; #if defined(ADAFRUIT_SENSOR_CALIBRATION_USE_EEPROM) Adafruit_Sensor_Calibration_EEPROM cal; #else Adafruit_Sensor_Calibration_SDFat cal; #endif #define FILTER_UPDATE_RATE_HZ 100 #define PRINT_EVERY_N_UPDATES 10 uint32_t timestamp; void setup() { // put your setup code here, to run once: Serial.begin(9600); if (!lsm6ds.begin_I2C()) { while (1) { delay(10); } } accelerometer = lsm6ds.getAccelerometerSensor(); gyroscope = lsm6ds.getGyroSensor(); magnetometer = &lis3mdl; lsm6ds.setAccelRange(LSM6DS_ACCEL_RANGE_2_G); lsm6ds.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS); lis3mdl.setRange(LIS3MDL_RANGE_4_GAUSS); lsm6ds.setAccelDataRate(LSM6DS_RATE_104_HZ); lsm6ds.setGyroDataRate(LSM6DS_RATE_104_HZ); lis3mdl.setDataRate(LIS3MDL_DATARATE_1000_HZ); lis3mdl.setPerformanceMode(LIS3MDL_MEDIUMMODE); lis3mdl.setOperationMode(LIS3MDL_CONTINUOUSMODE); filter.begin(FILTER_UPDATE_RATE_HZ); } void loop() { float roll, pitch, heading; float gx, gy, gz; static uint8_t counter = 0; sensors_event_t accel, gyro, mag; accelerometer->getEvent(&accel); gyroscope->getEvent(&gyro); magnetometer->getEvent(&mag); cal.calibrate(mag); cal.calibrate(accel); cal.calibrate(gyro); gx = gyro.gyro.x * SENSORS_RADS_TO_DPS; gy = gyro.gyro.y * SENSORS_RADS_TO_DPS; gz = gyro.gyro.z * SENSORS_RADS_TO_DPS; filter.update(gx, gy, gz, accel.acceleration.x, accel.acceleration.y, accel.acceleration.z, mag.magnetic.x, mag.magnetic.y, mag.magnetic.z); if (counter++ <= PRINT_EVERY_N_UPDATES) { return; } counter = 0; roll = filter.getRoll(); pitch = filter.getPitch(); heading = filter.getYaw(); Serial.print("|"); Serial.print(heading); Serial.print("|"); Serial.print(pitch); Serial.print("|"); Serial.print(roll); Serial.println(); }
Page last edited January 16, 2025
Text editor powered by tinymce.