4 · Écrans & bus
Calculer l'inclinaison (roll/pitch)
Expert30 min
Objectif
Transformer les 3 axes d'accélération en angles d'inclinaison.
Pourquoi c'est utile
atan2() sur le vecteur gravité donne l'attitude : c'est la base d'un stabilisateur.
Étapes
- 01Partez du sketch IMU.
- 02Calculez roll = atan2(ay, az) et pitch = atan2(-ax, √(ay²+az²)).
- 03Convertissez les radians en degrés (×57,2958).
- 04Filtrez légèrement le résultat pour le stabiliser.
Code de départ
// MPU6050 over I2C — raw register reads, no external library needed.
#include <Wire.h>
const uint8_t MPU = 0x68;
void writeReg(uint8_t reg, uint8_t val) {
Wire.beginTransmission(MPU);
Wire.write(reg);
Wire.write(val);
Wire.endTransmission();
}
int16_t readWord(uint8_t reg) {
Wire.beginTransmission(MPU);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(MPU, (uint8_t)2);
int16_t hi = Wire.read();
int16_t lo = Wire.read();
return (hi << 8) | lo;
}
void setup() {
Serial.begin(9600);
Wire.begin();
writeReg(0x6B, 0x00); // wake up
writeReg(0x1B, 0x00); // gyro +/- 250 deg/s
writeReg(0x1C, 0x00); // accel +/- 2 g
Serial.println("MPU6050 ready");
}
void loop() {
float ax = readWord(0x3B) / 16384.0;
float ay = readWord(0x3D) / 16384.0;
float az = readWord(0x3F) / 16384.0;
float gz = readWord(0x47) / 131.0;
Serial.print("accel ");
Serial.print(ax); Serial.print(" ");
Serial.print(ay); Serial.print(" ");
Serial.print(az);
Serial.print(" gyroZ ");
Serial.println(gz);
delay(300);
}
Ce tutoriel se réalise dans le simulateur Circuitly : le montage et le code sont vérifiés automatiquement à chaque étape.
Tutoriels suivants
- Écrire sur un écran OLED
Afficher du texte sur un SSD1306 128×64 via le bus I²C.
- OLED : tracer une courbe
Afficher en direct la valeur de A0 sous forme d'oscillogramme.
- Afficheur LCD 16×2
Écrire deux lignes de texte et un compteur qui s'incrémente.
- Écran TFT couleur en SPI
Piloter un ST7789 240×240 avec le port SPI matériel.