EJ.0006 - Un tastierino usb per pc programmabile
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. 😁😅

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

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.
L’Arduino imposta una colonna alla volta come uscita attiva (portandola da livello HIGH (5v) a livello LOW (0v).
Tutte le altre colonne restano inattive (HIGH).
Le righe sono configurate come ingressi con resistenza di pull-up. Quindi normalmente si trovano a livello HIGH.
Se un tasto è premuto:
la colonna attiva viene collegata a una riga
la riga passa da HIGH a LOW
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

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

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:
viene letta la configurazione dalla EEPROM
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.

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:
Il software PC Keypad salva la configurazione usando i codici HID standard.
Il firmware legge questi codici.
Il firmware li converte nei corrispondenti codici ASCII richiesti dalla libreria utilizzata.
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:

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

Buon divertimento e sperimentazione.
Ci rileggiamo al prossimo articolo 😁!
Daniele



Commenti