🛠 Inclinomètre sur la matrice : l'IMU LSM6DSV16X en I²C

Arduino UNO R4 WiFi · intermediaire · Schéma : IMG-uno-r4-wifi-intermediaire-2-ur4wifi-imu-matrice.svg — UNO R4 WiFi inclinée sur la tranche, puce IMU LSM6DSV16X surlignée près du connecteur Qwiic, bus I²C A4/A5 annoté SDA/SCL, matrice LED affichant une flèche qui suit l'inclinaison.

Objectifs

Lire un capteur réel sur le bus I²C : la carte embarque une centrale inertielle 6 axes ST LSM6DSV16X (accéléromètre + gyroscope) connectée en interne, et un connecteur Qwiic (I²C, 3,3 V) pour brancher des capteurs sans soudure. Vous allez lire l'accélération et mapper l'inclinaison sur la matrice LED — premier pas vers un niveau à bulle ou un jeu d'inclinaison.

Matériel

Code complet

#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);
}

Vérification attendue

Une LED se déplace sur la matrice quand vous inclinez la carte dans les deux axes ; le Traceur série montre ax ≈ 0, ay ≈ 0, az ≈ 1 g à plat (convention de la bibliothèque). Soufflez ou tapez sur la table : le gyroscope (non utilisé ici) capterait la vibration.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels