Nota

Ciao, benvenuto nella comunità di appassionati di SunFounder Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Accedi in anteprima agli annunci di nuovi prodotti e agli sneak peek.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e omaggi: Partecipa a giveaway e promozioni festive.

👉 Pronto per esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

MPU6050

Panoramica

In questo tutorial, imparerai a interfacciare il modulo IMU GY-87 con un Arduino Uno, concentrandoti sul sensore MPU6050. Tratteremo l’inizializzazione del MPU6050 e la visualizzazione dei dati dell’accelerometro, giroscopio e temperatura sul Monitor Seriale. Questa lezione è essenziale per progetti che richiedono il rilevamento del movimento e della temperatura, come robotica, dispositivi controllati da gesti e installazioni artistiche interattive.

Componenti necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Arduino Uno R4 WiFi

-

Cavi Jumper

ACQUISTA

Modulo IMU GY-87

-

Collegamenti

../_images/09-gy87_bb1.png

Schema Elettrico

../_images/09_basic_gy87_schematic.png

Codice

Nota

  • Puoi aprire il file 09-gy87_mpu6050.ino dal percorso elite-explorer-kit-main\basic_project\09-gy87_mpu6050 direttamente.

  • Oppure copia questo codice nell’IDE di Arduino.

Nota

Per installare la libreria, usa il Library Manager di Arduino e cerca «Adafruit MPU6050» e installala.

09-gy87_mpu6050.ino
 1/*
 2  This Arduino code is designed for interfacing with the GY-87 IMU module, focusing 
 3  specifically on the MPU6050 sensor, which includes an accelerometer and a gyroscope. 
 4  The code initializes the MPU6050 sensor and prints its accelerometer, gyroscope, and 
 5  temperature readings to the Serial Monitor at regular intervals.
 6  
 7  Board: Arduino Uno R4
 8  Component: GY-87 IMU Module
 9  Library: https://github.com/adafruit/Adafruit_MPU6050  (Adafruit MPU6050 by Adafruit)
10*/
11
12// Include required libraries
13#include <Adafruit_MPU6050.h>
14#include <Adafruit_Sensor.h>
15#include <Wire.h>
16
17// Initialize sensor objects
18Adafruit_MPU6050 mpu;
19
20void setup() {
21  // Initialize the serial communication with a baud rate of 9600
22  Serial.begin(9600);
23
24  // Initialize the MPU6050 sensor (accelerometer and gyroscope)
25  initializeMPU6050();
26}
27
28void loop() {
29  // Print MPU6050 data
30  printMPU6050();
31
32  delay(500);
33}
34
35
36void initializeMPU6050() {
37  // Check if the MPU6050 sensor is detected
38  if (!mpu.begin()) {
39    Serial.println("Failed to find MPU6050 chip");
40    while (1)
41      ;  // Halt if sensor not found
42  }
43  Serial.println("MPU6050 Found!");
44
45  // set accelerometer range to +-8G
46  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
47
48  // set gyro range to +- 500 deg/s
49  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
50
51  // set filter bandwidth to 21 Hz
52  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
53
54  Serial.println("");
55  delay(100);
56}
57
58void printMPU6050() {
59
60  Serial.println();
61  Serial.println("MPU6050 ------------");
62
63  /* Get new sensor events with the readings */
64  sensors_event_t a, g, temp;
65  mpu.getEvent(&a, &g, &temp);
66
67  /* Print out the values */
68  Serial.print("Acceleration X: ");
69  Serial.print(a.acceleration.x);
70  Serial.print(", Y: ");
71  Serial.print(a.acceleration.y);
72  Serial.print(", Z: ");
73  Serial.print(a.acceleration.z);
74  Serial.println(" m/s^2");
75
76  Serial.print("Rotation X: ");
77  Serial.print(g.gyro.x);
78  Serial.print(", Y: ");
79  Serial.print(g.gyro.y);
80  Serial.print(", Z: ");
81  Serial.print(g.gyro.z);
82  Serial.println(" rad/s");
83
84  Serial.print("Temperature: ");
85  Serial.print(temp.temperature);
86  Serial.println(" degC");
87
88  Serial.println("MPU6050 ------------");
89  Serial.println();
90}

Analisi del Codice

  1. Includi Librerie

    Le librerie Adafruit_MPU6050, Adafruit_Sensor e Wire sono incluse per l’interfacciamento e la comunicazione del sensore.

    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    
  2. Inizializza Oggetto Sensore

    Viene creato un oggetto della classe Adafruit_MPU6050 per rappresentare il sensore MPU6050.

    Adafruit_MPU6050 mpu;
    
  3. Funzione di Setup

    Inizializza la comunicazione seriale e chiama la funzione per inizializzare il sensore MPU6050.

    void setup() {
      Serial.begin(9600);
      initializeMPU6050();
    }
    
  4. Funzione di Loop

    Chiama ripetutamente la funzione per stampare i dati del MPU6050 con un ritardo di 500 millisecondi tra ogni chiamata.

    void loop() {
      printMPU6050();
      delay(500);
    }
    
  5. Funzione di Inizializzazione del MPU6050

    Controlla se il MPU6050 è collegato, imposta i range di accelerometro e giroscopio, e configura la larghezza di banda del filtro.

    void initializeMPU6050() {
      // Controlla se il sensore MPU6050 è rilevato
      if (!mpu.begin()) {
        Serial.println("Failed to find MPU6050 chip");
        while (1)
          ;  // Blocca se il sensore non è trovato
      }
      Serial.println("MPU6050 Found!");
    
      // imposta il range dell'accelerometro a +-8G
      mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
    
      // imposta il range del giroscopio a +- 500 deg/s
      mpu.setGyroRange(MPU6050_RANGE_500_DEG);
    
      // imposta la larghezza di banda del filtro a 21 Hz
      mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
    
      Serial.println("");
      delay(100);
    }
    
  6. Funzione per Stampare i Dati del MPU6050

    Legge e stampa i dati di accelerazione, giroscopio e temperatura dal MPU6050 sul Monitor Seriale.

    void printMPU6050() {
    
      Serial.println();
      Serial.println("MPU6050 ------------");
    
      /* Ottieni nuovi eventi del sensore con le letture */
      sensors_event_t a, g, temp;
      mpu.getEvent(&a, &g, &temp);
    
      /* Stampa i valori */
      Serial.print("Accelerazione X: ");
      Serial.print(a.acceleration.x);
      Serial.print(", Y: ");
      Serial.print(a.acceleration.y);
      Serial.print(", Z: ");
      Serial.print(a.acceleration.z);
      Serial.println(" m/s^2");
    
      Serial.print("Rotation X: ");
      Serial.print(g.gyro.x);
      Serial.print(", Y: ");
      Serial.print(g.gyro.y);
      Serial.print(", Z: ");
      Serial.print(g.gyro.z);
      Serial.println(" rad/s");
    
      Serial.print("Temperature: ");
      Serial.print(temp.temperature);
      Serial.println(" degC");
    
      Serial.println("MPU6050 ------------");
      Serial.println();
    }