MPU6050 con Arduino: leggere accelerazione su X, Y e Z
Impariamo a collegare il sensore MPU6050 ad Arduino e a leggere nel monitor seriale i valori dell’accelerometro sui tre assi.
🧭 Introduzione
In questo progetto utilizzeremo il modulo MPU6050, un sensore molto diffuso nei progetti Arduino dedicati al rilevamento del movimento e dell’orientamento.
L’MPU6050 integra al suo interno:
Misura l’accelerazione lungo gli assi X, Y e Z.
Misura la velocità di rotazione attorno agli assi X, Y e Z.
Nel nostro primo esempio utilizzeremo soltanto la parte accelerometro e visualizzeremo i valori grezzi nel monitor seriale.
🎯 Cosa imparerai
- come collegare un MPU6050 ad Arduino;
- come funziona la comunicazione I2C;
- come inizializzare il sensore;
- come leggere gli assi X, Y e Z;
- come visualizzare i valori nel monitor seriale;
- come riconoscere variazioni dovute a movimento e inclinazione;
- come verificare che il sensore comunichi correttamente con Arduino.
🧰 Materiale necessario
🛒 Non hai ancora i componenti?
Un kit Arduino per principianti contiene molti dei componenti utili per realizzare questo e numerosi altri progetti.
Kit Arduino consigliato → Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.📘 Vuoi imparare Arduino passo dopo passo?
Scopri i miei libri → Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.🔌 Schema di collegamento
Il modulo MPU6050 comunica con Arduino tramite protocollo I2C.
| MPU6050 | Arduino UNO |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
🔗 Come funziona I2C
La comunicazione I2C utilizza soltanto due linee principali.
Trasporta i dati tra Arduino e il sensore.
Trasporta il segnale di clock che sincronizza la comunicazione.
Su Arduino UNO:
- SDA → A4
- SCL → A5
Il vantaggio di I2C è che più dispositivi possono condividere le stesse linee SDA e SCL utilizzando indirizzi differenti.
📚 Librerie necessarie
Il progetto utilizza:
- Wire
- MPU6050
La libreria Wire è già inclusa nell’IDE Arduino.
Per la libreria MPU6050 apri:
Sketch
→ Include Library
→ Manage Libraries
e installa una libreria compatibile con l’MPU6050.
💻 Codice Arduino completo
// ============================================
// Progetto #77
// Accelerometro MPU6050 con Arduino
//
// Legge i valori grezzi di accelerazione
// sugli assi X, Y e Z
// ============================================
#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
void setup() {
Serial.begin(9600);
// Avvia la comunicazione I2C
Wire.begin();
// Inizializza il sensore MPU6050
mpu.initialize();
Serial.println("MPU6050 inizializzato");
// Verifica la comunicazione con il sensore
if (mpu.testConnection()) {
Serial.println("Connessione MPU6050 OK");
} else {
Serial.println("Errore connessione MPU6050");
}
}
void loop() {
int16_t ax;
int16_t ay;
int16_t az;
// Legge l'accelerazione sui tre assi
mpu.getAcceleration(&ax, &ay, &az);
Serial.print("X: ");
Serial.print(ax);
Serial.print(" | Y: ");
Serial.print(ay);
Serial.print(" | Z: ");
Serial.println(az);
delay(500);
}
⚙️ Come funziona il programma
Per prima cosa viene inizializzata la comunicazione I2C:
Wire.begin();
Poi inizializziamo il sensore:
mpu.initialize();
La funzione:
mpu.testConnection()
permette di controllare se Arduino riesce a comunicare con il sensore.
Infine:
mpu.getAcceleration(&ax, &ay, &az);
legge contemporaneamente i valori di accelerazione sui tre assi.
📐 Cosa rappresentano X, Y e Z
L’MPU6050 misura l’accelerazione lungo tre direzioni perpendicolari tra loro.
Accelerazione lungo l’asse X del sensore.
Accelerazione lungo l’asse Y del sensore.
Accelerazione lungo l’asse Z del sensore.
Anche quando il sensore è fermo, un asse rileva l’accelerazione gravitazionale.
🔢 Perché i valori non sono espressi direttamente in g?
La funzione getAcceleration() restituisce valori grezzi provenienti dal convertitore interno dell’MPU6050.
Questi numeri devono essere convertiti se vogliamo ottenere valori fisici come:
- g
- m/s²
Con il fondo scala standard di ±2 g, il valore corrispondente a circa 1 g è tipicamente vicino a:
16384
Per esempio:
float ax_g = ax / 16384.0;
permette di ottenere l’accelerazione dell’asse X espressa approssimativamente in g.
🌍 Cosa succede quando il sensore è fermo
Un accelerometro non misura solamente i movimenti.
Quando il sensore è fermo sulla scrivania, rileva comunque l’effetto della gravità terrestre.
Per questo motivo potresti osservare qualcosa simile a:
X: 150
Y: -260
Z: 16420
Se il modulo è appoggiato in piano, generalmente l’asse orientato verticalmente registra un valore vicino a 1 g, mentre gli altri due restano vicini allo zero.
📊 Monitor seriale
Apri il monitor seriale dell’IDE Arduino e imposta:
9600 baud
Vedrai dati simili a:
X: 124 | Y: -318 | Z: 16390
X: 131 | Y: -325 | Z: 16375
X: 1940 | Y: -840 | Z: 15810
Muovendo o inclinando il sensore noterai immediatamente cambiare i valori.
🌀 E il giroscopio?
L’MPU6050 non contiene soltanto un accelerometro.
Integra anche un giroscopio a tre assi, che permette di misurare la velocità di rotazione.
Misura accelerazioni lineari e gravità.
Misura la velocità di rotazione.
Combinando i dati dei due sensori è possibile stimare in modo molto più efficace l’orientamento del dispositivo.
⚠️ Problemi comuni
Controlla SDA, SCL, VCC e GND.
Verifica che il sensore sia inizializzato correttamente.
È normale: intervengono gravità, offset e rumore.
Può essere necessario effettuare una calibrazione.
Controlla di aver installato la stessa libreria utilizzata dal codice.
Dipende dall’orientamento fisico del modulo.
🎯 Calibrazione del sensore
Ogni MPU6050 presenta piccoli errori e offset.
Per applicazioni più precise è quindi utile effettuare una calibrazione.
La calibrazione permette di compensare:
- offset dell’accelerometro;
- offset del giroscopio;
- piccole differenze tra un sensore e l’altro.
🔄 Varianti possibili
Calcola l’inclinazione del sensore.
Muove un servo in base all’inclinazione.
Usa il movimento come comando.
Rileva accelerazioni improvvise.
Visualizza i valori senza computer.
Invia i dati del movimento tramite Wi-Fi.
🚀 Progetto successivo: calcolare l’inclinazione
Ora che sappiamo leggere X, Y e Z, possiamo utilizzare questi valori per calcolare l’orientamento del sensore.
Per esempio possiamo ricavare:
- roll;
- pitch;
- variazioni di inclinazione;
- movimenti improvvisi.
🧠 Cosa impari con questo progetto
- cos’è un accelerometro;
- cos’è un giroscopio;
- come funziona il protocollo I2C;
- come collegare SDA e SCL;
- come inizializzare un MPU6050;
- come leggere X, Y e Z;
- come interpretare i dati grezzi;
- perché la gravità influenza le misure;
- perché può essere necessaria una calibrazione.
✅ Cosa devi ricordare
- l’MPU6050 contiene accelerometro e giroscopio;
- utilizza la comunicazione I2C;
- su Arduino UNO SDA = A4;
- su Arduino UNO SCL = A5;
- Wire.begin() avvia I2C;
- mpu.initialize() inizializza il sensore;
- getAcceleration() legge X, Y e Z;
- i valori restituiti sono inizialmente grezzi;
- la gravità viene rilevata anche quando il modulo è fermo;
- l’orientamento fisico del modulo determina il significato pratico degli assi.

