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 listCome indicato dalle frecce rosse, il mouse viene visto con due diversi <id>, ovvero 16 e 17.
⎡ 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)] <-----
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.
Grazie,
Denis
Nessun commento:
Posta un commento