Bussola

Salve ragazzi,
mi è arrivato ieri il sensore HMC5883L e volevo provare a fare la bussola.

Ho provato tutti gli sketch possibili e anche la libreria HMC5883L, ma non funziona nulla! :\

Il codice è questo:

#include <Wire.h>
#include <HMC5883L.h>
 
HMC5883L compass;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
   compass = HMC5883L();
   pinMode(8, OUTPUT);
   Serial.println("Setting scale to +/- 1.3Ga");
   int error = compass.SetScale(1.3);
   if(error != 0)
     Serial.println(compass.GetErrorText(error));
 
   Serial.println("Setting measurement mode to continuous");
   error = compass.SetMeasurementMode(Measurement_Continuous);
   if(error != 0)
   Serial.println(compass.GetErrorText(error));
}
 
void loop()
{
   MagnetometerScaled raw = compass.ReadScaledAxis();
   float heading = atan2(raw.YAxis, raw.XAxis);
   if(heading < 0)
      heading += 2*PI;
   float headingDegrees = heading * 180/M_PI;
   if(headingDegrees < 1)
   {
    digitalWrite(8, HIGH);
   }
   Serial.println(headingDegrees);
   delay(1000);
}

Il risultato da sempre 222 con solo i decimali che cambiano.

Perché il decimali cambiano anche a circuito fermo? E perché non cambiano i gradi girando il sensore? (ho provato su tutti e 3 gli assi).

Che sia difettoso il sensore?

Ho collegato VCC a 5V (a 3.3V fa uguale), GND a massa, SDA ad A5, ed SCL ad A4 (ed ho provato anche ad invertire A4 e A5).

Non sono appoggiato su roba di metallo ecc…

Che cavolo gli succede?

... le pull-up del bus I2C sono sul modulo che ti è arrivato o ... non le hai messe ? ? ?

Link a questo modulo ?

Guglielmo

Non so neanche cosa sono le pull-up...

Il modulo è questo: http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-gy-273-hmc5883l-magnetometer-compass-tutorial/

EDIT: Letto, e su Arduino Uno dicono che non servono le pull-up

Seguendo il tutorial del link con le librerie di Adafruit, il risultato è questo:

X: -53.45 Y: -49.73 Z: -53.98 uT Heading (degrees): 235.54 X: -53.18 Y: -49.64 Z: -54.08 uT Heading (degrees): 235.63 X: -53.27 Y: -49.73 Z: -54.29 uT Heading (degrees): 235.63 X: -53.45 Y: -49.73 Z: -54.29 uT Heading (degrees): 235.54 X: -53.45 Y: -49.64 Z: -54.29 uT Heading (degrees): 235.48 X: -53.27 Y: -49.64 Z: -53.98 uT Heading (degrees): 235.58 X: -53.36 Y: -49.64 Z: -54.39 uT Heading (degrees): 235.53 X: -53.27 Y: -49.64 Z: -53.88 uT Heading (degrees): 235.58 X: -53.45 Y: -49.91 Z: -54.08 uT Heading (degrees): 235.64 X: -53.45 Y: -49.64 Z: -53.98 uT Heading (degrees): 235.48 X: -53.18 Y: -49.36 Z: -54.29 uT Heading (degrees): 235.47 X: -53.27 Y: -49.64 Z: -54.18 uT Heading (degrees): 235.58 X: -53.45 Y: -49.64 Z: -53.88 uT Heading (degrees): 235.48

Nonostante io muova in tutte le direzioni il sensore... dite che è bruciato?

Anche a me sono arrivati 2 di questi sensori (GY-273 HMC5883L) ma nulla, non vengono rilevati, stessi identici collegamenti li faccio invece ad un sensore giroscopio ed al contrario funziona tutto.

Novità?

Anche io lo stesso problema, ci deve essere qualche cosa che sfugge.

Premetto che non ho mai usato dispositivi simili e che la guida di cui sto per riportare il link si riferisce a un modello leggermente diverso. L'avevate già vista/consultata?

https://www.meccanismocomplesso.org/arduino-magnetic-magnetic-magnetometer-hmc5883l/

... sul chip c'e' scritto "L883" oppure "5883" come sigla ? ...

I "veri" HMC5883L sono marcati "L883" ... mentre ci sono in giro dei "falsi" 5883 (cloni, probabilmente QMC5883, della QST di Shangai) che hanno un'indirizzo differente, "0D", almeno secondo il datasheet ... ho trovato questa pagina dove parlano di un codice funzionante per quei chip, se li hai, ma non l'ho provato, se vuoi dargli un'occhiata vedi tu ... magari risolve ... questo ovviamente se hai i cloni, non gli originali ...

E’ un clone infatti, guardando con il microscopio sul chip la sigla è diversa.Però con il codice del link che hai postato funziona , grazie mille

anch'io ti ringrazio Etemenanki