Go Down

Topic: utilizzo ms5611 in 10dof drotek (Read 1 time) previous topic - next topic

julio79

Salve a tutti!!

Dopo diverse prove sono riuscito a interfacciare l'arduino con http://www.drotek.fr/shop/en/62-imu-10dof-mpu6050-hmc5883-ms5611.html, per leggere dati grezzi da mpu6050 e hmc5883.

Quando però vado a inserire le librerie MS561101BA.cpp-h e provo a compilare mi escono questi errori:

C:\Program Files (x86)\arduino-1.0-windows\arduino-1.0\libraries\i2cdevlib\MS561101BA.cpp: In member function 'long unsigned int MS561101BA::getConversion(uint8_t)':
C:\Program Files (x86)\arduino-1.0-windows\arduino-1.0\libraries\i2cdevlib\MS561101BA.cpp:144: error: call of overloaded 'write(int)' is ambiguous
C:\Program Files (x86)\arduino-1.0-windows\arduino-1.0\libraries\Wire/Wire.h:55: note: candidates are: virtual size_t TwoWire::write(uint8_t)
C:\Program Files (x86)\arduino-1.0-windows\arduino-1.0\hardware\arduino\cores\arduino/Print.h:49: note:                 size_t Print::write(const char*)

devo aggiornare le librerie??

lesto

è un bug della write, quando provi a scrivere 0x00 se ne va in palla. sarà risolto nella prossima versione dell'ide (o forse è già stata risolta nella 1.0.1? bho no ricordo). Il trucco sta nel non passare direttamente 0x00 ma usare una variabile.
in MS561101BA.cpp sostituisci
write(0x00);
con
byte zero = 0x00;
write(zero);
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Michele Menniti


è un bug della write, quando provi a scrivere 0x00 se ne va in palla. sarà risolto nella prossima versione dell'ide (o forse è già stata risolta nella 1.0.1? bho no ricordo). Il trucco sta nel non passare direttamente 0x00 ma usare una variabile.
in MS561101BA.cpp sostituisci
write(0x00);
con
byte zero = 0x00;
write(zero);

non imprecate perché non ne capisco niente e vado perfino a memoria: mi pare che la "write" sia stata sostituita dalla "send" nella 1.0.1, ho letto questa cosa in un Topic, scritta mi pare da Dalubar, prendetela con le pinze :~
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lesto

no, era il contrario, la send() è stata cambiata in write(), per un semplice motivo;
La send() è nota (per via della Serial) per monipolare i dati scritti trasformandoli nel corrispettivo ASCII.
La write() invece è nota per inviae i dati "grezzi" così come li passi.
Ovviamente la Wire se ne frega altamente dell'ascii, ed erroneamente era stato usato il nome send() invece che write()... ora è stato allineato. Ma con contorno di bug  :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Michele Menniti

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lesto


sorry, almeno ricordavo i nomi :smiley-red:


bhe almeno hai imparato qualcosa di nuovo, ovvero la nomenclatura standard di arduino
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

julio79

ok, grazie mille ho risolto... ma riesco a leggere dati inverosimili!!

Sto utilizzando la piattaforma imu 10dof mpu6050-hmc5883-ms5611, co arduino ide1.0 su win 64.

Ho utilizzato lo skecth di Fabio Varesano, MS561101BA_altitude.pde, ri-adattandolo.

Dal mio skecth leggo dati dall'accelerometro e dal giroscopio, ma dall'altimetro l'altitudine è sballata!! (allego i dati seriali come allegati)

accelgyro.initialize();
Serial.println("Testing device connections...");
Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
accelgyro.setI2CBypassEnabled(true);
mag.initialize();
Serial.println(mag.testConnection() ? "HMC5883 connection successful" : "HMC5883 connection failed");
baro.init(MS561101BA_ADDR_CSB_LOW);

Mi potete dare un suggerimento??
nei due allegati _HIGH sono i dati usciti se uso l'istruzione baro.init(MS561101BA_ADDR_CSB_HIGH);

lesto

uhmmm ad occhio devi calibrare i valori del sensore. non so se c'è un autotest interno o devi fare a mano. Ora sono a lavoro, se ho 10 minuti controllo
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie


lesto

la calibrazione viene fatta in fabbrica ed è utilizzata dal sorgente. assicurati di avere l'ultima versione (http://repository.varesano.net/MS561101BA), se il problema persiste allora può essere una errore di fabbrica
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

julio79

capisco....

ma arrivare a calcolare giusti valori dal datasheet??

tipo quello descritto in http://arduino.cc/forum/index.php/topic,93838.0.html è un procedimento che mi potrebbe portare a qualcosa??

lesto

bhe a questo punto il sistema sarebbe: prendi un barometro funzionante, misuri la pressione in due zone differenti (addituttura con 2 temperature differenti dovresti già notare una differenza) poi verifichi se il sensore fa delle misure che possono essere combacianti con quelle del barometro. se sì, allora trovi il valore (se lineare) o la funzione che approssima il valore corretto. se no è il sensore andato.

considera che più o meno il valore letto dovrebbe essere 1000mbar
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

julio79

ciao a tutti! (e ringrazio ancora Lesto, sempre prodigo di utili consigli...)

Ora riesco a leggere i dati grezzi da tutti i sensori della piattafrma drotek 10 dof.

A questo punto vi-ti chiedo ancora: lo sketch del playground MPU6050 mi gira ok,

ma quando faccio girare lo sketch di jeff rowberg in github i2cdevlib / Arduino / MPU6050 / Examples / MPU6050_DMP6 , la seriale mi si blocca:

...  ?? ...

woodstock

Anch'io inizialmente avevo lo stesso problema ma ho scoperto che la board non faceva bene contatto. Sistemati i contatti ha funzionato tutto quanto. Ho fatto anche il test per la comunicazione I2C ed è sembrato tutto ok.

L'unica cosa che non mi è chiara sono i valori visualizzati con lo sketch di jeff rowberg... Qualcuno mi sa spiegare il perchè?

Tra l'altro ho letto un bel po' di post riguardo all' MPU6050 (https://www.sparkfun.com/products/11028?)... ho trovato opinioni contrastanti riguardo all'utilizzo o meno delle resistenze 4.7K... io non le ho usate... può essere questa la soluzione al problema?

Grazie mille in anticipo


Go Up