top of page

EJ.0006 - Un tastierino usb per pc programmabile

Immagine del redattore: Daniele Bonini
Daniele Bonini
20 apr
Tempo di lettura: 6 min

Aggiornamento: 11 mag


L'ottimizzazione è una cosa che ricerco un po' ovunque, soprattutto sul lavoro: se posso rendere più efficiente, funzionale o rapida un'azione, specialmente se ripetitiva, cerco la soluzione più ingegnosa e possibilmente divertente che mi porti a quell'obiettivo.


Nel mio lavoro mi trovo spesso a dover saltare sulla tastiera da un tasto all'altro o usare combinazioni di tasti con una mano, mentre con l'altra ho perennemente una penna che scannerizza codici a barre.


Ogni tanto mi sento un po' come una scimmia con una banana in effetti🐒🍌


Anche se col tempo sono diventato abbastanza veloce, rimane il fatto che è scomodo dover saltellare qua e la sulla tastiera per premere i soliti pulsanti di continuo.


Così ho pensato di realizzare un tastierino da 3 x 3 pulsanti, per raggruppare ergonomicamente tasti e funzioni che uso molto spesso, con la possibilità di essere riprogrammato facilmente anche sul posto di lavoro, per poter adattarlo a qualsiasi esigenza.


Questo è stato lo sprone che mi ha portato a creare questo progetto, facendomi imparare qualcosa in più sulla programmazione di un arduino pro micro e creando il mio primissimo programma in python, ottenendo una app stand alone e user friendly da usare su pc, permettendo a chiunque voglia realizzare questo progetto di personalizzarlo per gli usi più disparati.


     PRINCIPIO DI FUNZIONAMENTO  


"Tutto è iniziato un venerdì sera: Dio e il suo amico Chax facevano a braccio di ferro...."


Peter Griffin a parte, dicevo: tutto è iniziato con un prototipo su bread board con 6 pulsanti e un arduino pro micro ( basato sul chip ATmega32U4).


Perchè 6 pulsanti? perchè ho usato quelli larghi e 9 non ci stavano. 😁😅


Breadboard with colorful wires, a microcontroller, and eight black buttons on a wooden table. Red and green lights on board.

il circuito in se è semplicissimo: ho creato una matrice.


Ma cos'è una matrice?


Se hai pensato a Neo, agente Smith e "il cucchiaio non esiste🥄"....fuochino... No, sei fuori strada.


Una matrice, di tasti in questo caso, è organizzata come una griglia di righe e colonne:


  • ogni tastino si trova all’incrocio tra una riga e una colonna

  • premendo un tastino, si crea un collegamento elettrico tra quella riga e quella colonna



Hand-drawn circuit diagram on green and white paper, with numbered switches and connections labeled 2-7. Black pen on soft background.
Schizzo dei collegamenti della matrice disegnato mentre creavo il progetto


Perché una matrice?


L'idea finale era di realizzare un tastierino da 9 pulsanti e anche se l'arduino dispone di sufficienti pin per collegare ogni singolo tasto, ho preferito una soluzione che porta diversi vantaggi, primo tra tutti usare 6 pin per collegare 9 tasti; poi perché è lo stesso principio usato nelle tastiere da pc e kaypad industriali, ed è definito progetto scalabile, ossia lo stesso metodo usato per 3×3 funziona anche per 4×4, 5×5, ecc., aggiungendo solo righe e colonne, senza riscrivere tutto da zero; infine raggruppando le motivazioni, per illustrare nel firmware (il programma che verrà caricato sull'arduino), diversi concetti di programmazione.


Come avviene la lettura dei tasti


Il principio di funzionamento si basa su una scansione ciclica delle colonne.


  1. L’Arduino imposta una colonna alla volta come uscita attiva (portandola da livello HIGH (5v) a livello LOW (0v).

  2. Tutte le altre colonne restano inattive (HIGH).

  3. Le righe sono configurate come ingressi con resistenza di pull-up. Quindi normalmente si trovano a livello HIGH.

  4. Se un tasto è premuto:

    • la colonna attiva viene collegata a una riga

    • la riga passa da HIGH a LOW

  5. Leggendo lo stato delle righe, l’Arduino capisce quale tastino è stato premuto.


Questo processo viene ripetuto molto velocemente per tutte le righe, creando l’illusione di una lettura simultanea.


Cosa sono e perché usare le resistenze di pull-up


Le righe vengono lette come ingressi digitali e devono avere uno stato definito anche quando nessun tasto è premuto.

Per questo si usano le pull-up interne dell’Arduino


Le resistenze di pull-up servono a mantenere l’ingresso (pin 2, 3 e 4) a livello HIGH quando il tasto è aperto, evitando stati indefiniti, e permettono di leggere un LOW pulito quando il tasto viene premuto.


Con la pull-up attiva:


  • nessun tasto premuto → ingresso HIGH

  • tasto premuto → ingresso LOW


Questa configurazione è semplice, stabile e riduce il numero di componenti esterni da utilizzare. Comodo, no? 🙂



SCHEMA ELETRICO


Circuit diagram showing a USB keypad schematic with Arduino components labeled. Green lines and blue text on a grid background. Title block at bottom.

Lo schema elettrico sopra riportato, illustra come e dove sono collegati i 9 tasti all'arduino pro micro:


Segnale

Pin Arduino pro micro

Tipo

Row 2

D2

Input pull-up

Row 3

D3

Input pull-up

Row 4

D4

Input pull-up

Col 5

D5

Output

Col 6

D6

Output

Col 7

D7

Output


Tutto qui gente!


DIAGRAMMA DI FLUSSO



Flowchart with colored boxes detailing a keyboard setup and loop process. Text in Italian outlines steps for serial programming and commands.


Il firmware è strutturato in modo molto semplice e ruota attorno alla scansione continua della matrice dei pulsanti.


Dopo l’inizializzazione nel setup(), in cui vengono:


-avviate la tastiera USB

-avviata la comunicazione seriale

-configurati i pin della matrice


il programma entra nel ciclo infinito loop().


Qui vengono eseguite continuamente due macro operazioni:


  • scansione della tastiera (scanKeys())


  • gestione dei comandi seriali (handleSerial())


La funzione di scansione attiva una colonna alla volta e legge lo stato delle righe.

Quando viene rilevata la pressione di un tasto:


  1. viene letta la configurazione dalla EEPROM


  2. viene inviata la pressione del tasto al PC tramite USB


Questo approccio permette di ottenere una tastiera programmabile con un firmware semplice, modulare e facilmente espandibile.


La macro handleSerial() invece serve per la programmazione dei singoli tasti secondo la tua necessità. Potrai farlo in modo intuitivo tramite un software che ho creato ad hoc per questo.


Non scenderò nel dettaglio di come funziona questo software perchè riguarda l'ambito della programmazione in python, che ai fini di questo progetto non è necessario conoscere.... meglio non addentraci in quella selva ancora 😅.



PROGRAMMAZIONE


Qui di seguito trovi il codice che andrà caricato sul tuo arduino pro micro.


Leggi tutto un paio di volte se sei un neofita: ho commentato quasi tutte le righe di codice, cosa che con la pratica e l'esperienza molte di quelle precisazioni e descrizioni non sarebbero state necessarie; ma aiutano a capire meglio il linguaggio di programmazione, e sono una buona pratica da adottare sempre.



Come sempre, se c'è qualcosa che vorresti cambiare, personalizzare o semplicemente anche migliorare....FALLO PURE! 😃😜


E' proprio questo il bello: sperimenta, prova, sbaglia e impara dai tuoi errori.


Ricorda: più si pratica, più si migliora!


Infine ti lascio l'app in formato .exe (utilizzabile su s.o. windows) per la programmazione dei singoli tasti secondo le tue necessità.




E' molto basilare ed intuitivo da utilizzare, per due ragioni:

  • amo le cose semplici ed intuitive, con minime istruzioni

  • è il mio primissimo programma, è semplice per forza 😅🤣


All'interno del file zip c'è un file Read Me con le istruzioni di come usarlo, caso mai la mia idea di "intuizione" non sia chiara a chiunque.


COME FUNZIONO LE TASTIERE


Cosa sono i codici HID

Per permettere al tastierino di “parlare” correttamente con il PC è necessario usare i cosiddetti codici HID.

HID significa Human Interface Device ed è lo standard USB utilizzato da dispositivi come tastiere, mouse, joystick, keypad programmabili.


In pratica, quando premiamo un tasto, il tastierino non invia direttamente la lettera “A” o il numero “1”, ma invia un numero identificativo associato a quel tasto. Questo numero è il codice HID.

Ad esempio:

Tasto

Codice HID

A

4

B

5

Enter

40

Space

44

Freccia Su

82

Il computer riceve questo codice e lo interpreta come il tasto corretto da premere.



La mappa dei codici della tastiera

Nell’immagine seguente è possibile vedere il layout standard di una tastiera USB con i relativi codici HID associati a ogni tasto.



Gray keyboard layout with labeled keys, including HID numbers and functions. Black area labeled "Eward Hage" on top right.
Codici HID associati ad ogni tasto (layout tastiera americana) credit: Edward Hage


Questa tabella è molto utile quando si vuole creare un dispositivo HID personalizzato oppure programmare macro e scorciatoie da tastiera.


È importante ricordare che il layout della tastiera può cambiare in base al sistema operativo e alla lingua impostata sul computer. Ad esempio, una tastiera italiana, americana o tedesca può avere simboli e caratteri posizionati in modo differente.


I codici HID, però, sono sempre gli stessi in tutto il mondo: identificano la posizione fisica del tasto e non il carattere visualizzato sullo schermo.

Questo significa che il tastierino può essere programmato utilizzando qualsiasi layout di tastiera. Sarà poi il sistema operativo del computer a interpretare il codice HID secondo la lingua e il layout configurati dall’utente.


Il problema che ho incontrato: HID e ASCII non sono la stessa cosa

Durante lo sviluppo del progetto è emerso un dettaglio importante: la libreria keyboard.h utilizzata nel firmware del tastierino lavora internamente usando codici ASCII, mentre il software di configurazione per PC utilizza i codici HID standard.

Le due codifiche non coincidono.

Ad esempio:

Tasto

ASCII

HID

A

65

4

1

49

30

Space

32

44

Per questo motivo è stato necessario realizzare una conversione tra i due sistemi.


Come funziona la conversione

Il funzionamento finale è molto semplice:

  1. Il software PC Keypad salva la configurazione usando i codici HID standard.

  2. Il firmware legge questi codici.

  3. Il firmware li converte nei corrispondenti codici ASCII richiesti dalla libreria utilizzata.

  4. Il tastierino invia infine al PC il carattere corretto.


In questo modo:

  • il software di configurazione può usare lo standard HID corretto

  • il firmware rimane compatibile con la libreria scelta

  • il risultato finale è trasparente per l’utente


Chi utilizza il tastierino deve semplicemente scegliere il tasto desiderato dal programma, senza preoccuparsi della conversione interna.



REALIZZAZIONE PRATICA


Passiamo ora alla realizzazione pratica. Prima di tutto, oltre ad avere il kit EJ.0006, stampa tutte le parti con la stampante 3d al seguente link:


 



Ti lascio qui il file gerber, se volessi realizzare il pcb per conto tuo



e infine procurati le seguenti viti:


Screw set label reads "EJ.0006 SCREW SET" with a screw illustration. Text: "ST2.2 × 6 mm 6pz," logo shows light bulb with "Electronic Journey."

L'assemblaggio è cosa molto facile: ti lascio l'esploso del progetto qui di seguito come guida.


Exploded view of a USB keypad: yellow keys, labeled faceplate, switches, blue case. Text: "ELECTRONIC JOURNEY," "Programmable USB Keypad."

Buon divertimento e sperimentazione.


Ci rileggiamo al prossimo articolo 😁!


Daniele

Commenti


bottom of page