MENU

Progettiamo un robot evita ostacoli (parte 3)

maggio 27, 2018 Comments (0) Guide e Tutorial

Calibrazione e Arduino

Molti progetti Arduino sfruttano dispositivi come accelerometri, magnetometri e giroscopi. Il maker alle prime armi che utilizza questi componenti spesso trascura un fatto molto importante che porta ad un cattivo o inaspettato funzionamento del progetto. Oltre a possibili errori di montaggio e cablaggio, una “svista” che passa spesso inosservata è la calibrazione di questi dispositivi.

A cosa serve la calibrazione?

Un dispositivo, come ad esempio un accelerometro, non è subito pronto all’uso quando esce dalla fabbrica. Questo, come i componenti a lui affini (dove si intende come dispositivo la parte del componente che serve attivamente a raccogliere i dati e come processore quella parte che li interpreta), presenta un disallineamento tra gli assi del dispositivo e del processore che vi è montato sopra. Spesso, inoltre, questi assi non condividono nemmeno la stessa origine.

E’ molto facile accorgersi che un oggetto di questo tipo necessita della calibrazione.

Si può procedere costruendo un semplice schema Arduino che preveda la lettura sui tre assi del processore dei valori delle accelerazioni (facilmente reperibile sul sito ufficiale Arduino e nel seguente tutorial).

Se il componente fosse già calibrato, scrivendo un programma che sfrutti la libreria "MPU6050.h" si dovrebbero ottenere i seguenti risultati:

  • \(acc_x = 0.0 \frac{m}{s^{2}}\)
  • \(acc_y = 0.0 \frac{m}{s^{2}}\)
  • \(acc_z = 9.81 \frac{m}{s^{2}}\)

i quali indicano una lettura perfetta visto che l’accelerometro, in condizioni di riposo, percepisce soltanto il campo gravitazionale terrestre (come vedremo brevemente più avanti).

Nella maggior parte dei casi, invece, le letture saranno ben differenti da quelle mostrate in precedenza.

Cos’è la calibrazione?

La calibrazione prevede la compensazione del disallineamento tra gli assi del dispositivo e del processore che vi è montato sopra e il riposizionamento dell’origine di detti assi. Può essere rappresentata dalla seguente operazione:

\(\left( \begin{array}{c}
calib_{1} \\ calib_{2} \\ calib_{3}
\end{array} \right) =
\left( \begin{array}{ccc}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33}
\end{array} \right)
\left( \begin{array}{c}
raw_{1} \\ raw_{2} \\ raw_{3}
\end{array} \right) –
\left( \begin{array}{c}
off_{1} \\ off_{2} \\ off_{3}
\end{array} \right)\)

dove sono stati definiti:

  • \(calib_{i}\) il valore calibrato lungo l’asse \(i\)-esimo;
  • \(a_{ij}\) gli elementi della matrice di riallineamento;
  • \(raw_{i}\) il dato grezzo acquisito lungo l’asse \(i\)-esimo;
  • \(off_{i}\) gli elementi del vettore di offset cioè di scostamento tra le origini dei due sistemi di assi.

Estratto del datasheet dell’accelerometro MPU6050. Qui vengono evidenziati gli assi del dispositivo, mentre quelli del processore non vengono mostrati a dimostrare l’indipendenza dei due riferimenti.

Gli elementi della matrice possono essere ottenuti mediando diverse letture su ognuno degli assi; il vettore di offset tramite una media di letture ottenute con il dispositivo messo in “posizione zero”. Programmi di terze parti utilizzano in maniera più completa la matematica sopra descritta. Di seguito vengono mostrati i processi di calibrazione di due dispositivi piuttosto comuni nei progetti Arduino.

Alcuni esempi

Accelerometro MPU 6050

In questo articolo è stato frequentemente citato questo componente in quanto è uno dei più diffusi a livello mondiale per applicazioni amatoriali e semi-pro dato il suo basso costo e la sua resistenza.

Come già detto, è stata messa a disposizione da Jeff Rowberg un’ampia libreria che consente di estrarre moltissimi tipi di dati. Inoltre ha anche fornito delle routines per l’autocalibrazione del dispositivo, lasciandolo semplicemente in posizione di riposo. Qui viene mostrato l’output di questo programma.

Il programma fornisce il valore degli offset da inserire nei propri programmi per una corretta calibrazione.

Magnetometro HMC5883L

Il magnetometro soffre di diversi “problemi”: oltre alla calibrazione per gli assi, si dovrebbe procedere con la calibrazione rispetto all’ambiente, in quanto una presenza anche non molto invasiva di componenti di ferro produce distorsioni che risultano evidenti dalle letture che si ottengono. In più molti modelli di magnetometro presentano una sensibilità più o meno rilevante con la temperatura, che può però essere trascurata il più delle volte.

Il dispositivo in foto è stato selezionato come esempio perché è il più economico sul mercato e permette di realizzare efficacemente molti progetti.

Per la sua calibrazione esiste una guida molto dettagliata scritta da Yuri Matselenak che mostra come il programma MAGMASTER (scaricabile dallo stesso link) implementi la procedura matematica prima esposta, eseguendo alcune letture.

L’interfaccia del programma MAGMASTER.

Riferimenti

Contatta

Per richiedere le librerie e della documentazione aggiuntiva scrivere una mail a salvatore.campolo10@gmail.com.

Tags: , , , , , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

error: EEEH?! VOLEVI!