Guida completa all'utilizzo dell'HMC5883L con Arduino

  • Connessione dell'HMC5883L con Arduino tramite comunicazione I2C.
  • Codice per leggere gli assi X, Y, Z del campo magnetico.
  • Crea una bussola digitale regolando la declinazione magnetica.

codice hmc5883l arduino-3

Il magnetometro HMC5883L è un sensore ampiamente utilizzato nei progetti Arduino per la sua capacità di misurare campi magnetici su tre assi. Ciò lo rende una scelta eccellente per creare bussole digitali, sistemi di navigazione per droni e altri veicoli autonomi. Oltre ad essere conveniente, la sua integrazione è semplice grazie alla sua interfaccia I2C, che lo rende ideale per i principianti.

In questo articolo approfondiremo le principali caratteristiche dell'HMC5883L, la sua connessione con varie schede Arduino ed esempi pratici per il suo utilizzo. Alla fine, potrai realizzare il tuo progetto di bussola digitale con Arduino, sfruttando tutto il potenziale di questo potente sensore.

Cos'è l'HMC5883L e come funziona?

Nessun prodotto trovato.

L'HMC5883L è un magnetometro a tre assi che misura le componenti del campo magnetico terrestre negli assi X, Y e Z. Ciò permette non solo di rilevare la presenza di campi magnetici, ma anche di determinarne l'orientamento attraverso calcoli basati sulle misurazioni ottenute. Queste caratteristiche lo rendono il sensore ideale per realizzare sistemi di orientamento, come ad esempio una bussola digitale.

Il sensore si trova solitamente in moduli come il modello GY-273, che include anche l'elettronica necessaria per facilitarne il collegamento diretto con schede Arduino o altri microcontrollori. La sua alimentazione è flessibile e può essere alimentata sia a 3.3 V che a 5 V, il che lo rende molto versatile in termini di compatibilità con diversi sistemi.

Collegamenti con Arduino

Nessun prodotto trovato.

Collegare l'HMC5883L ad Arduino è davvero semplice grazie all'interfaccia I2C che utilizza. Questa comunicazione richiede solo due pin: SDA e SCL, che deve essere collegato ai pin corrispondenti sulla scheda Arduino.

  • a Arduino Uno, Nano e Mini: SDA si collega al pin A4 e SCL ad A5.
  • Se utilizzi un Arduino Mega o Due: SDA deve essere collegato al pin 20 e SCL al pin 21.
  • Nel caso dell'Arduino Leonardo: SDA va al pin 2 e SCL al pin 3.

Non dimentichiamo che il magnetometro funziona con indirizzo I2C fisso di 0x1E, quindi non è possibile modificarlo. Questo indirizzo è unico per questo tipo di sensore, il che significa che non possiamo collegare più dispositivi HMC5883L sullo stesso bus I2C.

Lettura del campo magnetico

Il metodo di funzionamento principale dell'HMC5883L è la lettura dei valori del campo magnetico su tutti e tre gli assi. Per ottenere questi valori su un Arduino utilizziamo una libreria sviluppata da Jeff Rowberg. Puoi trovare questa libreria su il tuo repository GitHub e scaricarlo per utilizzarlo nell'IDE di Arduino.

Una volta installata la libreria, il sensore può essere inizializzato e iniziare a leggere i valori del campo magnetico. Ecco un semplice esempio che fa proprio questo:

#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;

void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}

void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}

In questo codice il magnetometro viene inizializzato e i valori su tutti e tre gli assi vengono letti in loop. Ogni volta che eseguiamo il `loop()`, sul monitor seriale verranno visualizzati i valori del campo magnetico in X, Y e Z.

Impostazioni di intervallo e guadagno

L'HMC5883L consente di regolare il campo di misurazione del campo magnetico compreso tra ±0.88 Gauss e ±8.1 Gauss con diversi livelli di guadagno. L'intervallo predefinito è ±1.3 Gauss ed è possibile modificarlo in base alle esigenze del progetto. Questo può essere fatto utilizzando la seguente riga all'interno del codice:

magnetometro.setGain(value);

dove APPREZZIAMO è un numero intero compreso tra 0 e 7, che selezionerà il livello di guadagno. Di seguito vi mostriamo una tabella con i valori corrispondenti:

valore Rango Guadagno (LSB/Gauss)
0 ±0.88Ga 1370
1 ±1.3Ga 1090
2 ±1.9Ga 820
3 ±2.5Ga 660
4 ±4.0Ga 440
5 ±4.7Ga 390
6 ±5.6Ga 330
7 ±8.1Ga 230

Costruire una bussola digitale

Uno degli usi più comuni dell'HMC5883L è la costruzione di a bussola digitale. Per fare ciò, dobbiamo calcolare l'angolo tra il sensore e il nord magnetico utilizzando le letture degli assi X e Y. Ciò si ottiene utilizzando la formula:

float angulo = atan2(my, mx) * 180 / M_PI;

Questo valore ti darà l'angolo di orientamento rispetto al Nord magnetico. Per regolare questo angolo su Nord geografico, devi tenere conto della declinazione magnetica della tua posizione, che puoi consultare su diversi siti come www.ign.es o www.ngdc.noaa.gov.

Corretta declinazione magnetica

Una volta ottenuta la declinazione magnetica della vostra posizione, non vi resta che sottrarla all'angolo ottenuto. Per esempio:

angulo -= declinacion;

Quando l'angolo è negativo, è possibile aggiungere 360 ​​gradi per ottenere sempre un valore positivo regolato tra 0 e 360 ​​gradi:

if (angulo < 0) angulo += 360;

Questa impostazione ti fornirà una bussola che indicherà sempre con precisione il Nord geografico.

In pratica con questo sensore e alcune librerie potrete avere una bussola in pochi minuti. Tuttavia, tieni presente che HMC5883L è un sensore sensibile alle interferenze esterne, come metalli vicini o campi generati da correnti elevate, che possono alterare le letture.


Aggiungi come fonte preferita in Google