Arduino: come funziona il modulo GY-521

In questa lezione si imparerà ad utilizzare il modulo GY-521, uno dei migliori sensori IMU (Inertia Measurement Unit – Sensore di misura dell’inerzia) compatibili con la board di Arduino.

Tali sensori sono utilizzati per robot capaci di stare in equilibrio, UAV, smartphone, nei dispositivi indossabili, nei controller e così via. I sensori IMU ci aiutano a stabilire la posizione di un oggetto e stabile le coordinate (l’unità di misura utilizzata molto spesso sono i gradi) nelle tre dimensioni.

Il sensore GY-521 è sviluppato dalla società InvenSense  e contiene al suo interno accelerometri e giroscopi MEMS (Micro Electro-Mechanical System). Inoltre contiene anche un convertitore analogico digitale a 16 bit per ogni canale.

Per tal motivo rileva contemporaneamente l’inerzia sugli assi x,y e z. Per interfacciarsi con Arduino il sensore utilizza una connessione I2C-bus.

I sensori IMU sono composti da due o più componenti. Tra questi vi è l’accelerometro, il giroscopio, il magnetometro ed l’altimetro.

Il sensore GY-521 è in grado di fornire ben 6 valori come output. Tre di questi saranno ricavati dall’accelerometro e 3 dal giroscopio. Accelerometro e giroscopio, sono entrambi contenuti all’interno di un singolo chip.

Come funzione l’accelerometro

Un’accelerometro funziona sfruttando il principio dell’effetto piezoelettrico. Immagina una scatola di forma cubica con una piccola sferetta all’interno come nell’immagine sottostante. Le pareti di questa scatola sono fatte di materiale cristallino piezoelettrico. Quando ruoti il box la sferetta è forzata a muoversi, ad opera della forza di gravità, nella direzione in cui viene inclinata la scatola. Le pareti contro cui la sferetta collide, creano delle leggerissime scariche di piezoelettricità. La scatola è composta da un totale di 3 paia di pareti opposte. Ogni paio corrisponde ad un asse nello spazio tridimensionale: secondo le assi X, Y, Z. In base alla corrente piezoelettrica prodotta dalle pareti cristalline si può determinare la direzione dell’inclinazione.

GY-521

Un’improvvisa accelerazione provoca uno shock e una compressione della struttura del cristallo piezoelettrico che reagisce generando un segnale elettrico ben preciso. Rilevando questo segnale elettrico ed elaborandolo adeguatamente, l’accelerometro è dunque in grado di determinare da quale direzione giunga la spinta acceleratrice e quale sia la sua forza.

I movimenti saranno registrati esclusivamente su un piano orizzontale (o verticale) e dunque bidimensionale.

Per la digitalizzare dei valori viene utilizzato un ADC a 16 bit, Gli intervalli di uscita a fondo scala possibili sono: +/- 2g, +/- 4g, +/- 8g, +/- 16g.
In posizione normale, cioè quando il dispositivo è posizionato su una superficie piana, i valori sono 0 g sull’asse x, 0 g sull’asse y e +1 sull’asse z.

Come funziona un giroscopio

Il giroscopio funziona sfruttando il principio di accelerazione di Coriolis. Immagina che ci sia una struttura simile ad una forca che compie un movimento costante, avanti ed indietro. Questa struttura è tenuta in posizione da un cristallo piezoelettrico. Ogni qualvolta la struttura viene mossa il cristallo subisce una forza nella direzione dell’inclinazione, questa forza è causata dal risultato della forza di inerzia applicata alla forca. Il cristallo in questo modo produce una corrente dovuta all’effetto piezoelettrico e tale corrente viene amplificata. Questi valori sono raffinati poi dal microcontrollore.

L’ADC a 16 bit viene utilizzato per digitalizzare la tensione per campionare ciascun asse. Gli intervalli di uscita a fondo scala sono : +/- 250, +/- 500, +/- 1000, +/- 2000.  La velocità angolare viene misurata lungo ciascun asse in gradi al secondo unità.

GY-521

I materiali da utilizzare sono i seguenti:

Il diagramma di collegamento è il seguente:

GY-521

Il codice da utilizzare è il seguente:

Il breve esempio ci mostra tutti i valori grezzi (accelerometro, giroscopio, temperatura).

GY-521

Luigi Morelli aveva a suo tempo presentato un articolo in cui analizzava un sismografo utilizzando questo sensore. Per chi fosse interessato a realizzarne è disponibile un articolo nel seguente link.

Per acquistare il sensore clicca qui.

Link utili

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.

3 Comments

  1. Marco | | Reply

    Ciao, ho montato il tutto, non avevo dubbi sul funzionamento, ma voglio farti una domanda… da profano: se il sensore è completamente immobile, perchè mi vengono restituiti valori diversi da zero? sia per il giroscopio che per l’accelerometro.

    • Luigi_Morelli | | Reply

      Prova ad utilizzare il plotter seriale anziché il serial print (come mostrato in questo articolo: https://www.moreware.org/wp/blog/2019/08/19/come-costruire-un-sismografo-con-arduino/ ).
      Noterai che anche in quel caso la linea che rappresenta gli spostamenti non è perfettamente piatta, ma suscettibile di piccole variazioni nel tempo. Ciò è dovuto, tra le altre cose, al fatto che il GY-521 ha un ADC a 16 bit, mentre Arduino lavora a 8 bit, quindi parte della sensibilità del sistema viene “tagliata via”, e con essa la precisione. A questo aggiungi le micro-fluttuazioni nella tensione, che potrebbero modificare leggermente l’0assorbimento del sistema, le perdite e le resistenze indotte dai cavi e dal loro riscaldamento al passaggio della corrente.
      Si tratta di flutuazioni minime, ma in un oggettino del valore di 2-3 euro fanno parte della tolleranza minima. Potresti comunque ovviare al problema, tarando lo strumento dividendo i risultati per un valore dinamico. Perderesti in precisione, ma elimineresti le fluttuazioni.

      Buon divertimento!

      • Marco | | Reply

        Grazie

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.