FreeIMU 0.4.3

Ciao a tutti, questo è il mio primo post :slight_smile:

Insieme all'Arduino Starter Kit ho acquistato il bellissimo FreeIMU 0.4.3 da ViaCopter. Quando mi è arrivato lo ho collegato all'UNO R3 seguendo le istruzioni, ma la scheda sembra inutilizzabile.
Ho provato le librerie del sito e l'ultima revision della repository... nulla. Ho provato ad alimentare 5V su VIN e 3.3V su 3V3, ho provato a collegare SDA e SCL ai pin analogici 4 e 5, poi ho provato a collegarli ai pin SDA e SCL su Arduino. Nulla.
Lo sketch FreeIMU_raw sembra interrompersi alla seguente riga:

my3IMU.init();

...sia in modalità fast che non.
Qualcuno ha avuto lo stesso problema?
Ho provato a contattare Fabio Varesano per scoprire che, pace all'anima sua, è scomparso questo Natale a causa di un infarto.

Sto aspettando risposta da ViaCopter, ma dubito me lo potranno sostituire perchè sul loro store risulta esaurito adesso, come presso gli altri rivenditori.
Nella zona di Torino c'è qualcuno che possa fare troubleshooting ed eventualmente riparare la scheda?

Ascanio:
Nella zona di Torino c'è qualcuno che possa fare troubleshooting ed eventualmente riparare la scheda?

Le free imu venivano testate singolarmente prima di spedirle ai rivenditori, la possibilità che la tua sia guasta è molto, ma molto, bassa, però non è impossibile.
Per testarla ed eventualmente ripararla serve idonea strumentazione elettronica ed essere attrezzati in modo non indifferente per il rework con componenti smd ad alta densità, non ultimo occorre avere disponibili gli eventuali ic di ricambio, non semplici da reperire.
Ritengo molto probabile che il problema sia dovuto ad un errore di uso, o dello sketch, più che ad un problema hardware della free imu, cosa intendi esattamente con:

Lo sketch FreeIMU_raw sembra interrompersi alla seguente riga:

my3IMU.init();

Fabio Varesano aveva messo insieme delle librerie (una lunga serie) per rendere FreeIMU plug-and-play. Ha poi reso disponibili istruzioni di collegamento sia in formato testuale che video.
Ci sono 4 pin da collegare per ricevere i dati via I2C: +5V, GND, SDA, SCL (o in alternativa +3.3V). La scheda 0.4.3 ha un breakout che mette a dispositione alcuni pin per interfacciarsi direttamente gli interrupt dei sensori, ma senza documentazione.

Lo sketch a cui mi riferisco fa parte delle librerie pubblicate da Varesano (che ho installato prima dal suo sito, poi sostituite con l'ultima revisione del repository su cui vi stava lavorando.. dov'è per esempio disponibile una applicazione per la calibrazione della FreeIMU, necessaria per eliminare completamente il fenomeno di drift sull'asse Z).

Ne ho provati diversi di sketch, ma il primo che Varesano usa nel suo video didattico è FreeIMU_raw, che printa i singoli valori per accelerometro, giroscopio, magnetometro (sui tre assi), termometro e barometro. I valori sono già fusi e corretti on-board (i gyro esprimono angoli di assetto, non velocità di rotazione).

Aprendo il serial monitor dall'Arduino IDE (ovviamente impostato a 115200baud), non ricevo nulla. Ho aggiunto una serie di istruzioni Serial.print() in punti diversi delle funzioni setup() e loop(), per individuare il punto in cui si interrompe l'esecuzione.
Questa l'ultimo messaggio viene printato sul monitor seriale una riga prima di:

my3IMU.init(true);

Poi il nulla.

Ho provato, come detto, a collegare la scheda in diversi modi (prendendo l'alimentazione da punti diversi, connettendo la breakout di FreeIMU alle porte analogiche e alle porte SDA e SCL della Arduino UNO). Nada de nada.

Boh?

Ho fatto ulteriori prove, con gli sketch disponibili nelle librerie FreeIMU di Varesano, dopo aver reinstallato Arduino IDE e le librerie stesse (all'ultima versione stabile).
Ho anche collegato direttamente gli interrupt di accelerometro e magnetometro, e in effetti quanto do dei colpetti alla board, gli eventi CHANGED vengono invocati. Quindi so che accelerometro e magnetometro, pur non accessibili attraverso l'interfaccia I2C sulla scheda FreeIMU, stanno in qualche modo funzionando.

Sto cominciando a pensare che il problema sia relativo all'interfaccia I2C o al processore.

Ieri ho provato ad andare al FabLab di Torino, ma pur essendo tutte le luci accese non mi ha aperto nessuno, e non si muoveva anima viva all'interno. Mah...
Ho contattato ViaCopter, che mi ha confermato di non potermela sostituire perchè le FreeIMU sono esaurite. Però si è offerto di ripararmela se gliela rispedisco indietro.
Preferirei trovare qualcuno che me lo faccia a Torino.

L'unica alternativa altrimenti mi sa che rimane costruirmi una FreeIMU in casa... ma non verrà certo così piccola ed elegante. Devo ammettere che mi sono proprio affezionato a questa board.

sicuro che il tuo modelli abbia i traslatori di livello da 3,3v a 5v?

Parli della FreeIMU 0.4.3?

Arduino UNO R3, come ovviamente saprai meglio di me, ha sia punti dove pescare 5V che 3.3V.

FreeIMU 0.4.3 ha un regolatore di tensione interno a bassa rumorosità (per abbattere le interferenze sui sensori), che è collegato sul breakout. Ci sono due pin (VIN e 3V3).
Il primo si immette nel regolatore (e viene regolato), il secondo (che va sul 3o pin del regolatore) è un bypass che il regolatore fa uscire direttamente dal suo output. Come descritto nel layout della board.

Ok per l'alimentazione, ma i sensori sulla linea i2c (SDA e SCL) parlano a 3,3v cosa che crea problemi ad arduino. per ogni versione di freeIMU, salvo le più vecchie, esiste la versione "liscia" a 3.3v e la versione con traslatore di livello che trasforma i 3,3v in 5v.
Se hai preso quella liscia allora ti serve un traslatore di livello

lesto:
Ok per l'alimentazione, ma i sensori sulla linea i2c (SDA e SCL) parlano a 3,3v cosa che crea problemi ad arduino.

Diciamo che può creare problemi, però nella stragrande maggioranza dei casi l'ATmega 328 riesce a lavorare anche con i segnali I2C a 3.3V, di questa cosa ne avevamo parlato in modo esaustivo nel mega thread dei quadricotteri relativamente a come collegare i vari sensori.
Va da se che se c'è anche il traslatore di livelli è meglio, un test semplice per verificare se i sensori sono visibili sul bus I2C è usare lo sketch I2Cscanner che visualizza tutti gli address dei device presenti sul bus.
Se il test ha successo è la conferma che la FreeImu è funzionante, in caso contrario il problema è da cercare nella connessione tra la FreeImu e Arduino e/o problemi di alimentazione.

Sul sito di Varesano c'è scritto qualcosa a riguardo: in riferimento ai traslatori diceva che ce ne è bisogno solo sulle vecchie versioni di Arduino, mentre sull'UNO è PnP.

Ieri notte ho lanciato un po' di sketch dalla libreria di FreeIMU.
L'unico sensore a cui riesco a "collegarmi" senza andare in crash è il magnetometro (che tra l'altro è collegato alla I2C Aux dell'accelgyro, in serie, perchè quest'ultimo integra la logica di fusione, e se presente, usa anche il feed del magnetometro per abbattere gli errori nella stima dell'orientamento).
MA, e c'è un "ma", i valori XYZ del magnetometro sono costanti qualunque cosa succeda.

Colleganto invece gli interrupt di accelgyro e magnetometro, collegati du INT0 e INT1 (pin D2 e D3), ho scritto un piccolo sketch per agganciare gli interrupt ed ascoltare eventi "CHANGE". E questi vengono invocati quando colpisco la scheda col dito, come dovrebbero fare.

Il problema sembra essere quindi nei pressi dell'interfaccia I2C tra FreeIMU e Arduino. Mah...

p.s. ma al FabLab di Torino c'è nessuno? Perchè non rispondono alle mail e al citofono? Grrrrrr

Su ViaCopter leggo questo:

Power is supplied by an onboard 3.3V low-noise LDO that can be fed with 3.6 - 6.5V.
i2c operation is at 3.3 volts, so you need to disable internal pullups for AVR and Arduino use, or use a Logic Level Converter!

Quindi la scheda FreeIMU 0.4.3 non ha i traslatori sulle linee I2C.
(Fonte: http://viacopter.eu/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=64&category_id=11&option=com_virtuemart&Itemid=53)

Allora, non posso contribuire con conoscenze dirette, posso solamente riportare le istruzioni di Varesano:

Ecco lo schema di collegamento con Arduino, nel cartiglio vi è scritto che su Arduino Mega è presente il traslatore a 5V, e VA RIMOSSO. Cioè sta dicendo l'esatto opposto di quello che suggerite. Qualcuno ha l'idea del perchè?
http://www.varesano.net/files/FreeIMU_v04-Arduino_connections.pdf
Da notare che le due varianti di collegamento sono entrambe compatibili con Arduino UNO R3. Io le ho provate entrambe.

Potete guardare il video, per vedere cosa succede quando funziona:
http://www.varesano.net/blog/fabio/how-connect-and-test-freeimu-v04-arduino-and-freeimu-library
Ho seguito alla lettera, passo passo, replicando le azioni di Fabio nel video. Ma senza lo stesso risultato.

Ascanio:
Ho seguito alla lettera, passo passo, replicando le azioni di Fabio nel video. Ma senza lo stesso risultato.

Prova ad usare lo sketch I2Cscanner, come ti ho già suggerito, e posta i risultati, altrimenti andiamo avanti a tastoni senza concludere nulla a meno che non hai un oscilloscopio, in questo caso ti posso guidare su come effettuare delle misure.
Se proprio non riesci a risolvere, e non trovi nessuno a Torino che ti può aiutare, al limite mi puoi spedire la scheda e vedo di capire perché non ti funziona.

@Karma, ti ringrazio molto per la disponibilità.
Questa notte al ritorno dalla Croce Rossa se ho ancora energie faccio una prova con quello sketch. Altrimenti domani sera.

Se i risultati non vi dovessero piacere, e non trovo nessuno a Torino, posso rispedire la scheda in Danimarca: Jussi di ViaCopter si è offerto di ripararmela.
Tra l'altro ho provato a fare una lista della spesa e se dovessi riprodurre la FreeIMU per un pezzo unico, mi costerebbe non meno di 120 euro!!

Per fortuna è una scheda libre, spero che qualcuno a breve prenda in mano la situazione e dia seguito all'attività (fenomenale) di Varesano.

se ti colleghi ma non leggi i valori probabilmente non hai inizializzato bene i sensori, disolito nei registri hanno un bit di "start", guarda bene il datasheet