Tous les tutoriels

4 · Écrans & bus

Centrale inertielle MPU6050

Expert30 min

Objectif

Lire accéléromètre et gyroscope sur le bus I²C.

Pourquoi c'est utile

Ces six axes sont le cœur de tout drone, téléphone ou montre connectée.

Étapes

  1. 01Glissez le MPU6050 (SDA A4, SCL A5, adresse 0x68).
  2. 02Chargez le sketch de départ : il réveille le capteur et lit ses registres.
  3. 03Lancez, ouvrez le panneau Scénario et inclinez la carte virtuelle.
  4. 04Observez les valeurs suivre les curseurs dans le moniteur série.

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