imu_lsm6dsox.ino

Arduino Nicla Vision · Archivo : imu_lsm6dsox.ino · Lenguaje : Arduino · Uso : Lire accélération et gyroscopes de l’IMU

La IMU de 6 ejes LSM6DSOX de la Nicla Vision se abre en tres líneas con la librería Arduino_LSM6DSOX: aceleración en g y velocidad angular en °/s, lista para detección de impacto, inclinación o gesto. El punto de entrada de todo proyecto de movimiento.

Hardware

Una Arduino Nicla Vision (STM32H7 M7+M4, 23×23 mm) con cámara GC2145, IMU LSM6DSOX, micrófono PDM, ToF (VL53Lx), módulo ESP32 Wi-Fi/BLE y LED RGB (LEDR/G/B). La placa sola; la IMU va soldada. Un cable USB para la consola serie a 115200.

Cableado

Sin cableado: la LSM6DSOX está en el bus I2C interno de la placa, invisible por fuera.

Funcionamiento

IMU.begin() detecta el chip; las lecturas son no bloqueantes (accelerationAvailable y luego readAcceleration). El muestreo serie a 5 Hz mantiene la consola legible.

Ejecución

Programación desde Arduino IDE (core ArduinoCore-mbed) por USB-C; librerías Camera, PDM, LSM6DSOX, WiFiNINA y ArduinoBLE.

Variantes

Calcular la inclinación con atan2 sobre ax/az, detectar impacto por umbral sobre la norma, o enviar los 6 ejes por BLE a un teléfono.

imu_lsm6dsox.ino

// IMU LSM6DSOX embarquée (accéléro + gyro 6 axes).
// Bibliothèque : Arduino_LSM6DSOX (Gestionnaire de libraries).

#include <Arduino_LSM6DSOX.h>

void setup() {
  Serial.begin(115200);
  while (!Serial) { ; }
  if (!IMU.begin()) {
    Serial.println("IMU absente — vérifier la carte");
    while (1) { ; }
  }
  Serial.print("Accéléro : "); Serial.print(IMU.accelerationSampleRate());
  Serial.println(" Hz");
}

void loop() {
  float ax, ay, az, gx, gy, gz;

  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(ax, ay, az);   // en g (1 g = 9.81 m/s²)
  }
  if (IMU.gyroscopeAvailable()) {
    IMU.readGyroscope(gx, gy, gz);      // en degrés/s
  }

  static unsigned long t = 0;
  if (millis() - t > 200) {
    t = millis();
    Serial.print("ax="); Serial.print(ax);
    Serial.print(" ay="); Serial.print(ay);
    Serial.print(" az="); Serial.print(az);
    Serial.print(" gz="); Serial.println(gz);
  }
}

← Volver a la ficha