[Robotica] GyroNav, sensore assetto e orientamento

Pare essere un problema comune link

Brunello:
Pare essere un problema comune link

Sul secondo modulo non c'è un HMC5883L originale, è un qualcosa/clone con lo stesso case e si riconosce dalla marcatura, sull'originale è L583, sull'altro c'è 5883 che non è la marcatura prevista dal produttore.
L'HMC5883L è un prodotto esclusivo di Honeywel.
Sarebbe interessante vedere come è marcato l'HMC5883L di alessanddrob.

sulla foto del venditore amazon ce quello giusto l883, ma non sono riuscito a leggere bene quello stampato sul chip
... so cecato , ma cosi a occhio e croce pare quello falso :), intravedo il pallino più marcato , DA, e altre due righe scritte
.. i cinesi si copiano tra di loro e non gli viene bene :smiley:

One more item: When I scan the I2C bus with the good module it returns a hit at 0x1e as expected. On the bad module I get a hit at 0x0d and not at 0x1e. If It change the library test code to 0x0d the waveform changes to this, but I still get no module detected:


anche questo mi pare che legge come me 0 0 1

Nota sui venditori del 5883: uno di essi nella sua inserzione, nonostante il prodotto nelle foto sia quello originale, riporta una frase "sibillina", quantomeno ...

"Note: It is Domestic Chip HMC5883, the program is not compatible with the original imported chip program, we can provide Matching routine "

Sarebbe a dire che si sono prodotti dei cloni ? ... qualita' a parte, non e' un po una violazione di brevetto ? ... e poi quella parte "we can provide Matching routine" cosa vorrebbe dire, che ci sono routines per far funzionare i cloni come gli altri ? (qualita' a parte, che sarebbe tutta da vedere) ... se si, magari qualcuno che ha quei moduli potrebbe scrivergli, magari con la scusa che tempo prima ha comperato quel prodotto, e chiedergli cosa sono esattamente quelle "matching routines" e dove trovarle ...

Etemenanki:
"Note: It is Domestic Chip HMC5883, the program is not compatible with the original imported chip program, we can provide Matching routine "

In pratica si sono parati le terga dalle contestazioni perché il prodotto non funziona. :slight_smile:

Sempre a proposito di sorprese con le schede cinesi, oggi ho iniziato a "giocare" con l'MPU9250, come previsto c'è molto lavoro da fare per farlo funzionare come si deve, però ho perso oltre due ore di tempo perché all'avvio i vari controlli fornivano un errore di id, 0x73 invece di 0x71, però poi caricando il codice per il DMP, per il momento sto usando quello a 6 d.o.f. per il 6050, il tutto funziona.
Per farla breve sulla mia schedina c'è montato un MPU9255 invece del MPU9250, il primo come id ha 0x73, poco male perché i due sensori sono praticamente identici come hardware e registri, il 9255 ha in più la capacità di lavorare con una libreria molto specifica per l'uso sportivo e medico, in pratica il DMP può fornire alcune info aggiuntive rispetto al DMP presente sul 6050/9250, però si può usare come un normale 9250 senza nessun problema salvo la differenza sul id.
La cosa buffa è che sul pcb ci sono dei quadratini da marcare con un pallino che identificano il modello di MPU montato, previsti 9250, 9255, 6050, 6055, è marcato il quadratino del 9250.

Un venditore che spedisce in tempi e prezzi umani un hmc , o un modulo completo di mcu ?

Ho una board con questo HMC5883L per cui ho provato lo scanner. Oscilla fra 1E e 1C. I collegamenti sono fatti con dupont lunghi 10 cm con cui fino adesso non ho mai avuto problemi. Neanche con quelli da 20.
Sopra c'è un jumper per farlo funzionare anche in SPI.

mi serve un aiuto
ma il pin int come funziona , a me funziona tutto con e senza , sto usando una mega2560 e non trovo differenze.
quale è il pin usato ?
danke

Brunello:
+1

Mannaggia, mi manca il magnetometro

Anche a me :frowning:

alessanddrob:
mi serve un aiuto
ma il pin int come funziona ,

Il pin INT, del MPU, fornisce un impulso ogni volta che è pronto un nuovo set dati, la frequenza dipende da come setti il sample time del DMP, nel mio software è settato per 100 samples/sec, ovvero viene fornito un impulso ogni 10 ms.
Su Arduino il pin INT va collegato a INT0 o INT1, nel mio sketch a INT0, e il relativo interrupt determina l'acquisizione dei dati dal MPU senza necessitò di fare un polling continuo.
Se lasci INT0, di Arduino, scollegato il tutto può funzionare, male, come può non funzionare, dipende dal rumore captato da INT0 che va a creare interrupt fantasma che permettono l'acquisizione dei dati dal MPU, però senza nessun sync e con risultati non attendibili.

PaoloP:
Anche a me :frowning:

Lascia perdere l'eventuale acquisto del magnetometro, a breve arriva la versione basata sul MPU9250, costa quanto il magnetometro da solo, che permette prestazioni migliori con inclusa la fusion tra IMU e magnetometro fatta dal DMP.
Prima di terminare la nuova release del firmware devo finire lo sbroglio della versione beta della Forumino UNO PB4, la versione alpha l'ho già testata e ci sono alcuni problemi da risolvere, non appena fatto mi concentro nuovamente su questo progetto.

Ma il pin va messo pullup o down, e dove trovo il settaggio del pin , nel tuo progetto non lo trovo

alessanddrob:
Ma il pin va messo pullup o down, e dove trovo il settaggio del pin

E' semplicemente un input, non serve nessuna pullup, è attivato nella funzione MPU9250_init(), "attachInterrupt(0, dmpDataReady, RISING);"

Ciao Astrobeed , mi sono inbattuto in questa discussione, avendo a disposizione l'hardware necessario ( MPU6050 e il magnetometro basato su HMC5883L precisamente gy-271) mi sono messo sotto con un arduino nano per provare il tuo fantastico lavoro.

La mia intensione è di crearmi degli strumenti da mettere nella mia barca , e tra questi volevo proprio fare una bussola compensata... e vedere di quanti gradi la mia barca sia sbandata in navigazione,( essendo a vela)

ho collegato come da tuo schema

A.nano<-----> MPU <----->GY271
A4 <-----> sda <-----> sda
A5 <-----> scl <-----> scl
5v <-----> Vcc <-----> Vcc
gnd <-----> gnd <-----> gnd
D2 <-----> int

compilando e mandando in Running senza collegare AD0 e impostando Ad0 lw di default (come da commento sul codice).

vedo che rileva correttamente MPU6050 , ma non HMC5883L (precisamente il gy-271)

ecco l'output su seriale:

Initializing I2C devices...
Testing device connections...
MPU6050 connection successful
Initializing DMP...
Enabling DMP...
Enabling interrupt detection (AVR external interrupt 0)...
DMP ready! Waiting for first interrupt...
FS_SEL = 3
AFS_SEL = 0
Initializing HMC5883L...
Testing device connections...
HMC5883L connection failed
1.45 : 0.01 : -3.06 * 0 : 0 : 0 * 360
1.45 : 0.01 : -3.07 * 0 : 0 : 0 * 360
1.45 : 0.01 : -3.08 * 0 : 0 : 0 * 360
0.03 : 0.09 : 1.96 * 0 : 0 : 0 * 360

dove ho sbagliato, oppure quel gy-271 non funziona a dovere?

Mi metti un link alla scheda che stai usando, senza vedere esattamente di che hardware si tratta è difficile fare una diagnosi.

grazie Astrobeed

ecco il link:

Da quanto vedo quella scheda ha un traslatore di livelli per la I2C, da 3.3V a 5V, se il modulo per l'MPU6050 che stai usando non ha anche lui un traslatore di livello questo crea problemi alla I2C.
Magari prova il magnetometro da solo con lo sketch di esempio presente sul data sheet, così ci togliamo subito il dubbio se è lui a non funzionare.

astrobeed:
Da quanto vedo quella scheda ha un traslatore di livelli per la I2C, da 3.3V a 5V, se il modulo per l'MPU6050 che stai usando non ha anche lui un traslatore di livello questo crea problemi alla I2C.
Magari prova il magnetometro da solo con lo sketch di esempio presente sul data sheet, così ci togliamo subito il dubbio se è lui a non funzionare.

Esatto..... ci avevo pensato e l'ho fatto, con lo sketchdi esempio ricevo l'output

Astrobeed oggi mi sono fatto prestare da un mio amico un HMC5883L come quello che hai utilizzato tu...

effettivamente vedo un output.

ho impostato l'output su Serial ma non avendo esperienze in merito non so come possa utilizzare questi dati per fare una bussola... che dati devo prendere oppure ho paura che i dati che leggo non siano giusti, perche lasciando il circuito fermo vedo i valori riportati nell'output cambiano continuamente....

hai qualche documentazione sulla quale posso documentarmi in merito?

Grazie mille

P.S: appena finito il mio progetto magari con la prima versione funzionante posterò tutti il progetto ed il codice.