Progettiamo una periferica HID con Arduino

Arduino

In questo progetto andremo a realizzare una versatile periferica HID capace di emulare mouse e tastiera sul nostro PC. Con l'utilizzo di una scheda Arduino MKR WiFi 1010 avremo quindi a disposizione un controller su misura, comodo, programmabile e perfetto per makers, studenti e appassionati di automazione. In questo articolo, ti guiderò passo dopo passo nella realizzazione del firmware, nella configurazione dell’hardware e nell’utilizzo delle librerie HID di Arduino. Nessun driver speciale, solo creatività e un pò di codice per apprendere questa fantastica funzionalità che potrete personalizzare a vostro piacimento e rivoluzionare il modo in cui interagiamo con il computer.

Il progetto

Spesso ci troviamo a ripetere le stesse combinazioni di tasti, magari in Photoshop per duplicare un livello, in Matlab per avviare uno script, o in Altium mentre ruotiamo componenti e aggiorniamo lo schematico. Lo stesso vale per chi gioca: in titoli come Call of Duty ogni istante conta, e avere un pulsante dedicato per ricaricare o cambiare arma può fare la differenza tra vittoria e respawn. Allora mi sono chiesto: perché non creare una periferica su misura, che possa eseguire queste macro in modo immediato? Da qui nasce il progetto di una periferica HID pensata per migliorare la produttività e il controllo del PC, sia in ambito lavorativo che nel gaming.

In questo progetto che vi presento andremo a studiare come realizzare un oggetto con un joystick per muovere il cursore del mouse in modo fluido e intuitivo, come in uno sparatutto in prima persona. Inoltre, con l'aggiunta di pulsanti fisici possiamo implementare funzionalità come il clic destro e sinistro o simulare il comportamento della tastiera con classiche combinazioni veloci come Ctrl+C e Ctrl+V, ideali per chi lavora molto con testo, codice o elementi grafici. Questa periferica potrà essere adattata a qualsiasi contesto: un designer può usarla per snellire il flusso di lavoro in Adobe Illustrator, un maker per inviare comandi rapidi in un simulatore, uno streamer per gestire scene OBS. È uno strumento che va oltre il classico mouse o tastiera: è una scorciatoia fisica per aumentare la produttività e il controllo sulle azioni ripetitive che facciamo ogni giorno.

Materiale Occorrente

La realizzazione della periferica HID è alla portata di tutti in quanto basta poter utilizzare una scheda Arduino con porta USB HID nativa. Per la parte di comando possiamo ipotizzare qualsiasi tipo di interazione: pulsanti fisici, comandi da display touch, comandi con tag RFID o sistemi di riconoscimento delle gesture. Senza farla troppo complicata, al fine di questo progetto andremo ad utilizzare due schede standard facilmente reperibili. Dunque, il materiale hardware è il seguente:

  • Arduino MKR WiFi 1010
  • Joystick Shield V1.A

La scheda Arduino MKR WiFi 1010, basata sul microcontrollore SAMD21 (architettura ARM Cortex-M0+), offre prestazioni elevate e basso consumo energetico, ed è perfetta per applicazioni mobili, IoT o alimentate a batteria. Il vero punto di forza della MKR WiFi 1010 è il modulo WiFi NINA-W102, che consente una connessione wireless stabile e affidabile. Questa caratteristica permette di sviluppare facilmente progetti che richiedono connettività Internet, come la domotica, il monitoraggio remoto o la raccolta dati in tempo reale. Inoltre, il supporto per Bluetooth Low Energy (BLE) amplia le possibilità di comunicazione con altri dispositivi, facilitando l'integrazione con smartphone e sensori esterni. La scheda include un circuito integrato per la gestione della ricarica delle batterie Li-Po, il che la rende particolarmente indicata per progetti portatili o distribuiti in ambienti difficili da raggiungere. Inoltre, grazie alla compatibilità con l’ecosistema Arduino Cloud, la configurazione e la gestione dei dispositivi IoT diventano intuitive, anche per utenti meno esperti.

Le caratteristiche tecniche complete della scheda sono:

  • Microcontroller SAMD21 Cortex®-M0+ 32bit low power ARM MCU
  • Modulo radio u-blox NINA-W102
  • Alimentazione (USB/VIN) 5 V
  • Tensione operativa 3.3 V
  • Secure Element ATECC508
  • Digital I/O Pins 8
  • PWM Pins 13 (0..8, 10, 12, 18/A3, 19/A4)
  • Comunicazioni: UART, SPI, I2C
  • Analog Input Pins 7 (ADC 8/10/12 bit)
  • Analog Output Pins 1 (DAC 10 bit)
  • External Interrupts 10
  • CPU Flash Memory 256 kB (internal)
  • SRAM 32 kB
  • LED_BUILTIN 6
  • USB Full-Speed USB Device and embedded Host
  • Dimensioni fisiche: 61.5 mm x 255 mm/peso 32 g
  • Completa compatibilità alla piattaforma Arduino Cloud

La scheda Joystick Shield V1.A è una popolare shield compatibile con Arduino, che integra un joystick analogico e 6 pulsanti (A, B, C, D, E, F), oltre al pulsante centrale del joystick (clic sullo stick). Per la nostra applicazione dovremmo impostare il selettore della tensione su 3.3V anziché 5V al fine di configurare correttamente la parte analogica del joystick.

La combinazione che intendiamo fare per il nostro progetto prevede la seguente mappatura tra pin di Arduino (vedi Tabella 1 e Figura 1), pin della shield e funzionalità/macro da implementare a livello software.

Pulsante Shield Funzione PIN Arduino
A Mouse - click sx D2
B Mouse - click dx D3
C CTRL+C D4
D CTRL+V D5
E Spazio D1
F CTRL+ALT+CANC D0
Joy X Mouse - movimento orizzontale A0
Joy Y Mouse - movimento verticale A1

Tabella 1: Mappatura pin per il progetto

 

Arduino

Figura 1: Schema di collegamento tra Arduino MKR WiFi 1010 e Joystick shield v1.A

Le librerie

Per il progetto andremo ad utilizzare due librerie standard di Arduino che sono Mouse e Keyboard. Queste librerie sono entrambe compatibili con la nostra scheda Arduino MKR WiFi 1010. La compatibilità è dovuta alla funzionalità HID che dipende dal chip utilizzato per interfacciarsi con il PC. Schede meno recenti, come la classica Arduino UNO R3 (già la R4 cambia filosofia) utilizzano un chip che non consente la funzionalità HID e quindi non compatibile con questo progetto se non a seguito di specifiche modifiche e aggiornamenti firmware dell'integrato in questione. Oltre alla scheda che stiamo utilizzando in questo progetto, alcune delle schede compatibili con questa libreria sono le seguenti: Arduino Leonardo, Arduino Micro, Arduino Due, Arduino Zero, Arduino Nano 33 IoT. Andiamo ora ad osservare le librerie nel dettaglio.

La libreria Keyboard.h di Arduino permette di simulare la pressione di tasti della tastiera sul computer, come se fosse una vera tastiera. Quindi ci consente di realizzare tastiere macro personalizzate per i nostri software o per i giochi. Le funzioni principali contenute nella libreria sono:

  • Keyboard.begin() per inizializzare la comunicazione
  • Keyboard.end() per terminare la comunicazione con il PC
  • Keyboard.press(key) per simulare la pressione di un tasto
  • Keyboard.release(key) per rilasciare il tasto premuto
  • Keyboard.releaseAll() rilascia tutti i tasti
  • Keyboard.write(key) consente la combinazione di pressione e rilascio di un tasto

Attraverso la combinazione di queste semplici funzioni è possibile realizzare tutte le macro che desideriamo. Ad esempio, per realizzare il famoso CTRL + ALT + CANC per accedere a gestione attività dobbiamo scrivere il seguente codice:

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2198 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Send this to a friend