Leonardo è una delle ultime nate della famiglia Arduino ed io ne ho acquistata una nel corso dell’ultimo arduino camp a Torino.
Tra le caratteristiche principali di questa scheda c’è la possibilità di utilizzarla per simulare un mouse o una tastiera connessa al computer.
Nel nuovo IDE 1.0.1 trovi già degli sketch per utilizzarla come mouse con il joystick della sparkfun, ma ho voluto provare a dare un tocco personale sfuttando le caratteristiche di mouse connessi a 4 pulsanti: Up,Down,Left e Right e a un potenziometro da 10KΩ che ti permette di regolare la sensibilità del mouse.
Componenti
Inizia subito col procurarti l’occorrente:
- n.1 arduino leonardo
- n.1 cavo micro-usb per collegare leonardo al computer
- n.4 pulsanti na (normalmente aperto)
- n.4 resistenze da 330Ω (pull-up)
- n.1 potenziometro da 10KΩ
- n.1 bradboard
- un po’ di cavi per breadboard
Collegamenti tra arduino Leonardo e i pulsanti
Nella foto puoi intuire il collegamento dei 4 pulsanti e delle resistenze ad arduino, è identico a quello che hai già visto in altri tutorial, ti riporto lo schema in cui trovi anche come collegare il potenziometro:
ti sarai accorto che nello schema non c’è rappresentato un’arduino leonardo ma un arduino uno, non è un errore involontario e neppure l’invito ad usare questa scheda al poso della leonardo, il motivo è che in Fritzing non ho l’arduino leonardo, forse nei prossimi aggiornamenti del programma comparirà anche questo componente.
Lo Sketch da caricare sulla leonardo
Premetto che lo sketch fa uso di concetti molto semplici ed è solo a titolo di esempio per questo esperimento e per farti iniziare a sperimentare l’interfaccia mouse con arduino leonardo.
Se hai già consultato il reference dell’oggetto mouse conosci già tutte le possibilità che ti offre, nell’esempio trovi sono 1 comando oltre all’inizializzazione:
/* * Mouse con Arduino Leonardo * * autor: Mauro Alfieri * www.mauroalfieri.it * Tw: @mauroalfieri.it * */ int pinUp = 2; int pinDown = 3; int pinLeft = 4; int pinRight = 5; int pinSens = A0; int sensibilita = 0; void setup() { pinMode( pinUp, INPUT ); pinMode( pinDown, INPUT ); pinMode( pinLeft, INPUT ); pinMode( pinRight, INPUT ); pinMode( pinSens, INPUT ); Mouse.begin(); } void loop() { sensibilita = map(analogRead( pinSens ), 0 , 1023, 0, 20); if ( digitalRead(pinUp) == HIGH ) { Mouse.move( 0, -sensibilita, 0 ); } else if ( digitalRead(pinDown) == HIGH ) { Mouse.move( 0, sensibilita, 0 ); } if ( digitalRead(pinLeft) == HIGH ) { Mouse.move( -sensibilita, 0, 0 ); } else if ( digitalRead(pinRight) == HIGH ) { Mouse.move( sensibilita, 0 ,0 ); } }
linee 10-13: definisci le variabili di tipo integer a cui sono collegati i 4 pulsanti;
linea 14: definisci il pin analogico a cui collegherai il potenziometro per definire la sensibilità del mouse;
linea 16: definisci la variabile di tipo integer in cui memorizzerai il valore di sensibilità letto sul pin analogico;
linee 19-23: imposta la modalità di funzionamento dei pin a cui sono connessi i pulsanti ed il potenziometro;
linea 25: inizializza l’oggetto Mouse utilizzando il metodo begin() dell’oggetto stesso;
linea 29: rileva la sensibilità del mouse, per farlo puoi utilizzare il comando analogRead(pin) per leggere il valore del potenziometro (0-1023) e utilizza il comando map() di arduino per rimappare i valori letti dal potenziometro su un range decisamente inferiore (0-20) ti assicuro che già a 20 il mouse è incontrollabile, per cui se vuoi puoi provare a rimappare su un range maggiore, l’importante è che il valore minimo sia 0 in modo che tu possa diminuire fino ad azzerare la sensibilità del mouse: mouse fermo;
linea 30: con il comando digitaRead(pinUp) leggi il valore sul pulsante connesso al pinUp ossia quello che regola movimento verso l’alto del puntatore del mouse. Se il valore è HIGH vuol dire che hai premuto il pulsante e quindi esegui la linea 31:
linea 31: il comando Mouse.move( x,y,wheel ) è l’artefice del vero e proprio spostamento del mouse, X ed Y indicano la quantità di pixel di cui il mouse si deve spostare. Contrariamente a quanto inizialmente mi attendessi il valore di X e Y non indica le coordinate in cui posizionare il mause. In questa linea, siccome il movimento che desideri è verso l’alto, lasci a 0 il valore di X e sposti del valore di sensibilità il mouse sull’asse Y. Per andare verso l’alto dovrai spostarti con un valore negativo, il valore positivo si sposta verso il basso;
linee 32-33: rileva la pressione del pulsante pinDown e sposta il mouse vero il basso di un numero di pixel pari alla sensibilità definita;
linee 36-40: eseguono le stesse operazioni viste per le linee 30-33, ma per gli spostamenti lungo l’asse delle ascisse ( X ) per cui il comando Mouse.move( x,y,wheel ) è valorizzato solo per l’asse X;
E’ uno sketch che fa davvero poco, sposta solo il mouse e non clicca nulla, prossimamente proverai i comandi di click del mouse.
Il Video della leonardo usata come mouse
come spesso faccio, ultimamente, ho realizzato anche un video demo dello spostamento del mouse mentre premo i pulsanti collegati da arduino, devi guardare con molta attenzione lo sfondo del computer per percepire i movimenti … colpa della ripresa 🙂
Buon divertimento !!!
24 commenti
Vai al modulo dei commenti
Ma questo steck non può essere utilizzato con arduino uno?
Autore
Ciao Alessandro,
da quanto ho letto puoi utilizzare anche un arduino uno come mouse grazie all’Atmega16U2 di cui è dotato.
Io non ho mai provato ed ho acquistato una Leonardo per testare questa funzionalità.
Se il codice è adattabile, scrivimi le eventuali modifiche che lo pubblico a tuo nome.
Mauro
Ciao Mauro,
il kit arduino l’ho acquistato e lo trovo molto interessante…:-)
Ho letto il tuo articolo “Leonardo come Mouse” e mi ha incuriosito molto, ora la mia domanda è: esiste qualcosa di simile per arduino uno?
Grazie
Autore
Ciao Monster Code,
io ho utilizzato la Arduino Leonardo che viene vista dal Pc/Mac come periferica Hw.
Probabilmente è possibile scrivere uno sketch per l’arduino uno se il chip di interfaccia è un Atmega16U2 o superiore, ma non ho mai provato.
Mauro
Grazie della rosposta, ho trovato questo:
http://hunt.net.nz/users/darran/weblog/cca39/Arduino_UNO_Mouse_HID.html
Cosa ne dici?
ciao e complimenti, sto seguendo il tuo corso su arduino dalla prima lezione!!
Ho comprato un arduino micro e vorrei poter usare il mouse con un gyroscopio montato su arduino micro, che gyroscopio/accellerometro mi consigli? Mi daresti una mano a scrivere lo sketch? Non sono ancora in grado di farlo da solo 🙁
Autore
Ciao Mattia,
ho scritto articoli dedicati sia ai giroscopi sia alla libreria per usare arduino come mouse.
Scrivo sketch su commissione, ma immagino che non sia il tuo interesse.
Ti invito a leggere e comprendere tutti i miei articoli di tuo interesse e provare a sviluppare il progetto da solo, sarà di certo più soddisfacente.
Io tra progetti per il blog e progetti su commissione non potrei dedicarti il tempo necessario.
Se alla conclusione del progetto vorrai condividerlo sarò felice di darti spazio e visibilità sul blog.
Ciao Mauro e complimenti,
ho letto il tuo tutorial. ti volevo chiedere come posso controllare invece la tastiera pc tramite dei pulsanti?
ho provato a realizzare lo sketch trovato sul sito di Arduino ma durante la verifica mi da errore in quanto non trova la libreria “Keyboard.h”. Puoi aiutarmi?
Grazie
Autore
Ciao Antonio,
la libreria keyboard.h è inclusa nell’IDE arduino, verifica di avere l’ultima versione dell’IDE presa dal sito arduino.cc ufficiale.
L’esempio è valido per iniziare i primi esperimenti.
Salve,
mi chiamo Diego Caligiuri, io vorrei utilizzare Arduino Leonardo con accopiata una mux shield 2 per aumentare le possibilità di collegare più tasti e pulsanti, come simulatore della tastiera, per costruirmi un banco di guida locomotore per Railworks che funziona solo con la tastiera, così usando pulsanti, potenziometri e deviatori quando muovo qualcosa, corrisponde ad una determinata lettera della tastiera, chiedevo se mi può gentilmente aiutare a correggere il codice se sbaglio qualcosa e uno schemino di collegamento per potenziometri e pulsanti per verificare se faccio tutto bene.
Grazie mille
Diego Caligiuri
Autore
Ciao Diego,
io posso darti consigli sugli articoli che leggi e dei quali non comprendi il significato.
Quello che mi chiedi è di svilupparti un progetto ma ad oggi non ho diaponibilità di tempo da dedicare al tuo progetto e probabilmente non sarei bravo come te non conoscendo l’argomento “banco di guida locomotore per Railworks”
Io ho un mouse “senza fili” funziona comunque??
Autore
Ciao Raffaele,
questo tutorial mostra come usare l’Arduino Leonardo come un mouse.
Buona Pasqua Sig. Alfieri e a tutti.
Una stupida domanda:
Ma i pulsanti devono essere per forza del tipo con quattro contatti?
O posso usare anche a due contatti? Intendo dire tipo quelli della luce…
In realtà sto cercando di usare dei pulsanti come questi:
[ link rimosso in automatico ]
Che in pratica un pulsante ha due contatti.
Grazie e AUGURI di nuovo!
Gianfranco
Autore
Ciao Gianfranco,
auguri anche a te.
Ti chiedo di leggere e rispettare le semplici regole del blog che trovi in fondo ad ogni articolo, il link, ad esempio, non sono ammessi.
In merito alla tua domanda: si puoi utilizzare i pulsanti a due contatti, quelli a quattro sono connessi a due a due, vedi datasheet su un sito di rivendita.
Ooops. ti ringrazio e ti chiedo scusa!
scusi a me da errore mi può gentilmente dire il perché ?
[[ codice rimosso in automatico ]]
Autore
Ciao Matteo,
in primo luogo ti chiedo di rispettare le regole del blog, trovi il link prima della sezione commenti.
In merito all’errore cosa ti restituisce?
nell’ultima riga prima delle due parentesi graffe il Mouse.move
Autore
Ciao Matteo,
se ti viene chiesto l’errore devi fornire l’errore restituito dall’IDE non la linea.
Io sto usando un arduino uno
una volta caricato mi esce questo errore:
exit status 1
‘Mouse’ non trovato. Il tuo sketch include la riga ‘#include ‘?
Autore
Ciao Matteo,
su arduino uno non è possibile utilizzare le funzioni mouse e keyboard, trovi questa informazione nella scheda prodotto ufficiale arduino.cc
ho visto che ci sarà una seconda versione esiste già? se si mi può riferire un link o un nome cosi la trovo grazie?
Autore
Ciao Antonio,
seconda versione di cosa?