Tutorial: Leonardo come Mouse

Leonardo è una delle ultime nate della famiglia Arduino ed io ne ho acquistata una nel corso dell’ultimo arduino camp a Torino.

leonardo come mouse

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.

mouse leonardo

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

connessione pulsanti leonardo

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:

schema di collegamento mouse

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 !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/tutorial-leonardo-come-mouse.html

24 commenti

Vai al modulo dei commenti

    • Alessandro il 10 Settembre 2012 alle 14:23
    • Rispondi

    Ma questo steck non può essere utilizzato con arduino uno?

    1. 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

    • Monster Code il 14 Gennaio 2013 alle 11:09
    • Rispondi

    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

    1. 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

        • Monster Code il 14 Gennaio 2013 alle 11:50
        • Rispondi

        Grazie della rosposta, ho trovato questo:

        http://hunt.net.nz/users/darran/weblog/cca39/Arduino_UNO_Mouse_HID.html

        Cosa ne dici?

    • mattia il 16 Dicembre 2015 alle 07:41
    • Rispondi

    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 🙁

    1. 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.

    • Antonio il 3 Febbraio 2016 alle 16:45
    • Rispondi

    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

    1. 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.

    • Diego Caligiuri il 21 Aprile 2016 alle 16:02
    • Rispondi

    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

    1. 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”

    • Raffaele Lucci il 26 Gennaio 2017 alle 15:26
    • Rispondi

    Io ho un mouse “senza fili” funziona comunque??

    1. Ciao Raffaele,
      questo tutorial mostra come usare l’Arduino Leonardo come un mouse.

  1. 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

    1. 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.

      1. Ooops. ti ringrazio e ti chiedo scusa!

    • matteo il 17 Marzo 2019 alle 17:59
    • Rispondi

    scusi a me da errore mi può gentilmente dire il perché ?

    [[ codice rimosso in automatico ]]

    1. 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?

    • matteo il 18 Marzo 2019 alle 16:17
    • Rispondi

    nell’ultima riga prima delle due parentesi graffe il Mouse.move

    1. Ciao Matteo,
      se ti viene chiesto l’errore devi fornire l’errore restituito dall’IDE non la linea.

    • matteo il 19 Marzo 2019 alle 17:55
    • Rispondi

    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 ‘?

    1. Ciao Matteo,
      su arduino uno non è possibile utilizzare le funzioni mouse e keyboard, trovi questa informazione nella scheda prodotto ufficiale arduino.cc

    • antonio il 20 Marzo 2019 alle 17:31
    • Rispondi

    ho visto che ci sarà una seconda versione esiste già? se si mi può riferire un link o un nome cosi la trovo grazie?

    1. Ciao Antonio,
      seconda versione di cosa?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.