imu_lsm6dsox.ino
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);
}
}