🛠 Inclinomètre sur la matrice : l'IMU LSM6DSV16X en I²C
Objetivos
Leer un sensor real en el bus I²C: la placa incorpora una unidad de medición inercial (IMU) de 6 ejes ST LSM6DSV16X (acelerómetro + giroscopio) conectada internamente, y un conector Qwiic (I²C, 3,3 V) para conectar sensores sin soldadura. Vas a leer la aceleración y mapear la inclinación sobre la matriz LED — primer paso hacia un nivel de burbuja o un juego de inclinación.
Material
- 1 Arduino UNO R4 WiFi + cable USB-C
- Biblioteca Arduino_LSM6DSV16X (Gestor de bibliotecas del IDE)
- Opcional: un módulo Qwiic (sensor ambiental, OLED) para probar el bus externo.
Código completo
#include <Arduino_LSM6DSV16X.h>
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup {
Serial.begin(115200);
while (!Serial && millis < 5000) { }
if (!IMU.begin) {
Serial.println(F("IMU absente — vérifiez le bus I2C"));
while (true) { }
}
Serial.print(F("Accro. min/max : ")); Serial.print(IMU.accelerationMinX);
Serial.print(F(" / ")); Serial.println(IMU.accelerationMaxX);
matrix.begin;
}
void loop {
float ax, ay, az;
if (IMU.readAcceleration(ax, ay, az)) {
// ay > 0 : penché d'un côté, ay < 0 : de l'autre (axes carte).
int col = (int)((ax + 1.0f) / 2.0f * 11.0f); // -1..+1 -> 0..11
col = constrain(col, 0, 11);
int row = (int)((ay + 1.0f) / 2.0f * 7.0f); // -1..+1 -> 0..7
row = constrain(row, 0, 7);
matrix.beginFrame;
for (uint8_t c = 0; c < 12; c++)
matrix.setColumn(c, c == col ? (1 << row) : 0);
matrix.show;
Serial.print(ax); Serial.print('\t'); Serial.print(ay);
Serial.print('\t'); Serial.println(az);
}
delay(30);
}
Verificación esperada
Un LED se desplaza sobre la matriz cuando inclinas la placa en los dos ejes; el Monitor serie muestra ax ≈ 0, ay ≈ 0, az ≈ 1 g en posición plana (convención de la biblioteca). Sopla o golpea la mesa: el giroscopio (no utilizado aquí) captaría la vibración.
Errores frecuentes
IMU.beginfalla en bucle: la IMU está en el bus I²C interno; si has manipulado A4/A5 (bus compartido con los pines SDA/SCL), es posible que el bus esté bloqueado o conectado al revés.- Esperar valores en m/s² o en g sin leer la documentación de la biblioteca: los ejemplos oficiales indican la unidad — verifica antes de calibrar.
- Comparar floats con ==: la aceleración con ruido nunca cae exactamente en 0; utiliza rangos o
constrain. - Conectar un módulo Qwiic de 3,3 V a 5 V en A4/A5: los módulos Qwiic funcionan a 3,3 V, la alimentación se toma del pin dedicado del conector.
- Interrumpir las comunicaciones I²C mientras la matriz se refresca: ambos periféricos comparten recursos; si el escaneo I²C externo no responde, desconecta primero tus cables en A4/A5.
Otros tutoriales para esta placa
- Premier Blink sur la UNO R4 WiFi : la première UNO 32 bits
- Apprivoiser la matrice LED 12x8 intégrée
- Toucher capacitif : touchRead sans composant
- Se connecter au WiFi et lire l'heure NTP (WiFiS3)
- Serveur web embarqué : piloter la matrice depuis le navigateur
- Horloge persistante : RTC à pile + resynchronisation NTP
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino