[Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo

propongo a ratto di elencare gli attuali sistemi nel primo post con vantaggi svantaggi e costi.

direi wmp con o senza nunchuck. poi freeimu. 9dof di sparkfun e poi adxl350 sé non sbaglio

Si quella di limitare lo spam mi pare essenziale come cosa..
ora me ne vado a letto domani se non lo fa prima di me qualche buon samaritano.. prendo come da giusto suggerimento di superlol la lista indicata per la IMU e la Fly shield montata da astrobeed e la aggiungerò al primo post, quello lo aggiornerò di continuo in modo da avere una lista fatta per bene, con idee sempre nuove nella prima pagina e non sparse in giro a casaccio...

ottima organizzazione...sarebbe utile mettere anche una spiegazione di come scegliere i componenti, così ognuno si fa una cultura e si costruisce quello che vuole....

Come richiesto cancelleró tutte le partecipazioni delle discussioni sui multicotteri che saranno fuori tema per tenere la discussione snella e leggibile.
Ciao
Uwe Federer, Moderatore

posto già un banale dubbio...ho voluto mettere un led attaccato al pin 13 sullo shield, però non si accende...il LED è funzionante e il verso è giusto: pin13 -> R=220ohm -> catodoLED(gamba lunga) -> anodoLED(gamba corta) -> GND
il led su arduino si accende ma quello sullo shield no...
sbaglio di sicuro qualcosa di banale...ma cosa?

e poi altro dubbio: con shield montato su arduino e USB collegata ad arduino, se col tester misuro la tensione tra Vcc e GND del WM+ mi legge 5 volt quando invece ce ne devono essere 3.3v eppure è collegato al pin dei 3.3v
ah dalla GUI tutto funziona perfettamente!

cavde:
e poi altro dubbio: con shield montato su arduino e USB collegata ad arduino, se col tester misuro la tensione tra Vcc e GND del WM+ mi legge 5 volt quando invece ce ne devono essere 3.3v eppure è collegato al pin dei 3.3v
ah dalla GUI tutto funziona perfettamente!

ma il GND del WMP è in cumune col GND di arduino? strana questa cosa! hai provato direttamente dal 3.3V di arduino a GND?

lesto:
ma il GND del WMP è in cumune col GND di arduino? strana questa cosa! hai provato direttamente dal 3.3V di arduino a GND?

dato che l'ultima cosa che avevo cambiato era stato collegare AREF con i 3,3v come avevano consigliato mi sembra, allora adesso ho tagliato il cavetto e col tester adesso mi legge 3,3v (in realtà un po di più di 3,3v mavabeh)...come mai sta cosa?

Sei riscuro di prendere corrente dal pin giusto ? tra GND e 3v3 trovi 3.3V.....
Quale cavetto hai tagliato ?

ratto93:
Sei riscuro di prendere corrente dal pin giusto ? tra GND e 3v3 trovi 3.3V.....
Quale cavetto hai tagliato ?

il cavetto che ho tagliato era quello che collega AREF con i 3,3v....il pin dei 3,3v non è quello tra i 5v e il Reset?

Per sapere se i sensori (WMP e NK) sono montati giusti basta vedere che il disegnino del quadri sul prorgramma multiwii sia dritto e che se lo inclino il disegnino si inclina di conseguenza???? Oppure devo interpretare il grafico e/o i valori dei sonsori????

arcer....
allora... se i numeri in fianco al giro cambiano vuol dire che è collegato correttamente stessa cosa per l'acellerometro... si il disegno si muove.. solo se è collegato l'acellerometro però...

Cavde...
Perchè hai collegato AREF ? a cosa ti serve ?

ratto93:
Cavde...
Perchè hai collegato AREF ? a cosa ti serve ?

AREF è l'FSR dell'ADC quindi se arduino (e quindi l'ADC) è alimentato a 5v, mentre WM+ solo a 3,3v, il segnale massimo che il sensore da all'ADC sarà di 3,3v e non si sfrutta tutta l'ampiezza che può ricevere l'ADC....volendo si potrebbe collegare un OpAmp dopo il WM+ per aumentare il range fino a 5v...ma non sono sicuro

sisi, si muove e i numeri cambiano, i collegamenti sono giusti
io mi riferivo piuttosto a come orientarla (per sapere il davanti)

cavde:
AREF è l'FSR dell'ADC quindi se arduino (e quindi l'ADC) è alimentato a 5v, mentre WM+ solo a 3,3v, il segnale massimo che il sensore da all'ADC sarà di 3,3v e non si sfrutta tutta l'ampiezza che può ricevere l'ADC

Collegare AREF a +3.3V serve solo se usi sensori analogici che funzionano a 3.3V, il WMP comunica tramite I2C pertanto gli ADC non vengono utilizzati.
Non collegare assolutamente il 3.3V ad AREF se da software non prevedi l'uso del riferimento esterno, in caso contrario metti in corto il 3.3V con il 5V attraverso AREF non appena vai a leggere dall'ADC.

astrobeed:
Collegare AREF a +3.3V serve solo se usi sensori analogici che funzionano a 3.3V, il WMP comunica tramite I2C pertanto gli ADC non vengono utilizzati.
Non collegare assolutamente il 3.3V ad AREF se da software non prevedi l'uso del riferimento esterno, in caso contrario metti in corto il 3.3V con il 5V attraverso AREF non appena vai a leggere dall'ADC.

ah okok...allora era per questo che mi dava 5v....avevo letto male io
grazie

EDIT: e invece perchè il led non si accende?

cavde:
EDIT: e invece perchè il led non si accende?

Il led si accende all'avvio, o meglio lampeggia, durante la calibrazione del giroscopio, poi rimane spento e lampeggia solo quando muovi la imu, segnala che c'è una correzione in atto.

astrobeed:
Il led si accende all'avvio, o meglio lampeggia, durante la calibrazione del giroscopio, poi rimane spento e lampeggia solo quando muovi la imu, segnala che c'è una correzione in atto.

scusami, mi sono espresso male, intendevo ho collegato un led allo shield perchè lo shield stesso copre arduino e non si vede il led del pin 13....ho messo una resistenza da 220ohm ma non si accende, mentre quello su arduino si accende e si comporta proprio come hai detto tu

cavde:
scusami, mi sono espresso male, intendevo ho collegato un led allo shield perchè lo shield stesso copre arduino e non si vede il led del pin 13....ho messo una resistenza da 220ohm ma non si accende,

Se non ti si accende le possibilità sono queste:
Led collegato al contrario.
Led bruciato.
Led non collegato verso GND.
Saldature che non fanno contatto.

astrobeed:
Se non ti si accende le possibilità sono queste:
Led collegato al contrario.
Led bruciato.
Led non collegato verso GND.
Saldature che non fanno contatto.

ieri ho fatto tutti questi controlli, oggi li rifaccio...anche se il led è collegato giusto col piede lungo sul pin13 e non è bruciato, le saldature le ho controllate col tester e vanno bene...riprovo magari mi sfugge qualcosa

EDIT: sono un pollo, alla fine avevo risolto già ieri sera, era una saldatura fatta male...tenchiu

Rieccomi!!
per la serie stira & ammira, vi presento la "mia" IMU, basata sulla DCM di S.O.H. Madgwick (ho semplicemente fatto un porting del codice), fastwire di Francesco Ferrara(copia & incolla brutale), codice WMP da mezzo forum di arduino, google & wiibrew.
l'ho estratta stanotte (è dall'1 che ci lavoro) dal resto del codice del quadricottero, ma finamlente ve la posso presentare.
è ancora in versione molto alfa, diciamo che funziona. Non ho ancora integrato la lettura dei comandi via seriale, quindi vi narro brevemente quello che accade:
collegate un WMP via il classico i2c (attenzione le pull-up interne sono attivate, per disattivarle in WMP.cpp, funzione init(), cambiate Fastwire::setup(300, true); in Fastwire::setup(300, false):wink:
collegate un qualsiasi accelerometro analogico, asse Y al pin 0, X all'1 e Z al 2. A priori dovete sapere il valore medio dell'accelerometro. per la X e la Z è facile, basta leggere il valore analogico a accelerometro pianeggiante. Invece per la Y dovete inclinarlo su un lato di 90°. i valori sono settabili nel file IMUlast.cpp; midA è la Y, midB la X e midC la Z.

ora andate in stabilizzazione.cpp e noterete nella funzione update la riga float gx=data[2], gy=-data[1], gz=data[0], ax=data[5], ay=-data[4],az=data[3];
i primi 3 valori sono i giroscopi: se state testando l'inclinazione dell'accelerometro, mettete pure questi 3 valori a 0.
ATTENZIONE! gli altri 3 valori sono l'acceleromtro: se volete testare il giroscopio mettete ax e ay = 0 ma AZ=1!!!! è normale vedere l'orientamento che ritorna sui 0 gradi proprio per questo motivo (no, non vale mettere tutti e 3 a 0, incasina l'algoritmo)

Questo codice scrive via seriale il quaternione di rotazione con una frequenza di 50Hz.
già ma chi sa leggere i quaternioni di rotazione, direte voi? semplice, il PC :slight_smile:

è presente anche il codice processing di un bellissimo rettangolo colorato che mostra l'orientamento della vostra IMU, e che dunque vi aiuterà enormemente in tutti i passaggi di controllo funzionamento e orientazione dei sensori. Il codice originale l'ho sgraffignato a varesano da qualche parte nel suo sito, ma direi che ormai di originale son rimaste solo le funzioni buildBoxShape() e drawCube().
Se non vedete le scritte, o le vedete male, è colpa dei font di processing, dovreste "compilarne" uno, date un'occhiata al sito processing alla funzione "textFont" (che dovrete modificare in draw() )
noterete alcune strane scritte azzurre con texbox, fregatevene che manca un pezzo di codice arduino.
Le scritte bianche invece sono: a sinistra il quaternione, quelle in alto sono l'orientamento in angoli euleriano (i classici x, y, z), al centro in radianti e a destra in gradi.

per ora funziona così e così ve la dovete tenere, ci voglio lavorare sopra ancora un pò per pulire il codice (ci sono certi obbrobri sintattici, logici, e inenarrabili), calibrazione pseudo automatica dell'accelerometro (da gui), attivazione di solo giro, solo acc o entrambi da gui, nonchè attivazione/disattivazione pull-up interne, reset remoto dei sensori e del quaternione, rendere attive le caselle per settare P e I dell'algoritmo via GUI (ma non credo sia necessario)

SAREBBE MOLTO GRADITO UN TEST DA PARTE VOSTRA, E MAGARI UN PROGRAMMA SIMILE CON FILTRO DI KALLMANN PER FARE UN CONFRONTO OGGETTIVO (ma quì mi sa che devo aspettare astro)

TestImu.zip (8.77 KB)

testIMU.zip (493 KB)