🛠 Lire l'accélération avec l'IMU MPU6886
Objetivos
Leer los 3 ejes de aceleración del MPU6886 (IMU de 6 ejes: acelerómetro + giroscopio) conectado al bus I2C interno SDA=G21 / SCL=G22, el mismo que el reloj de tiempo real BM8563 (direcciones I2C clásicas: 0x68 para el MPU6886, 0x51 para el BM8563). Mostrar ax, ay, az en g en la pantalla y en el monitor serie.
Material
- 1× M5StickC Plus2 (v2)
- Cable USB-C + driver CH9102
- Arduino IDE / PlatformIO, biblioteca M5Unified
Código completo
// 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);
}
Verificación esperada
Colocado en plano, la pantalla muestra aproximadamente az = +1.00 g y ax/ay cercanos a 0; inclinado sobre su borde, el eje correspondiente pasa a ±1 g. El monitor serie imprime 10 líneas por segundo. Un pequeño escáner I2C (Wire.begin(21, 22)) encuentra 0x68 (IMU) y 0x51 (RTC).
Errores frecuentes
- Escanear el bus equivocado: el conector Grove HY2.0-4P (PORT.CUSTOM, G32/G33) es un bus I2C separado del bus interno G21/G22.
- Utilizar la antigua API
M5.Power.*o la librería obsoletaM5StickCPlus2.h: la v2 ya no tiene PMIC AXP192 y la librería ya no se mantiene. - Esperar grados o m/s²:
getAcceldevuelve g; conviértalo usted mismo si es necesario. - No probar
M5.Imu.isEnabledy mostrar ceros sin entender la causa (bus equivocado, placa equivocada). - Confundir acelerómetro y giroscopio:
getGyrodevuelve la velocidad angular, no la inclinación.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
hello-stick.inoArduinoboutons.inoArduinobuzzer.inoArduinoinclinometre.inoArduinohorloge.inoArduinoir-tv.inoArduino