[Robotica] GyroNav, sensore assetto e orientamento

Settimana prossima mi arriva un MPU9250, sta prendendo il posto dei 9150 che, sebbene ancora in produzione, sono sconsigliati per i nuovi progetti, così posso integrare anche questo tipo di imu nel codice. Anche il 9250 è composto da un 6050 con aggiunto un magnetometro nello stesso chip, la differenza nei 9250 è il magnetometro integrato che è migliore rispetto a quelli presenti nel 9150. Sto facendo alcune piccole modifiche al codice per integrare alcune nuove funzionalità, appena pronte aggiorno il repository su github. Ho intenzione di realizzare una board dedicata per questo sensore, sopra ci metto un Atmega328PB, così da poter disporre della doppia seriale e la doppia I2C, e l'MPU9250, il tutto sarà di dimensioni molto ridotte, circa 30x30 mm, con alimentazione predisposta sia per 5V che 3.3V.

santo subito :)

+1 Stella e watch su GitHub, per tenermi aggiornato.

Useró sicuramente parti di questo codice quando mi faró un astrotracciatore per la fotocamera grazie astro!

Comunque ci sarebbe anche l hmc5983 che sulla carta dovrebbe essere migliore, chissa magari ci vuoi spendere qualche riga di codice xD

Ne approfitto della tua esperienza: la mpu6050 se ben usata con il DMP (come fatto da te) é sicuramente superiore a un adxl345, giusto?

In ogni caso avevo letto, pareri oggettivi da forum non una review ben fatta, che il magnetometro dell 9250 non é buono quanto uno stand alone, ma magari mi sbaglio

astrobeed:

Magari quando metti mano al ROV questa cosa la vediamo assieme.

Il tutto procede a rilento, per via di un bel po di problemi di altro genere, quindi lo possiamo vedere con tutta calma, quando ti fa comodo … e magari in un’altro thread, in modo da non sporcare questo … nel frattempo ti chiedo solo una cosa al volo …

Io avevo previsto di collegare i sensori al 328 solo con SDA ed SCL (con un paio di mosfet per traslare i livelli), e di mettere un paio di diodi in serie al 5V per abbassarlo intorno ai 3.3V … niente di particolare, perche’ essendo pensato per un mezzo subacqueo, non serve troppa velocita’ di aggiornamento, gia 4 o 5 volte al secondo sarebbero sufficenti …

Cosi al volo, pensi che un’assemblaggio di questo tipo possa interferire in qualche modo o creare problemi al tuo software ? … o ti viene in mente qualcosa che dovrei cambiare ?

Oggi mi è arrivato il magnetometro il GY271 ,montato ma non funziona, Mpu va perfettemante Devo fare fare qualche include? Ho dato un occhiata ma mi pare che già così doveva funzionare . Alimentato a 3.3 Mi era venuto il dubbio dei dati e ho fatto anche la prova a invertirli ma nulla :( Consigli?

Domani controllo se l indirizzo è quello solito e se i registri usati per il test connessione sono giusti

Etemenanki: Devo ammettere che, da non programmatore, ancora sto cercando di capirci qualcosa, ma +1 lo stesso per la condivisione di un lavoro che appare molto ben fatto (persino a me che ci capisco poco :D)

Il che mi fa sorgere una domanda: potrei in futuro utilizzarlo per quel famoso progetto di bussola in overlay video per il ROV che al momento e' accantonato per questioni di tempo ? ... la cosa prevedeva una schedina minima con un 328 standalone, con il montaggio delle altre due "a sandwich", e la comunicazione con la scheda dell'overlay era pensata in RS232 ... ma non credo questi siano grossi problemi, giusto ?

overlay con max7456

vinsub: overlay con max7456

Si, il mio prototipo userebbe proprio un MAX7456 :D

ricominciamo, ic2scanner mi dice che indirizzo è 0x0D

sostituiti i valori

define HMC5883L_ADDRESS 0x0D // this device only has one address

define HMC5883L_DEFAULT_ADDRESS 0x0D

la lettura dei registri

Initializing I2C devices... Testing device connections... MPU6050 connection failed Initializing DMP... DMP Initialization failed (code 1) Initializing HMC5883L... Testing device connections... HMC5883L connection failed IDA 0 IDB 0 IDC 1

non mi restituisce H 4 3

per leggerli ho usato questo

byte MHC_init(void)
{
  byte stat = 0;
  // initialize HMC5883L

#ifdef debug
  Serial.println("Initializing HMC5883L...");
#endif
  mag.initialize();
  // verify connection
  stat = mag.testConnection();


#ifdef debug
  Serial.println(F("Testing device connections..."));

  if (stat) Serial.println(F("HMC5883L connected"));
  else Serial.println(F("HMC5883L connection failed"));

 // ********************  
Serial.print("IDA "); 
  Serial.println( mag.getIDA());
Serial.print("IDB "); 
 Serial.println( mag.getIDB());
Serial.print("IDC "); 
Serial.println( mag.getIDC());
//************************

#endif
  return stat;
}

giusto o ha sbagliato le letture?

L'MPU6050 può usare due differenti address I2C, dipende da come è collegato il suo pin AD0, nello sketch è prevista la relativa define "MPU6050 mpu(0x69);" per usare l'address 0x69, se commentata l'address è 0x68, quale usare dipende dal modulo che stai usando e da come è connesso il pin AD0, se LOW 0x68 se HIGH 0x69. L'address del HMC5883L è esclusivamente 0x1E, come predefinito nella relativa libreria, pertanto non devi assolutamente modificarlo. Se non rileva l'MPU e il magnetometro è perché stai usando address errati oppure hai collegato male la I2C, ti rammento che è vitale importanza che SDA e SCL devono essere collegati al +3.3V tramite pullup da non più di 4.7k, solitamente sono già presenti sulle breakout con gli MPU, se non ci sono vanno messe.

Ieri mi è arrivato un MPU9250, domani comincio a giocarci. :)

MPU lo rileva , e funziona perfettamente quando facevo le prove l'ho scollegato pero , se lancio ic2scaanner mi da 0x0D per in magnetometro , anche io non capisco ho letto in giro solo address 0x1E

PS ma cosa mi hanno venduto :D https://www.amazon.it/gp/product/B01N1F2J69/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

Rispedito al mittente Secondo me non funziona , ho provato parecchi esempi e sempre lo stesso problema , l'indirizzo è sbagliato e con l indirizzo giusto 0x0D qualcosa si legge nei registri,con 0x1E niente sono tutti vuoti

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. :)

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.