Calcolo velocità sensore Nunchuck

Ciao a tutti.
Allora volevo sapere se dalla variabile accZ che ritorna il nunchuck se ne può ricavare la velocità in Km/h.
Mi spiego meglio.
Prendendo spunto dal classico gioco che trovate alle giostre, dove dovete tirare un cazzotto ad una palla e poi la macchinetta vi dice, WOw FOrtissimo, oppure AAHahah :musichettadifiascototale: :smiley: :D, in base alla potenza sferrata dal vostro pugno, e pensando di farci giocare qualche cuginetto, è venuta fuori sta cosa qua:


Partendo da una impugnatura in verticale e da un valore di 170 circa, quando supera una certa soglia, 255, compare il messaggio di successo.
Ora volevo sapere se potevo ricavarne in qualche modo la velocità dall'asse z. In realtà non so neanche se il concetto dal quale sto partendo è esatto. Però sicuramente voi saprete darmi qualche delucidazione.

si è possibile e dovrebbe essere anche semplice!

Devi crearti un circuito integratore oppure elaborare i dati con un programma tipo excel...

Integrando il segnale otterrai la velocità del sensore in km/h (ammesso che il segnale che arriva sia in km/h^2) altrimenti otterrai una velocità fittizia...ma sempre di una velocità si tratta.

Per il circuito integratore basta cercare su internet e troverai come realizzarlo mentre per selezionare i componenti chiedi a chi davvero di competenza (non me :D)...

saluti

David

Un circuito integratore ??? cos'è? :astonished: :astonished:
Ciò che ricavi dal sensore è un acellerazione espressa in base a ciò che gli chiedi perchè se non ricordo male può leggere 1 e 2G, il valore dato è "semplicisticamente" la percentuale della tua G (m/s^2)

Se moltiplichi il dato dell'accelerazione per il peso del nunchuk espresso in Kg ottieni la forza applicata espressa in Newton.
In base al valore fai uscire le varie frasi.

se puoi essere più specifico riguardo all output del nunchuck possiamo capire meglio.

Se è vero che è una percentuale di G ( quindi espressa in m/s^2) dovrai fare una ulteriore conversione oltre all integrazione...

Che c'entra la forza? lui non ha chiesto la velocità?...

Facci sapere!

saluti David

Per trovare la velocitàpartendo da un acellerazione basta un integrale v=integrale di a dt
Se non ricordo l'integrale sbagliato,poi sull'asse zeta che è perpendicolare al piano, avrai un valore diciamo x che però varierà da 0 a x e da x a 1 o 2G a seconda di qual'è l'impostazione e la sensibilità del sensore, sappiate però che la misura non sarà per nulla precisa...
la cosa migliore per quest'applicazionea mio avviso è una cella di carico su cui mandare la forza del pugno tramite un silentblok o un giunto elastico a balestra... come fanno le macchinette tirapugni classiche da sagra...

Il valore dell'acc Z va da 150 circa quando è fermo tenuto a mò di pugno, e raggiungo max 255, 256 a pugno completato. A questo link http://www.makoto.it/ss_template.php?pagina=club&id_nav=16 ho trovato che la velocità media di un pugno è di circa 4,60 m/s, quindi 16,7 km/h. Diciamo che da me ballano 100 unità da quando è fermo al picco, è possibile ricavarne qualcosa? Purtroppo non conosco bene i sensori del nunchuk e come avrete capito la fisica non è il mio forte 8) :zipper_mouth_face:

100 unità :astonished:
sono parecchie ^^ ^^
Devi discriminare quei valori sporchi via codice...

un accelerometro misura le accelerazioni, non le velocità.
Dai valori che leggi devi sottrarre il vettore gravità, e conoscere la velocità di partenza.
Devi studiarti un pò di fisica della cinematica, le formule del moto accelerato uniformemente dovrebbero andare bene (tra una letura e l'altra consideri l'accelerazione costante, quindi uniforme)

se non hai una curva di graduazione del nunchuck non puoi ricavare valori in m/s o m/s^2. Da quello che ho capito tu hai solo dei valori che vanno da 150 a 255. Si potrebbe supporre una linearità ma nella stragrande maggioranza dei casi non è così ( intendo 150:1G=255:2G).

Comunque costruire un circuito integratore è semplice dato che è cmposto da una resistenza e un condensatore quindi evita di suddividere in passi e considerare accelerazioni costanti dato che è una approsssimazione enorme che porterà a misure completamente fuori dalla realtà.

con l integratore avrai un valore fittizio della velocità...se è per un gioco va bene lo stesso...:smiley:

saluti

David

i chip del nunchuck sono lineari, e da qualche parte (non ricordo dove) trovi anche i valori di conversione, che comunque puoi ricavare dato che è noto il valore di G e il valore di "0"

Insomma partendo dalla formula v=vo+at non se ne ricava nulla giusto?
Assumendo che v0 sia 0, t potrebbe essere un valore che non riesco a quantificare visto che stiamo parlando di accelerazione, nel senso se io metto un delay() tra una lettura e un'altra di 1ms, 10ms o 100ms il risultato non cambia, ho sempre una lettura instantanea dell'accelerazione che è più o meno quella.
Quanto potrebbe essere questa t in ms?

alla prima lettura
V0=0
a = valore letto convertito in m/s^2
t = tempo durata della lettura (diciamo 0)

alla seconda lettura
V0 = V calcolata prima (ed essendo t=0 è ancora 0)
a = valore letto convertito in m/s^2
t = tempo durata dalla lettura (quindi dalla lettura 1)

se hai messo tra le due letture un delay(10); ad esempio, t=10+un piccolo contributo dato dalla comunicazione col sensore, di solito pochi microsecondi.
In questo modo però stai dando per scontato che l'accelerazione, in quei 10 millisecondi, sia stata sempre uguale e pari alla lettura attuale. Io consiglio di fare
(a1+a2)/2, ovvero accelerazoine lettura precedente + accelerazione lettura attuale diviso 2, in pratica dai per scontato che l'accelerazione sia cresciuuta LINEARMENTE in questo frangente di tempo.

e via così all'infinito.

38 X: 128 Y: 130 AccX: 67 AccY: 222 AccZ: 1 Z: 1 C: 1
39 X: 128 Y: 130 AccX: 227 AccY: 235 AccZ: 244 Z: 1 C: 1

43 X: 128 Y: 130 AccX: 88 AccY: 235 AccZ: 3 Z: 1 C: 1
44 X: 128 Y: 130 AccX: 174 AccY: 238 AccZ: 238 Z: 1 C: 1

58 X: 128 Y: 130 AccX: 40 AccY: 249 AccZ: 4 Z: 1 C: 1
59 X: 128 Y: 130 AccX: 125 AccY: 255 AccZ: 213 Z: 1 C: 1

71 X: 128 Y: 130 AccX: 3 AccY: 221 AccZ: 2 Z: 1 C: 1
72 X: 128 Y: 130 AccX: 41 AccY: 247 AccZ: 147 Z: 1 C: 1
73 X: 128 Y: 130 AccX: 176 AccY: 116 AccZ: 257 Z: 1 C: 1

Questi sono alcuni esempi di lettura insieme al valore strettamente precedente. Per esempio nel terzo caso come mi dovrei comportare?

Ho notato che quando il valore supera 255 impiega 3 letture crescenti, sempre col delay time a 10ms.

bhe noi parliamo di V0 come se fosse un numero, in realtà è un vettore 3d