I pin Arduino sono il punto in cui la scheda smette di essere teoria e diventa utile: leggono pulsanti e sensori, pilotano LED, relè e moduli, e permettono al microcontrollore di interagire con il mondo reale. Capire come si dividono tra ingressi digitali, letture analogiche, PWM e alimentazione evita errori banali e fa risparmiare tempo già nei primi montaggi. In questa guida mi concentro sulla piedinatura, sull’uso pratico dei contatti più comuni e sui limiti che conviene conoscere prima di collegare un componente.
I punti da fissare prima di collegare un componente
- Su una scheda UNO classica trovi 14 pin digitali e 6 ingressi analogici; non tutti hanno la stessa funzione.
- I pin digitali leggono o scrivono solo stati logici, mentre gli analogici misurano una tensione variabile.
- PWM non è una vera uscita analogica, ma una simulazione molto utile per LED, motori e dimmer.
- Molti problemi nascono da corrente e tensione: un pin non va trattato come se fosse un alimentatore.
- Prima di progettare, controllo sempre il pinout della scheda specifica, perché tra i modelli Arduino le differenze contano.
Cosa fanno davvero i pin di Arduino
Io parto sempre da una distinzione semplice: un pin non è “solo un foro”, ma un’interfaccia tra il microcontrollore e qualcosa di esterno. I contatti digitali servono per leggere o scrivere stati netti, i contatti analogici servono per misurare livelli di tensione variabili, e i pin di alimentazione portano energia a moduli e sensori. Su una UNO classica, la documentazione ufficiale parla di 14 pin digitali e 6 ingressi analogici, mentre 6 pin digitali supportano anche PWM.
In pratica, la scheda ragiona su quattro famiglie di collegamenti:
- Ingressi digitali, per pulsanti, finecorsa e sensori che restituiscono sì/no.
- Uscite digitali, per LED, transistor, relè e segnali di comando.
- Ingressi analogici, per potenziometri, sensori di luce, temperatura o altri segnali continui.
- Pin di alimentazione e comunicazione, per dare tensione ai moduli e parlare con bus come I2C o SPI.
Il punto che spesso si sottovaluta è che non tutte le schede Arduino hanno gli stessi pin, la stessa logica elettrica o gli stessi limiti di corrente. Io leggo sempre il pinout della scheda specifica prima di fare affidamento su una funzione “che di solito c’è”. Da qui conviene passare alla lettura pratica delle sigle stampate sulla scheda.

Come leggere la piedinatura senza confondersi
La serigrafia sulla scheda è la prima guida, ma va interpretata bene. Le sigle più comuni non descrivono solo una posizione fisica: indicano anche il ruolo del pin, il tipo di segnale e, in certi casi, una funzione condivisa con altre periferiche interne. Se impari a leggerle una volta, eviti metà degli errori tipici dei primi progetti.
| Sigla | Cosa significa | Uso tipico | Attenzione pratica |
|---|---|---|---|
| D0-D13 | Pin digitali | Pulsanti, LED, sensori, comandi | Su alcuni pin ci sono funzioni speciali; D0 e D1 spesso servono alla seriale |
| A0-A5 | Ingressi analogici | Potenziometri, sensori analogici | Su molte schede possono anche lavorare come digitali |
| ~ | Pin con PWM | Regolazione luminosità o velocità | Non è una vera uscita analogica, ma una modulazione di impulso |
| 5V, 3.3V, GND, VIN | Alimentazione | Moduli, sensori, ingresso di tensione | Non vanno scambiati con pin di segnale |
| SDA, SCL | Bus I2C | Display, sensori, expander | La posizione può cambiare da scheda a scheda |
| AREF | Riferimento analogico | Misure analogiche con riferimento esterno | Si usa solo quando sai davvero perché ti serve |
La sigla con la tilde, ad esempio, è importante perché segnala i pin su cui puoi usare PWM. Sui modelli più diffusi della famiglia UNO questo dettaglio fa la differenza quando vuoi regolare un LED o un motore senza usare componenti più complessi. Un altro punto da non ignorare sono D0 e D1: sono comodi, ma spesso entrano in conflitto con la comunicazione seriale e con l’upload dello sketch.
Quando leggo una scheda nuova, la mia regola è semplice: prima individuo i pin di segnale, poi separo alimentazione e massa, e solo dopo penso al software. Con questa sequenza la piedinatura diventa molto più leggibile, e il passo successivo è capire come usare davvero un pin digitale nel lavoro quotidiano.
Ingresso e uscita digitale nel lavoro di tutti i giorni
Un pin digitale ha una logica netta: legge HIGH o LOW, oppure imposta HIGH o LOW in uscita. In Arduino questo comportamento si gestisce con `pinMode()`, `digitalRead()` e `digitalWrite()`, cioè con tre funzioni che, nella pratica, coprono la maggior parte dei casi semplici. Io le considero la base di partenza per chiunque voglia fare un progetto affidabile.
const int LED_PIN = 13;
const int BUTTON_PIN = 2;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}Questo esempio mostra una scelta che consiglio spesso: usare la resistenza di pull-up interna. Invece di lasciare l’ingresso “flottante”, cioè senza uno stato definito, il pin viene tenuto alto internamente e il pulsante lo porta a massa quando viene premuto. Il vantaggio è concreto: meno componenti, cablaggio più pulito e meno letture casuali.
Ci sono però alcune regole che non tratto mai come opzionali:
- Su un LED metto sempre una resistenza in serie, spesso nell’ordine di 220-330 ohm come punto di partenza.
- Se leggo un pulsante, considero il debounce, cioè il piccolo rimbalzo elettrico dei contatti.
- Se uso la seriale, evito di occupare D0 e D1 con altri dispositivi salvo casi ben controllati.
- Se il modulo ha una massa propria, la collego alla massa della scheda: senza riferimento comune, il segnale perde senso.
Quando queste basi funzionano, il progetto inizia a comportarsi in modo prevedibile. A quel punto il passaggio successivo è distinguere bene tra lettura analogica e PWM, perché lì nasce una delle confusioni più frequenti.
Analogico e PWM non sono la stessa cosa
Qui vedo spesso il malinteso più classico: molti pensano che `analogWrite()` generi una vera tensione analogica, ma nella maggior parte delle schede Arduino classiche produce invece un segnale PWM. PWM significa Pulse Width Modulation: in pratica la scheda accende e spegne molto rapidamente il pin, variando il rapporto tra tempo acceso e tempo spento. All’occhio umano, o a un carico adatto, questo comportamento sembra una regolazione continua.
| Funzione | Cosa fa | Valore tipico su UNO | Dove si usa |
|---|---|---|---|
| `analogRead()` | Legge una tensione in ingresso | 0-1023 | Potenziometri e sensori analogici |
| `analogWrite()` | Genera PWM in uscita | 0-255 | LED dimmerabili, motori tramite driver |
| Uscita digitale | Imposta HIGH o LOW | 0 o 1 | Comandi on/off |
Sull’UNO classico l’ADC è a 10 bit, quindi `analogRead()` restituisce valori tra 0 e 1023. Questo dato è utile perché ti fa capire subito quanto è “fine” la misura, ma anche quanto è sbagliato aspettarsi una precisione da strumentazione professionale. Per un potenziometro o un sensore hobby va benissimo; per una misura critica, serve un progetto più accurato.
Il PWM, invece, funziona bene per controllare la luminosità di un LED o la velocità di un motore, sempre però con un driver adeguato. Io non lo uso mai come scorciatoia per alimentare carichi pesanti direttamente dal pin, perché lì il problema non è più il software ma la corrente disponibile. E questo ci porta agli errori che, in pratica, fanno perdere più tempo di tutti gli altri.
Gli errori che vedo più spesso nei primi progetti
La maggior parte dei guasti non nasce da un bug complicato, ma da una scelta elettrica sbagliata. Un pin può sembrare “vivo” perché il programma gira, eppure il circuito non risponde perché la corrente è eccessiva, la massa non è comune o la tensione non è compatibile. Io controllo sempre questi punti prima di cercare difetti nel codice.
- Collegare un motore direttamente al pin. È il classico errore da evitare: un motore richiede un driver o almeno un transistor, non un’uscita logica pura.
- Confondere tensione e corrente. Una scheda può avere un pin a 5V, ma questo non significa che possa alimentare qualunque carico. Una piccola LED può stare nell’ordine di pochi milliampere; un servo può arrivare verso 1000 mA nei picchi.
- Lasciare un ingresso flottante. Se un pin di input non ha pull-up, pull-down o un segnale definito, la lettura può oscillare senza motivo.
- Usare 5V e 3.3V come se fossero equivalenti. Non tutte le schede hanno la stessa logica, e un modulo a 3.3V collegato male può dare letture errate o danni.
- Dimenticare la massa comune. Se il segnale non condivide la stessa massa tra scheda e componente, la misura diventa inaffidabile.
- Ignorare i pin già occupati da funzioni speciali. Seriale, I2C, SPI e PWM possono sovrapporsi a un uso generico e creare conflitti difficili da capire dopo.
Su questo punto sono abbastanza netto: quando un progetto non si accende, quasi sempre il colpevole è nel cablaggio o nell’alimentazione, non nello sketch. Vale anche il contrario, cioè che un buon cablaggio semplifica il debugging del software. Una volta eliminati questi intoppi, scegliere il pin giusto diventa una decisione molto più pratica che teorica.
La regola pratica che uso per scegliere il pin giusto
Quando progetto qualcosa di semplice, non parto mai dal numero del pin ma dal tipo di segnale che mi serve. Questa abitudine mi evita di forzare una scheda in un ruolo per cui non è nata e mi fa scegliere il collegamento più pulito. In altre parole, prima definisco il lavoro del pin, poi scelgo il contatto.
| Scenario | Pin consigliato | Perché |
|---|---|---|
| LED acceso/spento | Qualsiasi pin digitale | Serve solo un comando HIGH o LOW |
| Dimming di un LED | Un pin con PWM | Il duty cycle simula una regolazione continua |
| Pulsante | Pin digitale con INPUT_PULLUP | Cablaggio semplice e lettura stabile |
| Potenziometro o sensore analogico | A0-A5 su una UNO classica | Servono ingressi capaci di leggere valori continui |
| Sensore I2C | SDA e SCL | Il bus è già pensato per moduli multipli sulla stessa linea |
| Motore o carico pesante | Pin di comando più driver esterno | Il pin da solo non deve fornire la corrente richiesta |
Se dovessi ridurre tutto a una sola regola, direi questa: il pin giusto è quello che rispetta funzione, tensione e corrente del componente. Quando queste tre cose coincidono, il progetto è più stabile e il debug diventa quasi banale; quando una delle tre manca, iniziano i problemi poco chiari. Per questo io consiglio sempre di partire da un LED, un pulsante e un sensore semplice: se quei tre casi funzionano, hai già capito gran parte del linguaggio dei pin di Arduino.