Pages: 1 [2] 3   Go Down
Author Topic: Arduino+Nunchuck+Nunchucky  (Read 2566 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma se vedi nel mio messaggio precedente tra i valori di acc non ce ne sono 2 uguali !!!

I valori sopra riportati sono usciti con nunchuck appoggiato di lato a sinistra su un piano. (diciamo come in figura)

Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

y e z sono molto simili, devi trovare l'inclinazione giusta. prova  a mettere qualche spessore e vedrai che trovi i 2 valori quasi uguali
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi una volta trovata l'inclinazione che mi fa avere 2 valori uguali di y e z quelli sono gli zeri del mio accelerometro?

e poi la x?
Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si, poi inclini l'accelerometro in modo da avere la X uguale alla Y o Z

un altro metodo è vedere il valore minimo e massimo da fermo, e lo zero è in mezzo ai due valori, dovrebbe essere simile al valore trovato prima
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok.

Però scusami perchè forse non sto capendo niente...ma i valori di x y e z che leggo cosa rappresentano? Quando il nunchuck sta fermo? Il nunchuck ha un giroscopio giusto? Quindi sarebbe l'inclinazione dei vari assi rispetto alla terna fissa del pavimento, o sbaglio completamente??

GRAZIE
Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sbagli completamente:-)
il nunchuck ha un accelerometro 3 assi, quindi legge le accelerazioni, però dati i suoi meccanismi interni rileva anche la forze di gravità, ed è proprio su quella che ci si basa per ottenere un angolo ASSOLUTO, ovvero prendendo come punto di riferimento il vettore gravità (che punta più o meno al centro della terra) quando si legge solo G, salvo particolari casi, si può ricavare l'angolo di inclinazione.

Quindi tu stai leggendo UN VETTORE 3d Rappresentante la gravità terrestre (più o meno, e salvo accelerazioni)

I giroscopi sono contenuti nel motionplus, e non sono assoluti ma relativi: ti dicono QUANTO VELOCENTE stai ruotando, ma se provi a calcolare l'angolo ti accorgerai che più letture hai, più sbagli (accumulo di errore)

Per sistemi in grado di conoscere l'angolo assoluto si usa l'accelerometro, (per lo yaw il magnetometro), per sistemi di stabilizzazione basici solo giroscopi, per avere angoli assoluti aggiornati anche in caso di accelerazioni etc... giroscopi + accelerometri con particolari algoritmi
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma quindi se lo tengo in mano abbastanza dritto, parallelo al pavimento di casa, 2 assi dovrebbero restituirmi valori molto piccoli giusto?

Questi valori rappresentano i componenti del vettore gravità lungo gli assi x e y (oppure y e z, o x e z a seconda di come si è intesa la terna) che in un sistema di riferimento "Quasi"solidale con quello posto al centro della terra (ovvero il pavimento di casa) sono molto piccoli!

in parole poverissime
Una volta effettuata la calibrazione come si deve, se io tengo in mano il mio nunchuck e cerco di mantenerlo fermo e abbastanza dritto, dovrei avere sul serial monitor dei valori piccoli su 2 di 3 parametri?

Ciao..

scusami per il tempo che ti sto facendo perdere smiley-grin
Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma quindi se lo tengo in mano abbastanza dritto, parallelo al pavimento di casa, 2 assi dovrebbero restituirmi valori molto piccoli giusto?
no. Otterrai 2 valori molto vicini allo zero offset.
Per esempio, mettiamo che lo zero offset è 128, e G è 40.
se metti il nunchuck parallelo al terreno dovresti ottenere X = Z = 128 e Y = 168 oppure Y = 88, a seconda se il nunchuck è stato messo sottosopra!


Questi valori rappresentano i componenti del vettore gravità lungo gli assi x e y (oppure y e z, o x e z a seconda di come si è intesa la terna) che in un sistema di riferimento "Quasi"solidale con quello posto al centro della terra (ovvero il pavimento di casa) sono molto piccoli!
vettore 3d, ha tre componenti, x, y, z. come dici tu stai parlando della proiezione, che è una cosa diversa che non ti serve nemmeno. La proiezione coincide col vettore 3d solo se almeno un asse ha componente 0

in parole poverissime
Una volta effettuata la calibrazione come si deve, se io tengo in mano il mio nunchuck e cerco di mantenerlo fermo e abbastanza dritto, dovrei avere sul serial monitor dei valori piccoli su 2 di 3 parametri?
se sottrai lo zero offset sì. e sul terzo asse leggi G

Ciao..

scusami per il tempo che ti sto facendo perdere smiley-grin
no problema smiley
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Lesto quello che dici tu non mi funge, cioè ho trovato una inclinazione per la quale sul piano i valori di y e z sono uguali circa tra loro, però il problema è che quando tengo il nunchuck fermo tra le mani sospeso per aria questi valori non sono uguali a zero, come quando sta appoggiato di lato sul mio bel tavolino e penso che questo sia anche normale allora ho pensato...per la calibrazione non sarebbe meglio procedere così:

Mettere il nunchuck in aria (nella mia posizione "dritta") e vedere i valori che escono e prendere quelli come valori zero?
Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho capito bene. I valori di zero offset non ti coincidono se lo tieni "dritto" o appoggiato di lato?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora ti riporto i risultati di 3 posizioni "fondamentali", tutte e 3 con nunchuckappoggiato al tavolo:

Nunchuck tenuto in equilibrio dritto sul tavolo : 136 150 177
Nunchuck appoggiato sul suo lato sinistro : 78 134 144
Nunchuck appoggiato sul suo lato destro : 179 138 147

Cosa dovrei fare secondo te?
Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il tuo zero offset è da 130 a 150. Il valore è molto grande, probabilmente perchè anche col nunchuck appoggiato gli accelerometri non sono perfettamente dritti, altrimenti avresti lo zero offset intorno al 140.
il valore di G invece è di circa 40

La non accuratezza dei valori è data dal fatto che la scheda all'interno del nun non è allineata con la sua struttura esterna. Niente di grave, se vuoi puoi aprire il nun per poter lavorare con la schedina, ma perderesti i tasti a meno che poi non rimonti il tutto.

Per vedere se i valori trovati sono validi (senza dover smontare):
1. da ogni asse X, Y e Z sottrai 140. Ottieni la componente di accelerazione per ogni asse, i valori li chiamiamo X1, Y1, Z1.
2. sqrt(X1*X1+Y1*Y1+Z1*Z1) a nunckuck fermo, in qualsiasi posizione, deve essere circa G, ovvero 40 (SQRT è la radice quadrata). Se non ottieni 40 ma comunque un numero stabile, allora G è quel numero, se non è stabile (varia di molto, diciamo +-10) allora c'è da sistemare i valori di zero offset

A questo punto che hai lo zero offset e G puoi andare avanti. Avrai gli assi a 0 se "dritti", e la lunghezza del vettore pari a G se il nunchuck è stabile o in rare occasioni di cui possiamo fregarcene.
A questo punto, ogni volta che la lunghezza del vettore è G, allora hai una lettura valida degli assi (non influenzata per esempio dal fatto che stai muovendo il nun) e quindi puoi mandare il segnale alla macchina di muoversi nella direzione desiderata.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti e ciao Lesto, so che questo topic e' vecchissimo ma e' da tempo che non usavo l'arduino e stavo pensando a una applicazione con il nunchuck e quindi sono ritornato qui per non aprire un altro topic.

La cosa che non ho capito e', come fai a dire che G=40?

E' un valore fisso o c'e' qualche calcolo che hai fatto dai valori che ti ho dato?

Cioe' se ho capito bene con il nunchuck appoggiato sul lato destro o sinistro e perfettamente fermo (aspettando qualche istante prima di effettuare le letture) ho le proiezioni del vettore G su ogni asse x y e z. Quindi per ricostruire il MODULO di G basta fare : G=sqrt(x^2+y^2+z^2)

Nei due casi di nunchuck appoggiato a destra e a sinistra avevo valori di G abbastanza vicini a 268!!

Ora analizzando le stesse situazioni, ho dei valori di G che variano da 225 a 245 !! Cosa devo farmene di questi valori?

Grazie per la risposta,
Fab.
« Last Edit: February 16, 2012, 11:15:13 am by f.schiano » Logged

L'impossibile...richiede solo piu' tempo!

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in qualsiasi posizione sia orientato il nunchuck(beh tutto questo vale per qualsiasi accelerometro), da fermo la G=sqrt(x^2+y^2+z^2) dovrebbe essere SEMPRE UGUALE, ovvio che da X, Y e Z devo sottrarre il valore che equivale a 0G, cosa che mi pare tu non faccia.

per chiarirmi meglio: se il sensore è settato per leggere al massimo 2G, e la sua precisione è 10bit (da 0 a 1024):
-2G equivale a 0
0G equivale a 512
+2G equivale a 1024

però questo da per scontatati che la X Y e Z leggano lo stesso valore per la stessa G, cosa non vera nell'imperfetto mondo reale.

Partiamo dal fatto che prima di tutto devi trovare lo 0G la 1G, si fa così:
asse Z verso il basso: z=0G+1G, x=0G e y=0G
asse X verso il basso: z=0G, x=0G+1G e y=0G
asse Y verso il basso: z=0G, x=0G e y=0G+1G

come potrai vedere, per piccoli errori del tenere il sensore perfettamente dritto, gli 0G non saranno perfettamente uguali, io ho usato il valore di mezzo
A questo punto sottrai al valore 0G+1G di ogni asse il corrispettivo valore 0G, ed ottieni il valore di 1G.
Se ottieni valori di -1G vuol dire semplicemente che hai tenuto il sensore con l'asse al contrario, nulla di preoccupante.
I valori non saranno tutti uguiali ma simili, mi pare che la Z discosti un po' essendo su un chip a parte.

ora, ogni lettura del nunchuck fai:

Code:
/*togli i valori di 0G, e rendi lineari tra loro i valori di x, y, e z, se no rovinano il calcolo*/
x=map(x, G0x, G1x, 0, 10000);
y=map(y, G0y, G1y, 0, 10000);
z=map(z, G0z, G1z, 0, 10000);
G=sqrt(x*x+y*y+z*z);
ora, se tieni il nunchuck FERMO in QUALSIASI posizione, dovresti leggere sempre una G di 10000(puoi cambiare il 10000 in qualsiasi altro numero)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Germany
Offline Offline
Edison Member
*
Karma: 2
Posts: 1363
Here we go!!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao LEsto grazie per la risposta!!!

Appena ho tempo cerco di mettere in pratica i tuoi consigli.
Intanto per evitare future incomprensioni e aiutarti ad aiutarmi, volevo essere chiaro sulla questione TERNA DI RIFERIMENTO DEL NUNCHUCK.

Per me gli assi sono disposti in questo modo:


Con l'asse z uscente dal piano formato dal monitor del PC smiley .

Spero che vada bene come assunzione.

Ciao,
fab.
Logged

L'impossibile...richiede solo piu' tempo!

Pages: 1 [2] 3   Go Up
Jump to: