Cerca nel blog

Visualizzazione post con etichetta WiildOS. Mostra tutti i post
Visualizzazione post con etichetta WiildOS. Mostra tutti i post

giovedì 5 marzo 2015

Modifica Wiimote con LM2596

Parliamo sempre di LIM-Wiild, in particolare in questo post descriverò i passi da fare per eseguire la modifica su Wiimote per consentire, nei casi di accessibilità difficoltosa, di avere il controller sempre alimentato e in "reset".

COMPONENTI

Il primo passo è, ovviamente, acquistare un Wiimote PLUS. Consiglio le versioni originali Nintendo, garantiscono una migliore affidabilità nel pairing bluetooth e (dicono) delle migliori prestazioni in condizioni di disturbi luminosi.

Secondo passo è acquistare un convertitore di tensione basato sull'integrato LM2596 (data sheet disponibile qui). Lo trovate su Amazon, ma non solo.
Il circuito si presenta così:


TARATURA E COLLEGAMENTI 

Lato destro: collegamento a cavo USB. Ovviamente gli altri due cavi bianco e verde possono essere tagliati, essendo quelli di segnale.
Cavo NERO da saldare in -IN, cavo ROSSO da saldare su +IN.
 
A questo punto prendete un tester, posizionatelo su 20VDC con i puntali su OUT- e OUT+. Collegate il cavo USB ad una presa di un PC acceso o ad un caricabatterie per smartphone. Con un cacciavite a taglio con punta piccola ruotate in senso antiorario il potenziomentro fino a leggere sul tester il valore di 2.9V, sufficienti per pilotare il Wiimote senza "affaticarlo".

Ottenuto il valore potete precedere con le ultime due saldature, collegando OUT- con il collettore "-"del vano batterie e OUT+ con "+".

Prima di chiudere tutto mancano ancora due cose: 
- tagliare un pezzetto di velcro o qualsiasi altro materiale per permettere la pressione fissa del tastino "reset" (serve per il riconoscimento con Python-whiteboard);
- vare uno scanso tagliando la plastica del coperchio per farci passare il cavo USB (vedi immagini sotto).

Risultato:




Risultato finale prima della "chiusura":


Ora dalla vostra postazione WiildOS, dotata di porta bluetooth funzionante, avviate Python-whiteboard e successivamente collegate il connettore USB ad una presa: se dopo qualche secondo il controller "vibra" e compare la schermata di calibrazione vuol dire che tutto è andato per il verso giusto, altrimenti no...

Seguiranno altri post sull'argomento, state in campana.

ATTENZIONE: La modifica che ho eseguito potrebbe invalidare la garanzia del controller. Dico "dovrebbe" in quanto non ho tolto nessuna vite, ma ho dovuto eseguire un piccolo scanso nel coperchio sul retro per far uscire il cavo USB. 
Inoltre le saldature, se fatte da mani non esperte, possono rovinare la plastica per via del surriscaldamento dei terminali di posa delle batterie. 
Se non sapete usare un saldatore, o/quindi siete ingegneri, chiedete aiuto ad uno che lo sappia fare.
Riassumendo: se per caso la modifica dovesse danneggiare il Wiimote è solo colpa vostra, nei secoli dei secoli. Amen.

martedì 3 febbraio 2015

Una Wiild senza Wii

Da qualche tempo sto seguendo il progetto WiildOS che ha l'obbiettivo di fornire un sistema operativo (OS) e di puntamento (Wiild) per la gestione di una lavagna interattiva multimediale.

Il cuore del sistema è il controller Nintendo Wiimote che, collegato e configurato opportunamente su un sistema Linux, consente mediante una penna con led ad infrarossi di "pilotare" il mouse della LIM:


La mia idea è quella di utilizzare, al posto della penna ad infrarossi e del relativo Wiimote, una mouse-pen:


Sostanzialmente è un mouse ottico montato su uno stelo ergonomico a forma di penna, con tanto di tasti "sx/dx", scroll e tasto centrale.
Il costo, almeno nell'amazzonia, va dai 10€ ai 15€.
La forma, a sezione rettangolare, consente di tenere sotto controllo la posizione degli assi X ed Y durante il movimento.

Il suo utilizzo, oltre alle ragioni economiche, ritengo sia molto più semplice ed immediato rispetto ad un Wiimote in quanto il collegamento avviene analogamente ad un comune mouse wireless, quind plug&play anche su sistemi Linux-based.

Quello che manca è un programma che consenta di eseguire la calibrazione, ovvero di rilevare il coefficiente che faccia corrispondere il segnale di movimento con lo spostamento fisico della penna.  In buona sostanza, quando muovo il mouse (un qualunque mouse) di 1cm sul tappetino, questo di default non corrisponde ad un movimento della freccia di 1cm.


COMANDI UTILI

  • udevadm monitor --udev   (avviato prima del collegamento, restituisce i messaggi di udev riferiti alla periferica che collego);
  • xinput list (elenca tutti i dispositivi di input);
  • xinput list-props <id> (elenca tutti i parametri ed i valori in essere per il dispositivo con quel <id>);
  • xinput set-prop <id> <n°parametro> <valore> (consente di modificare i parametri)

ESEMPI DI OUTPUT CON UNA MOUSE PEN GENERICA

udevadm monitor --udev
~$ udevadm monitor --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [6380.352209] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4 (usb)
UDEV  [6380.354478] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.0 (usb)
UDEV  [6380.355883] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1 (usb)
UDEV  [6380.358817] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1/0003:062A:4101.000F (hid)
UDEV  [6380.359607] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.0/0003:062A:4101.000E (hid)
UDEV  [6380.360480] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1/usbmisc/hiddev1 (usbmisc)
UDEV  [6380.361029] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.0/0003:062A:4101.000E/hidraw/hidraw3 (hidraw)
UDEV  [6380.361186] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1/input/input21 (input)
UDEV  [6380.364479] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.0/input/input20 (input)
UDEV  [6380.366310] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1/input/input21/mouse4 (input)
UDEV  [6380.366786] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1/input/input21/event12 (input)
UDEV  [6380.371037] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.1/0003:062A:4101.000F/hidraw/hidraw4 (hidraw)
UDEV  [6380.371084] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.4/1-1.2.1.4:1.0/input/input20/event11 (input)

xinput list
~$ xinput list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Logitech Unifying Device. Wireless PID:1028    id=10    [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad            id=12    [slave  pointer  (2)]   
⎜   ↳ DualPoint Stick                             id=13    [slave  pointer  (2)]
⎜   ↳ MOSART Semi. 2.4G Keyboard Mouse            id=16    [slave  pointer  (2)]   <-----
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Power Button                                id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=11    [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                            id=14    [slave  keyboard (3)]
    ↳ MOSART Semi. 2.4G Keyboard Mouse            id=17    [slave  keyboard (3)] 
<----- 
Come indicato dalle frecce rosse, il mouse viene visto con due diversi <id>, ovvero 16 e 17.


xinput list-props 16


~$ xinput list-props 16
Device 'MOSART Semi. 2.4G Keyboard Mouse':
    Device Enabled (134):    1
    Coordinate Transformation Matrix (136):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (264):    0
    Device Accel Constant Deceleration (265):    1.000000
    Device Accel Adaptive Deceleration (266):    1.000000
    Device Accel Velocity Scaling (267):    10.000000
    Device Product ID (253):    1578, 16641
    Device Node (254):    "/dev/input/event12"
    Evdev Axis Inversion (268):    0, 0
    Evdev Axes Swap (270):    0
    Axis Labels (271):    "Rel X" (144), "Rel Y" (145), "Rel Horiz Wheel" (262), "Rel Dial" (677), "Rel Vert Wheel" (263)
    Button Labels (272):    "Button Left" (137), "Button Middle" (138), "Button Right" (139), "Button Wheel Up" (140), "Button Wheel Down" (141), "Button Horiz Wheel Left" (142), "Button Horiz Wheel Right" (143), "Button Side" (257), "Button Extra" (258), "Button Unknown" (256), "Button Unknown" (256), "Button Unknown" (256), "Button Unknown" (256)
    Evdev Middle Button Emulation (273):    0
    Evdev Middle Button Timeout (274):    50
    Evdev Third Button Emulation (275):    0
    Evdev Third Button Emulation Timeout (276):    1000
    Evdev Third Button Emulation Button (277):    3
    Evdev Third Button Emulation Threshold (278):    20
    Evdev Wheel Emulation (279):    0
    Evdev Wheel Emulation Axes (280):    0, 0, 4, 5
    Evdev Wheel Emulation Inertia (281):    10
    Evdev Wheel Emulation Timeout (282):    200
    Evdev Wheel Emulation Button (283):    4
    Evdev Drag Lock Buttons (284):    0



xinput list-props 17

~$ xinput list-props 17
Device 'MOSART Semi. 2.4G Keyboard Mouse':
    Device Enabled (134):    1
    Coordinate Transformation Matrix (136):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Product ID (253):    1578, 16641
    Device Node (254):    "/dev/input/event11"


Da un primo approfondimento ho riscontrato che i parametri principali che influenzano il movimento sono :

Device Accel Constant Deceleration (265):    1.000000
Device Accel Velocity Scaling (267):    10.000000

In particolare aumentando il primo (cod.265) il movimento del puntatore rallenta, mentre il secondo (cod.267) che regola l'accelerazione.


PRIMA PROVA SU "MONITOR"


Da una prima prova empirica sono riuscito a usare la mouse pen sul monitor del PC (un LCD a 19"), impostando il parametro 265 a 13.50 ed il 267 a 0.000001:

~$ xinput set-prop 16 265 13.5
~$ xinput set-prop 16 267 0.00001

Con questi parametri ad uno spostamento fisico della mouse-pen corrisponde lo stesso spostamento della freccia di pari dimensione.



 
COSA C'E DA FARE

La mia idea è di scrivere un programma che:
  • legga i dispositivi collegati per scegliere quale sia quello da settare (o individuazione mediante hot-plug);
  • consenta di calcolare ed aggiustare il coefficiente del parametro 265;
  • salvi la configurazione e la possa impostare di default al prossimo plug di quel determinata mouse-pen, così da fare la calibrazione una sola volta e non ad ogni riavvio.
Essendo il progetto in fase embrionale, qualsiasi tipo di collaborazione è ben gradita.

Grazie,
Denis

Archivio blog