Componenti · 16 min di lettura

Pinout Arduino Uno: pin digitali, PWM, analogici e alimentazione

Pinout di Arduino Uno in una tabella: pin digitali 0–13, PWM ~3, 5, 6, 9, 10, 11, analogici A0–A5, Vin, 5V, 3.3V, I2C, SPI, interrupt e limite di 20 mA.

Il pinout di Arduino Uno comprende 32 punti di collegamento allineati sui connettori femmina neri dei due lati lunghi della scheda: 14 pin digitali di ingresso/uscita (0–13), di cui 6 possono generare PWM (~3, 5, 6, 9, 10, 11), 6 ingressi analogici (A0–A5) e i pin di alimentazione che alimentano la scheda o forniscono energia ad altri componenti (Vin, 5V, 3.3V, GND, IOREF, AREF, RESET). Ogni pin ha una funzione principale, ma molti ne hanno anche una seconda: A4 e A5 sono anche il bus I2C, i pin 10–13 formano il bus SPI, il 2 e il 3 sono pin di interrupt e lo 0 e l'1 sono la linea seriale che parla con il tuo computer.

Scegliere il pin giusto fa la differenza tra un progetto che funziona al primo colpo e ore passate a cercare errori. Con le tabelle di questo articolo capirai facilmente perché il PWM sui pin 9 e 10 smette di funzionare quando colleghi un servo, perché lo sketch non si carica mentre è collegato un modulo Bluetooth o perché qualche LED può sovraccaricare la scheda. Alla fine troverai anche uno sketch di prova che usa tutti i tipi di pin insieme, un esempio di piano dei pin e le differenze di pin tra Uno R3 e R4.

Scheda Arduino Uno R3 e i suoi pin
Arduino Uno R3: pin digitali (0–13) sul lato superiore, pin di alimentazione e ingressi analogici (A0–A5) sul lato inferiore, connettore ICSP 2×3 sul lato destro.

Schema dei pin di Arduino Uno: dove si trova ogni pin?

Metti la scheda davanti a te con la presa USB e il jack di alimentazione a sinistra. I due connettori del lato superiore ospitano i pin digitali; i numeri crescono da destra verso sinistra, quindi il pin più a destra è lo 0 (RX) e il pin digitale più a sinistra è il 13. Sul lato inferiore, il connettore di sinistra porta i pin di alimentazione e quello di destra gli ingressi analogici. La ~ (tilde) accanto a un numero indica che quel pin può generare PWM. Il gruppo di 2×3 pin maschio sul lato destro della scheda è il connettore ICSP.

ConnettorePin (da sinistra a destra)Funzione
In alto a sinistra (10 pin)SCL, SDA, AREF, GND, 13, 12, ~11, ~10, ~9, 8Copia dell'I2C, riferimento analogico, SPI e pin digitali
In alto a destra (8 pin)7, ~6, ~5, 4, ~3, 2, TX→1, RX←0Pin digitali, pin di interrupt e linea seriale
In basso a sinistra (8 pin)Libero (NC), IOREF, RESET, 3.3V, 5V, GND, GND, VinPin di alimentazione
In basso a destra (6 pin)A0, A1, A2, A3, A4, A5Ingressi analogici (A4/A5 sono anche I2C)
Lato destro (2×3)1 MISO, 2 5V, 3 SCK, 4 MOSI, 5 RESET, 6 GNDConnettore di programmazione ICSP
CaratteristicaArduino Uno R3
MicrocontrolloreATmega328P, 16 MHz
Tensione di lavoro (logica)5 V
Tensione di ingresso (jack / Vin)Consigliata 7–12 V, limite 6–20 V
Ingressi/uscite digitali14 pin (D0–D13)
Uscite PWM6 pin: 3, 5, 6, 9, 10, 11
Ingressi analogici6 pin (A0–A5), 10 bit (0–1023)
Corrente per pin20 mA consigliati, 40 mA massimo assoluto
Corrente totale (VCC/GND)200 mA
Corrente del pin 3.3VMassimo 50 mA
Memoria32 KB di flash (0,5 KB di bootloader), 2 KB di SRAM, 1 KB di EEPROM

La grande tabella dei pin: D0–D13 e A0–A5

PinPortaFunzione principaleFunzione extraNota
D0 (RX)PD0I/O digitaleUART RX (Serial)Collegato al chip USB-seriale, lascialo libero
D1 (TX)PD1I/O digitaleUART TX (Serial)Collegato al chip USB-seriale, lascialo libero
D2PD2I/O digitaleInterrupt esterno INT0Pulsanti, encoder, conteggio giri
D3 ~PD3I/O digitale, PWM 490 HzInterrupt esterno INT1, Timer2Il PWM si altera mentre suona tone()
D4PD4I/O digitale-Nessuna funzione extra, libero
D5 ~PD5I/O digitale, PWM 980 HzTimer0Stesso timer di millis()
D6 ~PD6I/O digitale, PWM 980 HzTimer0Stesso timer di millis()
D7PD7I/O digitale-Nessuna funzione extra, libero
D8PB0I/O digitale-Nessuna funzione extra, libero
D9 ~PB1I/O digitale, PWM 490 HzTimer1La libreria Servo ne disattiva il PWM
D10 ~PB2I/O digitale, PWM 490 HzSPI SS, Timer1Con l'SPI deve restare un'uscita
D11 ~PB3I/O digitale, PWM 490 HzSPI MOSI, Timer2Presente anche sul connettore ICSP
D12PB4I/O digitaleSPI MISOPresente anche sul connettore ICSP
D13PB5I/O digitaleSPI SCKQui c'è il LED L della scheda
A0PC0Ingresso analogicoDigitale 14-
A1PC1Ingresso analogicoDigitale 15-
A2PC2Ingresso analogicoDigitale 16-
A3PC3Ingresso analogicoDigitale 17-
A4PC4Ingresso analogicoI2C SDA, digitale 18Niente lettura analogica con l'I2C attivo
A5PC5Ingresso analogicoI2C SCL, digitale 19Niente lettura analogica con l'I2C attivo
All'occorrenza i pin analogici funzionano anche come normali pin digitali: A0 = 14, A1 = 15 … A5 = 19. Puoi scrivere pinMode(A2, OUTPUT) per accendere un LED o leggere un pulsante con digitalRead(A3); così su Arduino Uno hai in tutto 20 pin digitali. La colonna "Porta" della tabella è il vero nome del pin dentro l'ATmega328P (digitale 13 = PB5) e ti serve quando scrivi codice veloce con l'accesso diretto alle porte. A6 e A7 esistono solo su schede come Nano e Pro Mini.

Come funzionano i pin digitali (0–13)?

Ogni pin digitale si imposta come ingresso o uscita con pinMode(). Come uscita, digitalWrite(pin, HIGH) porta il pin a circa 5 V e LOW a 0 V. Come ingresso, digitalRead() confronta la tensione con una soglia: con l'ATmega328P alimentato a 5 V, tutto ciò che supera 3,0 V è sicuramente HIGH, tutto ciò che sta sotto 1,5 V è sicuramente LOW, e in mezzo c'è una zona indefinita. Per questo l'uscita di un sensore a 3,3 V di solito viene letta come HIGH da Arduino Uno; l'uscita a 5 V di Arduino Uno però non deve andare direttamente all'ingresso di un modulo a 3,3 V, in mezzo serve un convertitore di livello logico.

Un pin di ingresso non collegato a nulla resta flottante e legge HIGH e LOW a caso, anche solo avvicinando la mano. La soluzione è portare il pin a un livello fisso con una resistenza: pinMode(pin, INPUT_PULLUP) attiva la resistenza da 20–50 kΩ interna al chip e il pulsante va collegato tra il pin e GND. Trovi i dettagli in Come collegare un pulsante ad Arduino. Al pin 13 è collegato il LED L della scheda; sulla R3 originale questo LED è pilotato tramite un amplificatore operazionale usato come buffer, quindi usare il pin come ingresso non crea problemi, ma su alcuni cloni il LED e la sua resistenza sono collegati direttamente al pin e possono disturbare la lettura di un pulsante con il pull-up interno.

Pin PWM (~3, 5, 6, 9, 10, 11) e timer

Arduino Uno non può generare una vera uscita analogica; al suo posto questi sei pin forniscono il PWM, un'onda quadra che si accende e si spegne molto velocemente. Con analogWrite(pin, valore) regoli da 0 a 255 per quanto tempo l'onda resta accesa: 0 è sempre spento, 127 circa metà e 255 sempre acceso. Così si controllano la luminosità di un LED, la velocità di un motore e quella di una ventola. I sei pin PWM sono collegati a coppie a tre timer hardware, ed è questa la causa dei conflitti con alcune librerie. Il principio del PWM e il calcolo del duty cycle sono spiegati in Cos'è il PWM?.

TimerPin PWMFrequenzaChi usa questo timer?
Timer0 (8 bit)5, 6Circa 980 Hzmillis(), delay() e micros()
Timer1 (16 bit)9, 10Circa 490 HzLibreria Servo
Timer2 (8 bit)3, 11Circa 490 Hztone() e librerie come IRremote
Appena usi la libreria Servo, analogWrite() smette di funzionare sui pin 9 e 10, anche se lì non è collegato nessun servo. Mentre un buzzer suona con tone(), anche il PWM sui pin 3 e 11 viene disturbato. Se il tuo progetto ha sia un servo sia un buzzer, i pin PWM sicuri sono il 5 e il 6. Dato che il PWM di questi due pin viene dallo stesso timer di millis(), con valori molto bassi (0–10) può restare acceso un po' più del previsto.

Pin analogici (A0–A5) e AREF

I pin analogici misurano una tensione tra 0 e 5 V con una risoluzione di 10 bit, e analogRead() restituisce un numero da 0 a 1023. Un passo vale circa 4,9 mV; per convertire il numero in volt usa tensione = valore × 5,0 / 1023, quindi una lettura di 512 significa circa 2,5 V. I sei pin condividono a turno un unico ADC e una lettura dura circa 100 µs, cioè circa 10.000 letture al secondo. Per misure precise l'impedenza di uscita del sensore non dovrebbe superare 10 kΩ; se è più alta, leggendo due pin uno dopo l'altro i valori possono mescolarsi, e scartare la prima lettura per usare la seconda risolve il problema. Per misurare tensioni sopra i 5 V scegli le resistenze giuste con il calcolatore del partitore di tensione.

Il pin AREF serve a cambiare il limite superiore della misura analogica. analogReference(DEFAULT) usa 5 V, analogReference(INTERNAL) il riferimento interno da 1,1 V del chip e analogReference(EXTERNAL) la tensione che applichi al pin AREF (0–5 V) come fondo scala. Con un sensore che dà 0–1 V, il riferimento da 1,1 V riduce un passo a circa 1,1 mV e rende la misura circa 4,5 volte più fine. Potenziometri, LDR e sensori di umidità del terreno si collegano a questi pin; i dettagli della conversione analogico-digitale sono nell'articolo sull'ADC e un esempio pratico nell'articolo sul potenziometro.

Se applichi una tensione esterna al pin AREF, scrivi sempre analogReference(EXTERNAL) prima della prima analogRead(). Altrimenti il riferimento interno del chip e la tensione esterna vanno in cortocircuito e il microcontrollore può danneggiarsi. E non applicare mai ai pin analogici più di 5 V o una tensione negativa.

Pin di alimentazione: Vin, 5V, 3.3V, GND, IOREF e RESET

PinCosa fa?Limiti e attenzioni
VinFornisce la tensione che arriva dal jack o alimenta la scheda con 7–12 VSalta il diodo di protezione contro l'inversione, attenzione alla polarità
5VUscita a 5 V dal regolatore o dall'USBFusibile da 500 mA sull'USB; dall'esterno solo 5 V stabilizzati
3.3VUscita a 3,3 V dal regolatore della schedaMassimo 50 mA; per piccoli moduli come l'RC522
GNDMassa comune (2 in basso, 1 in alto)Il GND di tutte le alimentazioni esterne va unito qui
IOREFComunica agli shield la tensione logica della schedaSu Arduino Uno è collegato a 5V, non serve ad alimentare
RESETRiavvia la scheda quando viene portato a LOWLo usano i pulsanti di reset degli shield
AREFIngresso di riferimento esterno per le misure analogiche0–5 V; prima analogReference(EXTERNAL)
NC (pin senza nome)Riservato a usi futuri sulla R3Non collegato a nulla

Arduino Uno si può alimentare in tre modi. Tramite USB la scheda prende i 5 V direttamente dal computer e un fusibile ripristinabile da 500 mA protegge la porta. Se fornisci 7–12 V dal jack DC o da Vin, il regolatore della scheda li abbassa a 5 V; se sono collegati entrambi, la scheda passa da sola all'alimentazione esterna quando Vin supera circa 6,6 V. Dato che il regolatore trasforma in calore la tensione in eccesso, con 12 V in ingresso si scalda in fretta se prelevi qualche centinaio di mA dal pin 5V. La soluzione più sana è alimentare carichi come servo, motori e strisce LED con una fonte separata e unire solo i GND. Per scegliere la batteria e calcolare l'autonomia usa il calcolatore di durata della batteria, e leggi tutti i modi di alimentazione in Come alimentare Arduino.

Non dare mai più di 5 V al pin 5V: il regolatore viene scavalcato e qualsiasi tensione sopra i 6 V può bruciare l'ATmega328P. Collegare per errore una batteria da 9 V al pin 5V è uno dei modi più comuni in cui i principianti bruciano la scheda. Collega sempre la batteria al jack DC o al pin Vin.

Perché i pin 0 e 1 vanno lasciati liberi?

I pin 0 (RX) e 1 (TX) sono l'unica porta seriale hardware dell'ATmega328P e sulla scheda sono collegati tramite resistenze da 1 kΩ al chip convertitore USB-seriale (ATmega16U2). Il computer usa questi due pin quando carica il codice e quando invii testo al Monitor seriale. Se al pin 0 è collegato il TX di un modulo Bluetooth o un altro segnale, le due sorgenti si contendono la stessa linea e il caricamento si ferma con avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00. Inoltre il pin 1 cambia stato rapidamente a ogni Serial.print(), quindi un LED o un relè collegato lì si attiva a caso.

Per questo lascia liberi lo 0 e l'1 finché hai altri pin disponibili. Se devi collegare un modulo seriale come un HC-05, un GPS o un lettore MP3, la libreria SoftwareSerial crea una seconda porta seriale su altri due pin. Lo sketch seguente collega il modulo ai pin 8 (RX) e 7 (TX): inoltra al modulo ciò che scrivi nel Monitor seriale e al computer ciò che arriva dal modulo. Con moduli a logica 3,3 V come l'HC-05, collega l'uscita TX di Arduino Uno (pin 7) all'ingresso RX del modulo tramite un partitore di tensione. Tutte le soluzioni ai problemi di caricamento sono in Arduino non carica lo sketch, e il funzionamento della comunicazione seriale in Comunicazione seriale UART.

C++ (Arduino IDE)
1#include <SoftwareSerial.h>
2
3SoftwareSerial moduleSerial(8, 7);   // RX = 8, TX = 7; 0 ve 1 boş kalır / 0 and 1 stay free
4
5void setup() {
6  Serial.begin(9600);                // USB üzerinden bilgisayar / computer over USB
7  moduleSerial.begin(9600);          // HC-05 veri modu hızı / HC-05 data mode baud rate
8  Serial.println(F("Seri kopru hazir / Serial bridge ready"));
9}
10
11void loop() {
12  if (moduleSerial.available()) {
13    Serial.write(moduleSerial.read());   // modülden bilgisayara / module to computer
14  }
15  if (Serial.available()) {
16    moduleSerial.write(Serial.read());   // bilgisayardan modüle / computer to module
17  }
18}

Pin di comunicazione: I2C (A4/A5), SPI (10–13) e pin di interrupt (2, 3)

L'I2C ti permette di collegare decine di dispositivi allo stesso bus con soli due fili (SDA e SCL); display LCD, OLED, moduli orologio RTC e sensori come il BME280 lo usano. Su Arduino Uno SDA = A4 e SCL = A5. Sulle schede R3 i pin SDA e SCL accanto ad AREF non sono un bus separato: sono collegati internamente ad A4 e A5, quindi mentre usi l'I2C non puoi usare A4 e A5 per letture analogiche. La libreria Wire lavora di default a 100 kHz e arriva a 400 kHz con Wire.setClock(400000). Indirizzi, resistenze di pull-up e uno scanner I2C sono in Cos'è l'I2C?, un esempio pratico in Display LCD I2C.

L'SPI è più veloce ma richiede più fili: MOSI = 11, MISO = 12, SCK = 13 e SS (CS) = 10. Moduli per schede SD, lettori RFID e display TFT usano l'SPI. Più dispositivi possono condividere il bus: MOSI, MISO e SCK sono in comune e ogni dispositivo riceve il proprio pin CS. Un dettaglio importante: in modalità master il pin 10 deve restare un'uscita; se lo imposti come ingresso e viene portato a LOW, l'ATmega328P passa in modalità slave e l'SPI si ferma. MISO, MOSI e SCK sono presenti anche sul connettore ICSP, da cui alcuni shield prendono l'SPI. Per i dettagli leggi Cos'è l'SPI? e RFID RC522.

Un interrupt ti permette di cogliere all'istante un cambiamento su un pin, qualunque cosa stia facendo loop() in quel momento. Su Arduino Uno gli interrupt esterni ci sono solo sui pin 2 (INT0) e 3 (INT1): scrivi attachInterrupt(digitalPinToInterrupt(2), funzione, FALLING), e la modalità di attivazione può essere LOW, CHANGE, RISING o FALLING. Encoder, sensori di giri, flussimetri e pulsanti che non devono mai sfuggire vanno su questi pin. Anche gli altri pin hanno gli "interrupt di cambio stato" (PCINT), ma i pin della stessa porta condividono un'unica funzione di interrupt e il tuo codice deve capire quale pin è cambiato. Regole ed esempi sono in Interrupt su Arduino.

FunzioneArduino UnoESP32 (DevKit)Raspberry Pi Pico
I2C SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
SPI MOSI / MISO / SCK / CS11 / 12 / 13 / 10GPIO 23 / 19 / 18 / 5GP19 / GP16 / GP18 / GP17
UART TX / RX1 / 0GPIO 1 / 3 (collegati all'USB)GP0 / GP1
Interrupt esternoSolo 2 e 3Tutti i GPIOTutti i GPIO
PWM6 pinQuasi tutti i pin di uscitaTutti i GPIO
Ingresso analogico6 pin, 10 bitADC1: GPIO 32–39, 12 bitGP26, GP27, GP28; 12 bit
Livello logico5 V3,3 V (non tollera i 5 V)3,3 V (non tollera i 5 V)
Corrente per pin20 mA (max 40 mA)Circa 20 mA consigliati4 mA di default, max 12 mA

Passando all'ESP32 o al Pico, la differenza più grande è la tensione: entrambe le schede lavorano a 3,3 V e i loro pin non tollerano i 5 V, quindi i moduli a 5 V che colleghi direttamente ad Arduino Uno possono richiedere un convertitore di livello. In compenso queste schede hanno interrupt e PWM su quasi tutti i pin, e i bus I2C e SPI si possono spostare su altri pin. Per confrontare le schede leggi Arduino Uno o ESP32?, per vedere le mappe dei pin usa lo strumento pinout; le schede vere e proprie sono presentate in Cos'è l'ESP32? e Cos'è il Raspberry Pi Pico?.

A cosa serve il connettore ICSP?

ICSP (In-Circuit Serial Programming) è un connettore 2×3 che serve a programmare il microcontrollore direttamente attraverso le linee SPI, senza USB né bootloader. L'ICSP sul lato destro appartiene all'ATmega328P, mentre il piccolo ICSP1 accanto alla presa USB appartiene al chip USB-seriale (ATmega16U2). Nell'uso quotidiano non lo tocchi, ma l'ICSP entra in gioco quando il bootloader si corrompe, quando scrivi il bootloader su un ATmega328P nuovo o quando carichi il codice con un programmatore come l'USBasp. Se trasformi un secondo Arduino Uno in programmatore con l'esempio ArduinoISP, i suoi pin 10, 11, 12 e 13 vanno a RESET, MOSI, MISO e SCK della scheda di destinazione, e un condensatore da 10 µF tra RESET e GND sull'Uno programmatore ne impedisce il reset automatico. Per capire se la tua scheda si è danneggiata, dai un'occhiata a Arduino bruciato?.

Pin ICSPSegnaleCorrispondente su Arduino Uno
1MISOD12
2VCC (+5 V)5V
3SCKD13
4MOSID11
5RESETRESET
6GNDGND

20 mA per pin, 200 mA in totale: i limiti di corrente

Un pin di Arduino Uno lavora in sicurezza fino a 20 mA. I 40 mA del datasheet dell'ATmega328P sono il massimo assoluto, cioè il valore oltre il quale il chip può danneggiarsi in modo permanente, non un valore di lavoro. La corrente totale che passa dai pin VCC e GND del chip non deve superare i 200 mA. Il datasheet divide inoltre i pin in gruppi: quando erogano corrente (HIGH), D0–D4 insieme ad A0–A5, e D5–D13 tra loro, devono restare ciascuno sotto i 150 mA; quando assorbono corrente (LOW), i gruppi D0–D4, D5–D13 e A0–A5 devono restare ciascuno sotto i 100 mA. Se alimenti un LED rosso a 5 V con una resistenza da 220 Ω, la corrente è (5 − 2) / 220 ≈ 13,6 mA. Dieci LED accesi insieme fanno 136 mA; è sotto i 200 mA, ma se stanno tutti nello stesso gruppo si arriva molto vicino al limite di 150 mA del gruppo. Se i LED si accendono con il pin a LOW (resistenza dal 5V al pin) e la maggior parte sta nello stesso gruppo, il limite di 100 mA viene superato. Distribuisci i LED tra i gruppi o aumenta la resistenza a 330–470 Ω. Trova la resistenza giusta con il calcolatore della resistenza per LED o il calcolatore della legge di Ohm.

  • Motori: Anche un piccolo motore DC assorbe centinaia di mA e produce picchi di tensione; usa un driver per motori come l'L298N o un transistor.
  • Bobina del relè: La bobina di un relè a 5 V assorbe circa 70–90 mA; usa un modulo relè con transistor e diodo.
  • Servomotori: Il filo del segnale può andare a un pin, ma l'alimentazione del servo deve arrivare da una fonte separata, non dal pin 5V; i dettagli sono nell'articolo sul servomotore.
  • Strisce LED e LED di potenza: Le strisce a 12 V e i LED da 1 W richiedono un MOSFET a livello logico.
  • Cortocircuiti: Collegare direttamente a GND un'uscita a livello HIGH preleva dal pin molto più di 40 mA e lo danneggia per sempre.

Sketch di prova: pin digitali, PWM, analogici e di interrupt insieme

  1. Collega un LED al pin 9 con una resistenza da 220 Ω: la gamba lunga verso la resistenza, quella corta a GND.
  2. Collega i due piedini esterni di un potenziometro a 5V e GND e quello centrale ad A0.
  3. Collega un pulsante tra il pin 2 e GND; non serve una resistenza a parte perché si usa il pull-up interno.
  4. Carica lo sketch, apri il Monitor seriale e imposta 9600 baud.
  5. Gira il potenziometro: la luminosità del LED sul pin 9 cambia, il LED L della scheda (pin 13) si accende quando la tensione supera 2,5 V e il contatore aumenta di uno a ogni pressione del pulsante.
C++ (Arduino IDE)
1const byte BUTTON_PIN = 2;    // kesme pini INT0 / interrupt pin INT0
2const byte PWM_LED    = 9;    // ~9: PWM çıkışı / PWM output
3const byte STATUS_LED = 13;   // kart üzerindeki L LED'i / onboard L LED
4const byte POT_PIN    = A0;   // analog giriş / analog input
5
6volatile unsigned int pressCount = 0;   // ISR içinde değişir / changed inside the ISR
7
8void onButton() {
9  static unsigned long lastPressMs = 0;
10  unsigned long now = millis();
11  if (now - lastPressMs > 50) {         // 50 ms sıçrama filtresi / 50 ms debounce
12    pressCount++;
13    lastPressMs = now;
14  }
15}
16
17void setup() {
18  Serial.begin(9600);                   // 0 ve 1 numaralı pinleri kullanır / uses pins 0 and 1
19  pinMode(STATUS_LED, OUTPUT);
20  pinMode(PWM_LED, OUTPUT);
21  pinMode(BUTTON_PIN, INPUT_PULLUP);    // dahili pull-up direnci / internal pull-up resistor
22  attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), onButton, FALLING);
23}
24
25void loop() {
26  int raw = analogRead(POT_PIN);        // 0-1023 arası ham değer / raw value 0-1023
27  float volts = raw * 5.0 / 1023.0;     // volta çevir / convert to volts
28  analogWrite(PWM_LED, raw / 4);        // 0-255 arası PWM / PWM from 0 to 255
29  digitalWrite(STATUS_LED, volts > 2.5 ? HIGH : LOW);   // 2,5 V eşiği / 2.5 V threshold
30
31  noInterrupts();                       // sayacı güvenle kopyala / copy the counter safely
32  unsigned int presses = pressCount;
33  interrupts();
34
35  Serial.print(F("A0: "));
36  Serial.print(raw);
37  Serial.print(F("  V: "));
38  Serial.print(volts, 2);
39  Serial.print(F("  Buton / Button: "));
40  Serial.println(presses);
41  delay(200);
42}

Lo sketch usa contemporaneamente quattro tipi di pin di Arduino Uno. analogRead(A0) legge un valore da 0 a 1023 e raw / 4 lo riduce all'intervallo 0–255 che analogWrite() si aspetta. Per non contare i rimbalzi del pulsante, la funzione di interrupt ignora i segnali che arrivano meno di 50 ms dopo l'ultima pressione. Il contatore modificato nell'interrupt è dichiarato volatile e loop() lo copia sospendendo per un attimo gli interrupt: Arduino Uno, a 8 bit, legge un numero a 16 bit in due passaggi e un interrupt che arriva nel mezzo potrebbe dare un valore sbagliato. I pin 0 e 1 servono solo a Serial, quindi non vi si collega nient'altro.

Esempio di piano dei pin: quale componente su quale pin?

Distribuire i pin a caso in un progetto con molti componenti porta a conflitti. Prima metti sui loro pin i componenti con funzioni speciali (I2C, SPI, interrupt, PWM), poi distribuisci i compiti digitali semplici sui pin liberi. Qui sotto trovi un piano di esempio per una serratura con tessera RFID: lettore RC522, LCD I2C, servo, buzzer, pulsante e due LED. Poiché servo e tone() sono usati insieme, il PWM sui pin 3, 9, 10 e 11 è già fuori gioco, e il piano ne tiene conto.

ComponentePin di Arduino UnoPerché questo pin?
RC522 SDA (SS)10Pin SS dell'SPI; deve restare un'uscita
RC522 SCK / MOSI / MISO13 / 11 / 12I pin SPI hardware non si possono cambiare
RC522 RST9Va bene qualsiasi pin digitale; il PWM del 9 è comunque inutilizzabile per via del servo
RC522 VCC3.3VIl modulo lavora a 3,3 V e assorbe meno del limite di 50 mA
LCD I2C SDA / SCLA4 / A5L'unico bus I2C di Arduino Uno
Segnale del servo6La libreria Servo funziona su qualsiasi pin; alimentazione da 5 V esterni
Buzzer8tone() funziona su qualsiasi pin, nessun pin PWM sprecato
Pulsante2Pin di interrupt; con INPUT_PULLUP non serve la resistenza
LED verde / rosso4 / 7Semplici pin digitali senza funzioni extra
Lasciati liberi0, 1, 3, 5, A0–A3Linea seriale libera; 3 per un secondo interrupt, 5 per il PWM, A0–A3 per i sensori

Differenze di pin tra Arduino Uno R3 e R4

CaratteristicaUno R3Uno R4 (Minima / WiFi)
MicrocontrolloreATmega328P, 8 bit, 16 MHzRenesas RA4M1, 32 bit, 48 MHz
Disposizione dei pinUno standardUguale; gli shield si montano
Corrente per pin20 mA8 mA
Risoluzione analogica10 bit10 bit di default, fino a 14 bit
Vera uscita analogica (DAC)AssenteDAC a 12 bit su A0
Pin 0 e 1Condivisi con l'USB (Serial)Separati dall'USB (Serial1)
Intervallo di Vin7–12 V consigliati6–24 V
USBUSB-B, tramite l'ATmega16U2USB-C; direttamente al processore sulla Minima, tramite un ponte ESP32-S3 sulla WiFi

In breve, sulla R4 i numeri e le funzioni dei pin restano gli stessi (PWM ~3, 5, 6, 9, 10, 11; I2C A4/A5; SPI 10–13; interrupt 2, 3), ma la corrente per pin scende a 8 mA. Un LED che sulla R3 pilotavi direttamente da un pin, sulla R4 richiede una resistenza più grande (per esempio 1 kΩ per circa 3 mA) o un transistor. Il confronto dettagliato è in Arduino Uno R4. Se cerchi una scheda più piccola, ti saranno utili Pinout di Arduino Nano e Quale Arduino comprare?.

Errori comuni e soluzioni

SintomoCausaSoluzione
Lo sketch non si carica, errore "not in sync"C'è un modulo collegato al pin 0 o 1Scollega il modulo durante il caricamento o spostalo su altri pin con SoftwareSerial
La luminosità del LED non cambia più dopo aver aggiunto un servoLa libreria Servo ha disattivato il PWM su 9 e 10Sposta il LED su 3, 5, 6 o 11
La velocità del motore impazzisce mentre suona il buzzertone() usa il Timer2, che disturba 3 e 11Sposta il PWM su 5, 6, 9 o 10
Il valore analogico cambia da soloPin flottante o impedenza della sorgente troppo altaCollega bene il sensore e, se serve, leggi due volte
Il pulsante sembra premuto a casoPin di ingresso flottanteUsa INPUT_PULLUP o aggiungi una resistenza da 10 kΩ
A4/A5 leggono male con un display I2C collegatoA4/A5 sono condivisi con il bus I2CCollega il sensore analogico ad A0–A3
Il modulo SPI non rispondeIl pin 10 è impostato come ingresso o il CS è sbagliatoLascia il pin 10 come uscita e dai a ogni dispositivo il suo CS
La scheda si scalda o si riavvia da solaTroppa corrente prelevata dai pin o dal pin 5VAlimenta i carichi a parte e unisci i GND
Prima di iniziare un progetto, disegna su carta un piccolo piano dei pin: componente, pin, funzione. All'inizio del codice definisci i pin con costanti con nome come const byte LED_PIN = 9;: così, se sposti un componente su un altro pin, cambi una sola riga. Se la scheda si riavvia senza motivo, segui i passaggi di diagnosi in Arduino si resetta da solo.

Quando conosci i pin di Arduino Uno non devi più ricordare a memoria dove va ogni componente: guardi di cosa ha bisogno e scegli tu il pin giusto. Se vuoi ripassare le basi, parti da Cos'è Arduino?. Nell'app BlueGrays trovi progetti come accendere un LED, leggere un pulsante, misurare la luce con una LDR, un LED RGB in PWM, un LCD I2C, l'RFID e due Arduino che comunicano su una linea seriale, ognuno passo dopo passo con schemi che mostrano perché è stato scelto ogni pin e con il codice pronto.

Domande frequenti

Quanti pin ha Arduino Uno?

Arduino Uno R3 ha 14 pin digitali di ingresso/uscita (0–13) e 6 ingressi analogici (A0–A5); poiché i pin analogici si possono usare anche come digitali, i pin di segnale sono 20 in tutto. Sei pin digitali forniscono il PWM. A questi si aggiungono pin di alimentazione e controllo come Vin, 5V, 3.3V, GND, IOREF, AREF e RESET, oltre al connettore ICSP a 6 pin.

Quali sono i pin PWM di Arduino Uno?

I pin PWM sono il 3, 5, 6, 9, 10 e 11; sulla scheda hanno una ~ accanto al numero. Il 5 e il 6 lavorano a circa 980 Hz, gli altri a circa 490 Hz. Con la libreria Servo il PWM dei pin 9 e 10 viene compromesso, con tone() quello dei pin 3 e 11.

I pin analogici di Arduino si possono usare come digitali?

Sì. Su Arduino Uno i pin A0–A5 funzionano come normali pin digitali con pinMode, digitalWrite e digitalRead e corrispondono ai numeri 14–19. Puoi quindi collegare un LED ad A0 o un pulsante ad A3. L'unica eccezione è che, mentre usi l'I2C, A4 e A5 sono riservati al bus.

Quanta corrente può erogare un pin di Arduino Uno?

Da un pin puoi prelevare in sicurezza 20 mA; 40 mA è il massimo assoluto, e superarlo può danneggiare il pin in modo permanente. La somma di tutti i pin non deve superare i 200 mA. Per questo i LED si collegano con una resistenza, mentre carichi come motori e relè si pilotano con un transistor, un MOSFET o un modulo driver.

Si possono usare i pin 0 e 1 di Arduino Uno?

Si può, ma non è consigliato. Questi pin sono collegati al chip USB-seriale e il computer usa questa linea per caricare il codice e per il Monitor seriale. Con un modulo collegato al pin 0 il caricamento può fallire con l'errore "not in sync", quindi usali per ultimi o passa ad altri pin con SoftwareSerial.

Quali sono i pin SDA e SCL di Arduino Uno?

Su Arduino Uno la linea SDA del bus I2C è il pin A4 e SCL è il pin A5. Le schede R3 hanno anche due pin con la scritta SDA e SCL accanto ad AREF, ma sono collegati internamente ad A4 e A5 e non formano un bus separato. Sull'ESP32 i pin I2C predefiniti sono GPIO 21 e 22; sul Raspberry Pi Pico l'I2C si può spostare su molti pin e la coppia più usata è GP4 (SDA) e GP5 (SCL).

Vedi tutti i progetti
LED lampeggiante
#1Principiante

LED lampeggiante

Il primissimo ciao dell'elettronica: accendere e spegnere un solo LED. L'Arduino accende e spegne il LED a intervalli brevissimi, così la luce lampeggia veloce. Vedi nel modo più semplice come la sche

4.6(188)
1127
Accendere un LED con un pulsante (Push)
#9Principiante

Accendere un LED con un pulsante (Push)

Come un campanello: la luce resta accesa finché premi e si spegne quando lasci. L'Arduino ascolta il pulsante di continuo; mentre è premuto accende il LED, e appena togli il dito lo spegne. Con questo

4.8(113)
229
Misurare l'intensità luminosa con LDR
#11Principiante

Misurare l'intensità luminosa con LDR

Vuoi vedere quanto è luminosa la tua stanza sotto forma di numero? L'LDR, un piccolo componente sensibile alla luce, misura la luce ambiente e l'Arduino scrive il valore sullo schermo del computer ogn

4.6(81)
139
HC-SR04 Misura della distanza (display seriale)
#27Principiante

HC-SR04 Misura della distanza (display seriale)

Il sensore HC-SR04 funziona come un pipistrello che trova la strada al buio: manda un suono che non puoi sentire, ne ascolta l'eco e misura quanto è lontano l'oggetto davanti a sé. L'Arduino scrive qu

4.6(46)
71
Transizione cromatica omogenea con LED RGB
#40Principiante
Premium

Transizione cromatica omogenea con LED RGB

Un solo LED RGB passa lentamente dal rosso al verde, dal verde al blu e torna al rosso, in un giro di arcobaleno che non si ferma mai. Ogni passaggio dura circa due secondi e mezzo, e il giallo, il tu

4.8(58)
76
Utilizzo dello schermo LCD con I2C
#32Principiante
Premium

Utilizzo dello schermo LCD con I2C

Regala al tuo Arduino uno schermo tutto suo e fagli scrivere il primo messaggio. Lo schermo LCD a due righe si collega con pochi fili; prima compare un saluto nella riga in alto, poi un secondo testo

4.8(53)
70
Lettura del valore RFID
#53Principiante
Premium

Lettura del valore RFID

Il portachiavi del condominio o la tessera d'ingresso nascondono un numero di identificazione segreto, e questo progetto lo legge. Avvicina la tessera al lettore RFID e l'Arduino scrive il suo numero

4.7(47)
61
Comunicazione unidirezionale tra 2 Arduino
#57Intermedio
Premium

Comunicazione unidirezionale tra 2 Arduino

Fai parlare due Arduino con un solo filo: premi il pulsante sull'uno e il LED dell'altro si accende, premi di nuovo e si spegne. La scheda che invia segnala la pressione con un breve messaggio, e quel

4.4(37)
50