Lettura errata dati magnetometro MPU-9250 tramite I2C

Salve a tutti, sono studente di elettronica, questo è il mio primo topic quindi non evitate a segnalarmi qualsiasi errore stessi commettendo.

Ho due domande da porre:

  1. I valori grezzi che il magnetometro mi restituisce in che unità di misura sono ?
  2. Questi valori non dovrebbe essere variabili ?

La seconda domanda la sto ponendo proprio perchè sul monitor seriale sto ottenendo valori costanti su tutti e tre gli assi, e non cambiano nè che io ruoti il sensore nè che io gli avvicini il cellulare per creare un qualche genere di interferenza sulla misura.

Sto usando usando un arduino mega e i collegamenti che ho effettuato sono
Vcc = 3,3V => Vcc
Gnd => Gnd
SDA = pin 20 => SDA
SCL = pin 21 => SCL

Vi allego il codice che ho scritto :

#include<Wire.h>
const int MPU1=0x68;
int16_t MgX,MgY,MgZ;

void setup() 
{
  Wire.begin();
  Wire.beginTransmission(MPU1);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);
}

void loop() 
{
  Wire.beginTransmission(MPU1);
  Wire.write(0x03);  // starting with register 0x03 (magnetometro_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU1,6,true);  // request a total of 6 registers

  MgX=Wire.read()<<8|Wire.read();     
  MgY=Wire.read()<<8|Wire.read();  
  MgZ=Wire.read()<<8|Wire.read(); 
  
  Serial.print("Mgx "); Serial.print(MgX);
  Serial.print("\t");
  Serial.print("MgY "); Serial.print(MgY);
  Serial.print("\t");
  Serial.print("MgZ "); Serial.print(MgZ);
  Serial.print("\n");
 
  delay(20);
}

Sul monitor seriale ottengo sempre e solo questo

Mgx 10671 MgY -2591 MgZ 4073
Mgx 10671 MgY -2591 MgZ 4073
Mgx 10671 MgY -2591 MgZ 4073
Mgx 10671 MgY -2591 MgZ 4073
Mgx 10671 MgY -2591 MgZ 4073
Mgx 10671 MgY -2591 MgZ 4073
Mgx 10671 MgY -2591 MgZ 4073

Vi ringrazio anticipatamente per la vostra disponibilità.

Ciao Al_freud

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Chiedo scusa.
Ho postato la presentazione.

Le resistenze di pull-up ci sono sul bus I2C ?

Correggo ...
... occhio, su Arduino MEGA (... credo sia l'unico caso) le resistenze di pull-up sono montate sulla scheda e sono da 10KΩ il che significa però che tu stai dando 5V sui pin I2C di quel modulo che è fatto per lavorare a 3.3V (... lo stai difatti alimentatndo a 3.3v) !!!

Se non lo hai già bruciato devi mettere dei moduli adattatori di livello fatti per lavorare con I2c ... tipo QUESTI.

Guglielmo

Non é la risposta alle mie domande ma é sicuramente un errore che non avevo preso minimamente in considerazione e che avrebbe potuto compromettere la vita del sensore.
Fortunatamente il sensore restituisce ancora un dato quindi suppongo non si sia bruciato.
Comprerò questi traslatori di livello prima di fare altre prove.
Grazie mille per la informazione.

Ciao Al_freud

Al_freud:
Fortunatamente il sensore restituisce ancora un dato quindi suppongo non si sia bruciato.

... se per dato intendi il valore fisso che hai riportato ... beh, non da alcuna garanzia di funzionamento.

Se hai un Arduino a 3.3V prova con quello e vedi se funziona ancora.

Guglielmo