BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Wii Nunchuck tre assi!! (https://www.baronerosso.it/forum/circuiti-elettronici/263357-wii-nunchuck-tre-assi.html)

faustog_2 04 ottobre 12 13:47

Wii Nunchuck tre assi!!
 
come da titolo ovunque viene spacciato con un accelerometro a tre assi... invece ho avuto modo di verificare che gli assi sono solo due! l'accelerometro rileva il rollio e il beccheggio, ma non rileva la roteazione! il terzo numero rileva se il Nunchuck è ribaltato o meno. Se qualcuno ha delle osservazioni prego si accomodi pure..

a presto
fausto

faustog_2 04 ottobre 12 14:09

codifica
 
premetto che uso il Wii originale, il cuore della codifica è la seguente (nel linguaggio C++) , credo che sia corretta... e che non lasci dei bubbi:

int x_acceleration() const
{
return ((int) (buffer[2] << 2) | ((buffer[5] >> 2) & 0x03)
}

int y_acceleration() const
{
return ((int) (buffer[3] << 2) | ((buffer[5] >> 4) & 0x03)
}
int z_acceleration() const
{
return ((int) (buffer[4] << 2) | ((buffer[5] >> 6) & 0x03)
}
insomma se leggete qui o in altri posti ci son scritte porcherie!

Interfacciarsi con il Nunchuck della Nintendo - Appunti | Settorezero

a dopo





Citazione:

Originalmente inviato da faustog_2 (Messaggio 3421643)
come da titolo ovunque viene spacciato con un accelerometro a tre assi... invece ho avuto modo di verificare che gli assi sono solo due! l'accelerometro rileva il rollio e il beccheggio, ma non rileva la roteazione! il terzo numero rileva se il Nunchuck è ribaltato o meno. Se qualcuno ha delle osservazioni prego si accomodi pure..

a presto
fausto


faustog_2 04 ottobre 12 21:36

head tracker
 
in ogni caso anche su due assi si puo usare per creare un head tracker..


Citazione:

Originalmente inviato da faustog_2 (Messaggio 3421688)
premetto che uso il Wii originale, il cuore della codifica è la seguente (nel linguaggio C++) , credo che sia corretta... e che non lasci dei bubbi:

int x_acceleration() const
{
return ((int) (buffer[2] << 2) | ((buffer[5] >> 2) & 0x03)
}

int y_acceleration() const
{
return ((int) (buffer[3] << 2) | ((buffer[5] >> 4) & 0x03)
}
int z_acceleration() const
{
return ((int) (buffer[4] << 2) | ((buffer[5] >> 6) & 0x03)
}
insomma se leggete qui o in altri posti ci son scritte porcherie!

Interfacciarsi con il Nunchuck della Nintendo - Appunti | Settorezero

a dopo


ElNonino 04 ottobre 12 22:58

La butto li a caso: (ho un nunchuck originale aperto e con tanto di connettore-adattatore sparkfun da circa 8 mesi; ma non ho mai trovato il tempo di provarlo) non è che interpreti male i dati letti?

10 bit anziché 9bit + segno ? (non so come li codifichi il micro del nunchuck, l'accelerometro è sicuramente a 3 assi analogico).

:yeah:

MSchiepp 05 ottobre 12 09:22

Citazione:

Originalmente inviato da faustog_2 (Messaggio 3421643)
come da titolo ovunque viene spacciato con un accelerometro a tre assi... invece ho avuto modo di verificare che gli assi sono solo due! l'accelerometro rileva il rollio e il beccheggio, ma non rileva la roteazione! il terzo numero rileva se il Nunchuck è ribaltato o meno. Se qualcuno ha delle osservazioni prego si accomodi pure..

a presto
fausto

Attenzione che il terzo asse dà le accelerazioni sul l'asse Z (alto/basso, per intenderci) e non le rotazioni!!

Michele

faustog_2 05 ottobre 12 12:43

ok
 
confermo quello che dici ..ma lo fa anche il secondo buffer!

allora abbiamo in tutto 6 byte

byte0 = joy_x
byte1 = joy_y
byte2= acel_x gli 8 bit piu significativi
byte3= acel_y gli 8 bit piu significativi
byte4 = acel_z gli 8 bit piu significativi
byte5 = [bit 1,0 di acel_z - bit 1,0 di acel_y - bit 1,0 di acel_x - bottoneC - bottoneZ]

dunque sia l'asse y che l'asse z rilevano lo stesso asse solo che la z rileva quando il Nunchuk è ribaltato, lo stesso non rileva alcuna variazione se invece lo roteo guardandolo dall'alto.

a dopo
fausto



Citazione:

Originalmente inviato da MSchiepp (Messaggio 3423067)
Attenzione che il terzo asse dà le accelerazioni sul l'asse Z (alto/basso, per intenderci) e non le rotazioni!!

Michele


ElNonino 05 ottobre 12 15:45

L'accelerometro montato nel Nunchuck è, se non erro, un LIS3L02AL della ST con uscita analogica ratiometrica riferita ai 3,3V di alimentazione, quindi a 0g la Vxyz = 1/2Vdd ovvero 1,65V.

Il convertitore A/D del micro collegato all'accelerometro credo operi nel range numerico 0..1023 con il valore di 512 equivalente a 0g; altra possibilità è che operi fra -512 +511, il tutto è facilmente verificabile leggendo in real-time ii valori grezzi di uscita ruotando il Nunchuck di +-90° su tutti e tre gli assi e poi a +-45° sui piani xyz.

Anche il valore dell'asse Z dovrebbe passare da 256 (+1g) con dispositivo parallelo al suolo, a 512 (og) con dispositivo verticale e poi a 768 (-1g) con dispositivo ribaltato questo se il range è 0...1023 se no lascio a te il calcoletto... :wink:

Per valutare l'inclinazione dell'accelerometro nello spazio in genere si utilizza un semplice calcolo trigonometrico sui valori delle coppie di assi xz ed yz; se pur con altri sensori e micro uso questo sistema da anni per leggere l'inclinazione verticale dei pannelli FV ad inseguimento solare della baita.

:yeah:

faustog_2 09 ottobre 12 10:35

ok
 
ho seguito le linee guida, di diversi siti web.. studiando con scrupolo, il treno di byte inviato, se leggi sopra ho dato una descrizione della collocazione dei dati... però facendo le prove ho notato che se roteo l'affare guardandolo dall'alto, i tre valori non cambiano rimangono uguali... ...questo vuol dire che non viene rilevato nessuno spostamento.. qualunque possa essere la combinazione xz, xy, yx ecc... ...nn c'è movimento!



Citazione:

Originalmente inviato da ElNonino (Messaggio 3423694)
L'accelerometro montato nel Nunchuck è, se non erro, un LIS3L02AL della ST con uscita analogica ratiometrica riferita ai 3,3V di alimentazione, quindi a 0g la Vxyz = 1/2Vdd ovvero 1,65V.

Il convertitore A/D del micro collegato all'accelerometro credo operi nel range numerico 0..1023 con il valore di 512 equivalente a 0g; altra possibilità è che operi fra -512 +511, il tutto è facilmente verificabile leggendo in real-time ii valori grezzi di uscita ruotando il Nunchuck di +-90° su tutti e tre gli assi e poi a +-45° sui piani xyz.

Anche il valore dell'asse Z dovrebbe passare da 256 (+1g) con dispositivo parallelo al suolo, a 512 (og) con dispositivo verticale e poi a 768 (-1g) con dispositivo ribaltato questo se il range è 0...1023 se no lascio a te il calcoletto... :wink:

Per valutare l'inclinazione dell'accelerometro nello spazio in genere si utilizza un semplice calcolo trigonometrico sui valori delle coppie di assi xz ed yz; se pur con altri sensori e micro uso questo sistema da anni per leggere l'inclinazione verticale dei pannelli FV ad inseguimento solare della baita.

:yeah:


ElNonino 09 ottobre 12 10:54

Vado a memoria ma mi pare che il Nunchuck deve essere prima inizializzato inviandogli un comando particolare, solo dopo inizia ad inviare lo stato del joystick, pulsanti ed accelerometro.

In questi casi verrebbe comodo un analizzatore di protocollo come questo: Zeroplus USB2.0 logic analyzer te lo consiglio funziona bene e, costa poco.

:yeah:

faustog_2 10 ottobre 12 10:16

idea
 
ok, non ho problemi per queste cose... dico che funziona tutto egregiamente... solo che appunto c'è un movimento su un asse al quale il nunchuk espone sempre gli stessi dati senza variazioni. segno che non rileva.. se leggi qualche posto piu indietro ho scritto la sequanza di byte e bit opportuni... Comunque è possibile creare un head track! basta acquistare un nunchuk da 9 euro, due assi sono sufficienti per rilevare il movimento della testa, poi lo stesso deve essere inviato alla presa allievo maestro di una radio TX per aeromodellismo... sui canali 6, e 7 per esempio... ..con essi si pilota la telecamera montata su due servo sull'aeromodello.. il problema è come convertire il TTL in ssegnale per la radio TX ..per il momento ho analizzato il segnale della presa allievo maestro ..

http://www.baronerosso.it/forum/circ...o-maestro.html

da esso si individua il ch6 e il ch7 per variare il segnale opportunamente modificato dal nunchuck!

ti piace l'idea?



Citazione:

Originalmente inviato da ElNonino (Messaggio 3428899)
Vado a memoria ma mi pare che il Nunchuck deve essere prima inizializzato inviandogli un comando particolare, solo dopo inizia ad inviare lo stato del joystick, pulsanti ed accelerometro.

In questi casi verrebbe comodo un analizzatore di protocollo come questo: Zeroplus USB2.0 logic analyzer te lo consiglio funziona bene e, costa poco.

:yeah:



Tutti gli orari sono GMT +2. Adesso sono le 13:54.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002