🛠 Inclinomètre sur la matrice : l'IMU LSM6DSV16X en I²C
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
- 1 Arduino UNO R4 WiFi + câble USB-C
- Bibliothèque Arduino_LSM6DSV16X (Gestionnaire de bibliothèques de l'IDE)
- Optionnel : un module Qwiic (capteur environnement, OLED) pour tester le bus externe.
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
IMU.beginéchoue en boucle : l'IMU est sur le bus I²C interne ; si vous avez bricolé A4/A5 (bus partagé avec les broches SDA/SCL), le bus est peut-être bloqué ou tiré à l'envers.- Attendre des valeurs en m/s² ou en g sans lire la doc de la bibliothèque : les exemples officiels donnent l'unité — vérifiez avant de calibrer.
- Comparer des float avec == : l'accélération bruitée ne tombe jamais pile sur 0 ; utilisez des plages ou
constrain. - Brancher un module Qwiic 3,3 V en 5 V sur A4/A5 : les modules Qwiic sont en 3,3 V, l'alimentation se prend sur la broche dédiée du connecteur.
- Interrompre les communications I²C pendant que la matrice se rafraîchit : les deux périphériques partagent des ressources ; si le scan I²C externe est muet, débranchez d'abord vos fils sur A4/A5.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino