Pages: [1]   Go Down
Author Topic: utilizzo ms5611 in 10dof drotek  (Read 1156 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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??
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è 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);
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

è 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 smiley-confuse
Logged

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

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sorry, almeno ricordavo i nomi smiley-red
Logged

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

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sorry, almeno ricordavo i nomi smiley-red

bhe almeno hai imparato qualcosa di nuovo, ovvero la nomenclatura standard di arduino
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);


* dati altimetro_HIGH.JPG (118.78 KB, 727x556 - viewed 20 times.)

* dati altimetro_LOW.JPG (119.96 KB, 725x554 - viewed 11 times.)
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mille grazie, sei un signore!!
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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??
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

 ...  ?? ...


* seriale dmp.JPG (44.15 KB, 723x552 - viewed 13 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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



* schermata.jpg (121.54 KB, 1366x768 - viewed 13 times.)
Logged

Pages: [1]   Go Up
Jump to: