Come usare un tastierino (keypad): serratura a codice 4x4 con Arduino
Come funziona un tastierino a matrice? Collegamento dei keypad 4x4 e 3x4, scansione righe-colonne, libreria Keypad, lettura dei tasti, inserimento del codice e serratura con servo, uso con LCD, ESP32 e Pico.
Un keypad (tastierino) è un dispositivo di input economico, simile ai tasti di un telefono, che ti permette di inserire numeri o lettere nel tuo progetto. Con un tastierino si realizzano serrature a codice, casseforti, calcolatrici, centraline d'allarme e sistemi a menu. I modelli più comuni sono tastierini a membrana sottili con retro adesivo, nei formati 4x4 (16 tasti) e 3x4 (12 tasti).

Come funziona un tastierino? La matrice righe-colonne
Se ognuno dei 16 tasti avesse un pin tutto suo, servirebbero 16 pin. Il tastierino invece dispone i tasti in una matrice: 4 righe e 4 colonne; ogni tasto si trova all'incrocio di una riga e di una colonna e, premendolo, collega quella riga a quella colonna. Arduino porta le righe a LOW una alla volta e legge le colonne; la colonna che legge LOW mentre una certa riga è a LOW indica quale tasto è premuto. Poiché questa scansione avviene centinaia di volte al secondo, bastano 8 pin per leggere 16 tasti.
| Tipo | Tasti | Pin | Uso tipico |
|---|---|---|---|
| Membrana 4x4 | 16 (0–9, A–D, *, #) | 8 | Codici, menu, calcolatrici |
| Membrana 3x4 | 12 (0–9, *, #) | 7 | Inserimento di numeri come su un telefono |
| Membrana 1x4 | 4 | 5 | Menu semplici e tasti di selezione |
Piedinatura e collegamento del tastierino
Con i tasti rivolti verso di te, i pin del cavo piatto sono di solito, da sinistra a destra, R1, R2, R3, R4, C1, C2, C3, C4: i primi quattro sono le righe e gli ultimi quattro le colonne. Non servono resistenze: la libreria usa le resistenze di pull-up interne di Arduino per le colonne.
| Pin del tastierino | Funzione | Arduino Uno |
|---|---|---|
| 1 | R1 (1, 2, 3, A) | D9 |
| 2 | R2 (4, 5, 6, B) | D8 |
| 3 | R3 (7, 8, 9, C) | D7 |
| 4 | R4 (*, 0, #, D) | D6 |
| 5 | C1 (1, 4, 7, *) | D5 |
| 6 | C2 (2, 5, 8, 0) | D4 |
| 7 | C3 (3, 6, 9, #) | D3 |
| 8 | C4 (A, B, C, D) | D2 |
Leggere i tasti con la libreria Keypad
Nel Gestore librerie cerca Keypad e installa la libreria di Mark Stanley e Alexander Brevig. Il codice qui sotto scrive nel Monitor seriale ogni tasto che premi:
1#include <Keypad.h>
2
3const byte ROWS = 4, COLS = 4;
4char keys[ROWS][COLS] = {
5 {'1', '2', '3', 'A'},
6 {'4', '5', '6', 'B'},
7 {'7', '8', '9', 'C'},
8 {'*', '0', '#', 'D'}
9};
10byte rowPins[ROWS] = {9, 8, 7, 6}; // R1–R4
11byte colPins[COLS] = {5, 4, 3, 2}; // C1–C4
12Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
13
14void setup() {
15 Serial.begin(9600);
16}
17
18void loop() {
19 char key = keypad.getKey(); // tuş yoksa 0 döner / returns 0 if no key
20 if (key) {
21 Serial.println(key);
22 }
23}getKey() non blocca il programma: se in quel momento non c'è un tasto premuto restituisce subito 0, così puoi fare altro in loop(). La libreria gestisce da sola il rimbalzo dei tasti e segnala ogni pressione una sola volta. Se vuoi aspettare finché non viene premuto un tasto, usa waitForKey().
Costruire una serratura a codice
Ora raccogliamo i tasti premuti in un testo e lo confrontiamo con un codice salvato. Il tasto * cancella l'inserimento, il tasto # lo conferma. Se il codice è giusto, un servomotore apre la serratura per 3 secondi. Per il collegamento del servo vedi Cos'è un servomotore?
1#include <Keypad.h>
2#include <Servo.h>
3
4const byte ROWS = 4, COLS = 4;
5char keys[ROWS][COLS] = {
6 {'1', '2', '3', 'A'},
7 {'4', '5', '6', 'B'},
8 {'7', '8', '9', 'C'},
9 {'*', '0', '#', 'D'}
10};
11byte rowPins[ROWS] = {9, 8, 7, 6};
12byte colPins[COLS] = {5, 4, 3, 2};
13Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
14
15Servo lock;
16const String PASSWORD = "1234";
17String input = "";
18
19void setup() {
20 Serial.begin(9600);
21 lock.attach(10);
22 lock.write(0); // kilitli / locked
23}
24
25void loop() {
26 char key = keypad.getKey();
27 if (!key) return;
28 if (key == '*') { // temizle / clear
29 input = "";
30 } else if (key == '#') { // onayla / confirm
31 if (input == PASSWORD) {
32 Serial.println("Doğru, açılıyor / correct, opening");
33 lock.write(90);
34 delay(3000);
35 lock.write(0);
36 } else {
37 Serial.println("Yanlış şifre / wrong code");
38 }
39 input = "";
40 } else if (input.length() < 8) {
41 input += key;
42 Serial.print('*'); // tuşu gizle / hide the key
43 }
44}Usarlo con un display LCD
Un display rende molto più comodo vedere cosa stai facendo mentre inserisci il codice. Un LCD I2C usa solo i pin A4 e A5, quindi non tocca gli 8 pin digitali del tastierino. A ogni pressione scrivi un asterisco sulla riga inferiore dell'LCD e, dopo la conferma, mostra "Aperto" o "Errato" sulla riga superiore. Collegamento e comandi del display sono spiegati in Usare un display LCD I2C.
Meno pin: tastierini I2C e analogici
Il tastierino da solo occupa 8 dei 20 pin dell'Uno. Quando i pin non bastano ci sono due soluzioni: un adattatore I2C per tastierino basato sul PCF8574 riduce il tutto a due fili e condivide il bus con l'LCD. Nei tastierini analogici ogni tasto crea una resistenza diversa e l'intero tastierino si legge da un solo pin analogico; servono meno fili, ma non si possono rilevare due tasti premuti insieme.
Tastierino con ESP32 e Raspberry Pi Pico
La libreria Keypad funziona anche sull'ESP32. Poiché i pin delle righe fanno da uscite e quelli delle colonne da ingressi con pull-up, evita i GPIO 34–39, che non possono fare da uscita e non hanno pull-up; per esempio usa 13, 12, 14 e 27 per le righe e 26, 25, 33 e 32 per le colonne. Sul Pico con MicroPython puoi scrivere tu stesso la scansione in poche righe:
1from machine import Pin
2import time
3
4KEYS = ["123A", "456B", "789C", "*0#D"]
5rows = [Pin(n, Pin.OUT, value=1) for n in (2, 3, 4, 5)] # R1–R4
6cols = [Pin(n, Pin.IN, Pin.PULL_UP) for n in (6, 7, 8, 9)] # C1–C4
7
8def scan():
9 for r, row in enumerate(rows):
10 row.value(0) # bu satırı etkinleştir / activate this row
11 for c, col in enumerate(cols):
12 if col.value() == 0: # tuş basılı / key pressed
13 row.value(1)
14 return KEYS[r][c]
15 row.value(1)
16 return None
17
18last = None
19while True:
20 key = scan()
21 if key and key != last: # her basışı bir kez yaz / print each press once
22 print(key)
23 last = key
24 time.sleep_ms(50)Idee di progetti con il tastierino
- Cassaforte a codice: una scatola che si apre inserendo il codice, con servomotore, display LCD e buzzer.
- Calcolatrice: usa i tasti A–D per le quattro operazioni e mostra il risultato su un LCD.
- Selettore di colore: cambia il colore di un LED RGB in base al numero inserito.
- Centralina d'allarme: attiva e disattiva con un codice un allarme con sensore PIR.
- Gioco indovina il numero: trova il numero scelto da Arduino con gli indizi "più alto" e "più basso".
- Tastiera di scorciatoie: trasforma ogni tasto in una scorciatoia del computer con un Arduino Leonardo.
Errori comuni e come risolverli
- Viene letto un tasto diverso da quello premuto: l'ordine di righe e colonne è invertito; inverti l'ordine degli array rowPins e colPins.
- Non viene letto nessun tasto: il cavo piatto è inserito spostato di un pin, oppure i pin di righe e colonne non corrispondono al codice.
- Alcuni tasti non funzionano mai: un filo di riga o di colonna fa falso contatto; se non funzionano tutti i tasti di una riga o colonna, è questo il segnale.
- Usare i pin 0 e 1: servono alla comunicazione seriale USB; caricare il codice con il tastierino collegato può dare errore.
- Sull'ESP32 alcune colonne sembrano sempre premute: si stanno usando i GPIO 34–39, privi di pull-up; spostale su altri pin.
- Aspettarsi ripetizioni tenendo premuto: getKey() segnala ogni pressione una volta; per rilevare un tasto tenuto premuto usa lo stato HOLD della libreria.
Un tastierino in fondo è fatto di pulsanti disposti a matrice; la logica dei pulsanti è spiegata in Come collegare un pulsante ad Arduino. Nell'app BlueGrays trovi progetti sull'uso dei tastierini 3x4 e 4x4, un'app per codici con LCD, una cassaforte elettronica intelligente, una calcolatrice I2C e il controllo di un LED RGB con tastierino, con schemi e codice.
Domande frequenti
Quanti pin usa un tastierino 4x4?
Un tastierino 4x4 usa 8 pin: 4 righe e 4 colonne. Uno 3x4 ne usa 7 e uno 1x4 ne usa 5. Se i pin non bastano, puoi scendere a 2 fili con un adattatore I2C o a un solo pin analogico con un tastierino analogico.
Il tastierino ha bisogno di resistenze?
No. La libreria Keypad attiva le resistenze di pull-up interne di Arduino sui pin delle colonne, quindi non serve aggiungere resistenze. Puoi collegare il tastierino direttamente ai pin digitali.
A quali pin si collega un tastierino?
A 8 pin digitali qualsiasi; anche i pin analogici si possono usare come digitali. Sull'Uno evita i pin 0 e 1, usati per la comunicazione seriale USB. Sull'ESP32 non usare i GPIO 34–39, che non possono fare da uscita e non hanno pull-up.
Posso rilevare due tasti premuti contemporaneamente?
Sì, la funzione getKeys() della libreria Keypad rileva fino a 10 tasti premuti insieme. Però nei tastierini a membrana senza diodi alcune combinazioni di tre tasti possono far sembrare premuto un tasto che non lo è (ghosting).
Se cambio il codice, viene dimenticato dopo un blackout?
Un codice tenuto in una variabile torna al valore predefinito del programma quando Arduino si riavvia. Se vuoi che il nuovo codice resti, salvalo nella EEPROM e rileggilo da lì all'avvio.
Quanto è resistente un tastierino a membrana?
I tastierini a membrana resistono di solito a circa 1 milione di pressioni per tasto e, essendo sottili e leggeri, si incollano facilmente su una scatola o un coperchio. Non sono del tutto protetti da acqua e polvere; all'aperto si preferiscono tastierini con tasti in metallo o silicone.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Funzionamento del tastierino 3x4
Progetto di base che legge il tasto premuto dalla tastiera 3x4 e lo visualizza sul monitor seriale. Insegna l'uso della libreria di tastiere e della tastiera a matrice.

Controllo LED con tastierino 3x4
Progetto in grado di accendere e spegnere 3 LED in modo indipendente con 3x4 tasti della tastiera e di eseguire il controllo batch. Insegna il controllo di più uscite con il tastierino.

Funzionamento del tastierino 4x4
Progetto di base che legge il tasto premuto dalla tastiera 4x4 e lo visualizza sul Serial Monitor. Insegna la configurazione della tastiera estesa a 4 colonne.

Serratura con password, tastierino 4x4 e LCD
Progetto di sicurezza che apre la porta con un servo se è corretta l'immissione di una password con una tastiera 4x4 e accende un LED rosso se è errata. Insegna il confronto delle password e l'integra

Tastiera per sviluppatori software Arduino
Progetto di tastiera programmabile che scrive blocchi di codice Arduino come if, for, digitalWrite sul computer con un solo pulsante con Arduino Leonardo e tastiera 4x4. Insegna l'emulazione della tas

Cassaforte elettronica intelligente
Smart Electronic Safe è un sistema di sicurezza protetto da password basato su Arduino. Attiva e disattiva il meccanismo di chiusura controllato dal servomotore con la password a 4 cifre inserita tram

Calcolatrice Arduino I2C
Si tratta di un progetto di calcolatore basato su Arduino che esegue operazioni di addizione, sottrazione, moltiplicazione e divisione utilizzando una tastiera a membrana 4x4 e un display LCD I2C 16x2. Grazie all'I2C, il collegamento del display avviene con soli 2 cavi, riducendo così l'ingombro dei cavi e mantenendo un maggior numero di pin utilizzabili. Sono inoltre disponibili l'ingresso di numeri decimali e il supporto di numeri negativi.

Controllo LED RGB con tastierino
Questo progetto consente di gestire il LED RGB tra modalità e colori tramite la tastiera 4x4. Grazie alla struttura millis(), i comandi vengono elaborati senza ritardi. 🎮 Guida all'uso: Tasto A: Velocità fissa Effetto dissolvenza. Tasto B: transizione graduale con velocità regolabile. C / D: Aumenta / Diminuisce la velocità dell'effetto. 1 - 9: Selezione rapida del colore master. * / #: Colori intermedi speciali (rosa, verde chiaro, ecc.). Tasto 0: spegne il sistema.
Altri articoli
Impara come si leggono 16 tasti con soli 8 pin, a collegare un tastierino ad Arduino, a leggere i tasti premuti e a costruire una serratura a codice che si apre con un servomotore, passo passo.

