Un corpo può ruotare nello spazio lungo 3 assi, facendo riferimento alla dinamica applicata ai velivoli si parla più propriamente di rollio (Roll), beccheggio (Pitch) e imbardata (Yaw). In questo nuovo articolo sull’accelerometro/giroscopio MPU6050 parlerò proprio di come sia possibile ricavare questi dati (Roll, Pitch e Yaw) tramite Arduino con una semplice formula. Per la parte teorica vi rimando al magnifico articolo scritto da settorezero.com.

inclinazione_spazio

Con un accelerometro è possibile determinare gli angoli di rollio e beccheggio utilizzando le seguenti formule:

Angolo di beccheggio (Pitch)formula10

Angolo di rollio (Roll)formula111

Mentre per determinare l’angolo di imbardata (Yaw) sarà necessario utilizzare il giroscopio. Il giroscopio è utile per misurare la velocità angolare dei tre assi in gradi/sec. Dopo aver acquisito il valore della velocità angolare di un asse, basterà dividere il valore per 1000 (1000ms = 1 secondo ) e sommare il risultato in una variabile ogni volta che si verifica un  piccolo spostamento del giroscopio. La formula finale sarà così:

Schema

GY-521_BreadBoard_Arduino

MPU6050ARDUINO
VCC->+3.3V
GND->GND
SDA->A4
SCL->A5

Per ulteriori chiarimenti sui collegamenti da fare, vi consiglio di prendere visione del mio articolo sull’accelerometro MPU6050.

Ho scoperto da poco una libreria molto utile in grado di facilitare (e non di poco) l’utilizzo del mpu6050 ai meno esperti.

In seguito lo sketch (senza l’uso di librerie esterne) da caricare su Arduino, in questo caso verranno calcolati solo gli angoli Roll e Pitch.

Sketch without lib

Aprendo il Monitor Seriale di Arduino è possibile consultare gli angoli di Rollio, Beccheggio.

Mentre chi è interessato ad utilizzare l’mpu6050 tramite una libreria, dovrà scaricare la libreria da qui  ed inserirla in \Documents\Arduino\libraries\… e caricare lo sketch qui in basso. 

Sketch with lib

Come si può notare dalla riga 21 è possibile settare la scala DPS e la sensibilità in G.

Per settare la scala DPS basta sostituire MPU6050_SCALE_2000DPS con:

  • MPU6050_SCALE_2000DPS
  • MPU6050_SCALE_1000DPS
  • MPU6050_SCALE_500DPS
  • MPU6050_SCALE_250DPS

Mentre per quanto riguarda il range di sensibilità bisogna sostituire MPU6050_RANGE_2G con:

  • MPU6050_RANGE_2G
  • MPU6050_RANGE_4G
  • MPU6050_RANGE_8G
  • MPU6050_RANGE_16G

NB: Ho diviso il valore dell’asse z del gyro per 100 (e non per 1000) poichè ho aggiunto un ritardo di 10ms, dunque 1000/10 = 100.

Aprendo il monitor seriale si dovrebbero visualizzare i tre angoli. Per ora è tutto.

Per qualsiasi dubbio non esitate a lasciare un commento. Ciao a tutti a presto! 🙂

Ciao, se ti è piaciuto il mio blog e se qualche articolo ti è stato d’aiuto, se te la senti e se vuoi, incentiva il mio lavoro offrendomi un caffè o qualunque altra cosa preferisci farmi ricevere. Cercherò di dare il meglio di me e di inserire articoli sempre più interessanti e utili 🙂 . Clicca QUI per la donazione!