🛠 Lire l'accélération avec l'IMU MPU6886
Objectifs
Lire les 3 axes d'accélération du MPU6886 (IMU 6 axes : accéléromètre + gyroscope) branché sur le bus I2C interne SDA=G21 / SCL=G22, le même que l'horloge temps réel BM8563 (adresses I2C classiques : 0x68 pour le MPU6886, 0x51 pour le BM8563). Afficher ax, ay, az en g sur l'écran et sur le moniteur série.
Matériel
- 1× M5StickC Plus2 (v2)
- Câble USB-C + driver CH9102
- Arduino IDE / PlatformIO, bibliothèque M5Unified
Code complet
// IMU MPU6886 sur I2C interne SDA=G21 SCL=G22 (adresse 0x68)
#include <M5Unified.h>
void setup {
auto cfg = M5.config;
M5.begin(cfg);
Serial.begin(115200);
M5.Display.setRotation(1);
M5.Display.setTextSize(2);
M5.Display.setTextColor(TFT_CYAN, TFT_BLACK);
if (!M5.Imu.isEnabled) {
M5.Display.println("IMU absente!"); // MPU6886 introuvable sur 0x68
}
}
void loop {
M5.update;
float ax = 0, ay = 0, az = 0;
M5.Imu.getAccel(&ax, &ay, &az); // en g (1 g = 9.81 m/s2)
M5.Display.setCursor(0, 10);
M5.Display.printf("ax %+5.2f g\n", ax);
M5.Display.printf("ay %+5.2f g\n", ay);
M5.Display.printf("az %+5.2f g\n", az);
Serial.printf("%f %f %f\n", ax, ay, az);
vTaskDelay(100 / portTICK_PERIOD_MS);
}
Vérification attendue
Posée à plat, l'écran affiche environ az = +1.00 g et ax/ay proches de 0 ; penchée sur la tranche, l'axe correspondant passe à ±1 g. Le moniteur série crache 10 lignes par seconde. Un petit scanner I2C (Wire.begin(21, 22)) trouve 0x68 (IMU) et 0x51 (RTC).
Erreurs fréquentes
- Scanner le mauvais bus : le connecteur Grove HY2.0-4P (PORT.CUSTOM, G32/G33) est un bus I2C séparé du bus interne G21/G22.
- Utiliser l'ancienne API
M5.Power.*ou la lib dépréciéeM5StickCPlus2.h: la v2 n'a plus de PMIC AXP192 et la lib n'est plus maintenue. - Attendre des degrés ou des m/s² :
getAccelrenvoie des g ; convertir soi-même si besoin. - Ne pas tester
M5.Imu.isEnabledet afficher des zéros sans comprendre (mauvais bus, mauvais board). - Confondre accéléromètre et gyroscope :
getGyrorenvoie la vitesse angulaire, pas l'inclinaison.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
hello-stick.inoArduinoboutons.inoArduinobuzzer.inoArduinoinclinometre.inoArduinohorloge.inoArduinoir-tv.inoArduino