Componente · Controller

Arduino Uno

Arduino Uno è la scheda a microcontrollore più comune per la robotica: logica a 5V, semplice da programmare e difficile da rompere. Scopri funzioni e impiego.

Che cos’è

Arduino Uno è una piccola scheda di sviluppo basata sul ATmega328P di Microchip, un microcontrollore a 8 bit. Espone i pin del chip su connettori con etichette, aggiunge una porta USB per programmazione e alimentazione e gestisce le parti delicate: regolatore di tensione, quarzo del clock e circuito di reset, così puoi concentrarti sul codice e sul cablaggio. Per una parte enorme di chi impara la robotica, Uno è il modo in cui fa girare per la prima volta un motore o accendere un sensore.

Il suo fascino duraturo non è la potenza pura: per gli standard moderni è lento e povero di memoria. È la tolleranza. I pin a 5 V sopportano gli errori di cablaggio dei principianti, la comunità ha risposto quasi a ogni domanda possibile e quasi ogni sensore e driver hobbistico include codice di esempio che presuppone un Uno.

Schema etichettato di una scheda Arduino Uno: una porta USB-B e un jack cilindrico DC sul bordo sinistro, il microcontrollore ATmega328P al centro, un connettore I/O digitale per i pin da D0 a D13 lungo il bordo superiore e connettori di alimentazione e ingresso analogico da A0 ad A5 lungo il bordo inferiore.
Arduino Uno a colpo d'occhio: USB e alimentazione DC a sinistra, ATmega328P che fa il pensiero, I/O digitale lungo il bordo superiore e alimentazione più ingressi analogici lungo quello inferiore. Scarica SVG

Come funziona

Scrivi uno sketch, un programma C++ con due funzioni. setup() viene eseguito una volta all’accensione; loop() viene poi eseguito per sempre. Al loro interno leggi gli ingressi e piloti le uscite tramite i pin:

  • I pin digitali leggono o scrivono un segnale HIGH/LOW (5 V / 0 V): la pressione di un pulsante, un LED, l’ingresso direzione di un driver del motore.
  • I pin PWM (contrassegnati con ~) simulano una tensione analogica accendendosi e spegnendosi molto velocemente. È così che regoli la velocità del motore o la luminosità di un LED.
  • Gli ingressi analogici misurano una tensione da 0–5 V e la riportano come numero da 0–1023. È così che leggi un potenziometro o un sensore di linea analogico.

Uno non ha alcun sistema operativo. Il tuo codice è l’unica cosa in esecuzione, il che rende le temporizzazioni prevedibili: prezioso quando chiudi un ciclo di controllo attorno a un robot reale.

Quando usarlo

Scegli Uno quando stai imparando, quando vuoi il maggiore numero possibile di tutorial e librerie compatibili o quando il compito del robot è semplice e in tempo reale: leggere alcuni sensori, eseguire un ciclo di controllo, pilotare due motori. Un seguilinea, un robot che evita ostacoli o un piccolo rover a trazione differenziale rientrano pienamente nel suo terreno.

Cerca altrove quando ti servono Wi-Fi o Bluetooth (ESP32 è di solito l’aggiornamento), calcoli pesanti o visione con la fotocamera (Raspberry Pi), oppure molta memoria. I 2 KB di SRAM di Uno si esauriscono più in fretta di quanto i principianti si aspettino: stringhe lunghe e array grandi sono di solito i colpevoli.

Trappole comuni

  • È una scheda a 5 V. Molti sensori moderni sono a 3.3 V e possono danneggiarsi con logica a 5 V. Controlla la scheda tecnica prima di cablare.
  • Non alimentare i motori dalla scheda. Il regolatore di Uno non può fornire la corrente del motore; usa una batteria separata e un driver del motore. Alimentare i motori direttamente da Uno è il modo più comune in cui i principianti provocano un brownout o un reset della scheda.
  • delay() blocca tutto. Mentre la scheda è in delay(), non può leggere i sensori né reagire. Per qualsiasi cosa responsiva, misura il tempo con millis().
  • Fai attenzione alla memoria. Se la scheda si comporta in modo irregolare senza un motivo chiaro, potresti aver esaurito la SRAM.

Piedinatura: che cosa può fare davvero ogni pin

Quattordici pin digitali e sei analogici, ma non sono intercambiabili. Sei hanno una seconda funzione importante.

Pin Funzione aggiuntiva Note per un robot
D0 (RX) Seriale hardware Non usarli. L’USB li possiede
D1 (TX) Seriale hardware Non usarlo. Come sopra
D2, D3 Interrupt esterni 0 e 1 Gli unici due pin attivabili da qualsiasi fronte: riservali agli encoder
D3, D5, D6, D9, D10, D11 PWM (~) I sei pin per analogWrite. Qui si regola la velocità del motore
D10–D13 SPI (SS, MOSI, MISO, SCK) Necessari per una scheda SD o una radio nRF24
D13 LED integrato Ha un LED e una resistenza: ingresso debole, ottimo come uscita
A0–A5 Ingresso analogico, 10 bit Usabili anche come pin digitali se finiscono
A4, A5 I²C (SDA, SCL) Condivisi da ogni dispositivo I²C: usarli come ingressi analogici costa il bus

Due di queste righe determinano la forma di molti progetti robotici. D2 e D3 sono gli unici veri pin di interrupt, quindi un robot con due encoder delle ruote li usa entrambi e non ne resta nessuno. E A4/A5 sono il bus I²C, quindi su Uno un MPU-6050 più un array di sensori analogici entra subito in conflitto per i pin.

Questa pressione sui pin è la ragione più comune per cui un progetto supera le capacità di Uno, non la velocità né la memoria. Quattordici pin digitali e sei analogici scompaiono in fretta quando aggiungi un driver del motore (6 pin), una coppia di encoder (4 pin, 2 dei quali interrupt) e un array di sensori (6 analogici).

Alimentarlo e i tre modi di sbagliare

Ingresso Tensione Percorso Note
USB 5 V Tramite un fusibile ripristinabile Limitata a 500 mA per l’intera scheda
Jack cilindrico 7–12 V Tramite il regolatore lineare integrato L’alimentazione consigliata
Pin VIN 7–12 V Stesso regolatore Come il jack, ma disponibile su un pin
Pin 5V 5 V Direttamente sulla linea Bypassa il regolatore: nessuna protezione

Il regolatore è lineare, quindi dissipa come calore la differenza fra ingresso e 5 V. Con 12 V in ingresso e 200 mA assorbiti, sono (12 − 5) × 0.2 = 1.4 W in un piccolo contenitore: diventa genuinamente caldo. Se puoi scegliere, alimentalo a 9 V anziché a 12 V.

Tre errori specifici da nominare:

Alimentare i motori dal pin 5 V. Il regolatore non può fornire corrente ai motori, quindi la linea crolla, la scheda si resetta e il sintomo sembra un arresto anomalo del software. I motori ricevono un’alimentazione propria e condividono soltanto la massa.

Alimentare il pin 5 V da una sorgente non regolata. Quel pin è direttamente sulla linea, quindi qualsiasi tensione superiore a circa 5.5 V raggiunge direttamente l’ATmega328P.

Alimentare contemporaneamente da USB e jack. La scheda gestisce questa situazione: c’è un comparatore che seleziona la sorgente con tensione più alta. Tuttavia una batteria sul jack non si carica e può retroalimentare una scheda clone con un progetto marginale.

Che cosa possono fornire davvero i pin

Limite Valore Significato
Per pin 20 mA consigliati, 40 mA massimi assoluti Un LED va bene. Un motore no. Una bobina di relè no
Totale su tutti i pin 200 mA Otto LED da 20 mA consumano già tutto il budget
Pin 5 V, alimentato via USB ~450 mA dopo il consumo della scheda Un singolo servomotore può superarlo
Pin 3.3 V 50 mA Proviene dal regolatore del chip USB: molto limitato

Il pin a 3.3 V è una sorpresa frequente per chi lavora con Arduino. Non è una linea per uso generale, ma una comodità da 50 mA. Un modulo ESP-01 che tenta di trasmettere va immediatamente in brownout su quel pin.

Il problema dei 2 KB di memoria

Uno ha 32 KB di flash per il programma e 2 KB di SRAM per le variabili durante l’esecuzione. La flash è raramente il vincolo. La SRAM lo è, costantemente.

Ogni stringa letterale in una Serial.print viene copiata in SRAM all’avvio:

Serial.println("Calibration complete, entering drive mode");   // 43 bytes of SRAM, forever

Venti messaggi di questo tipo sono 800 byte, cioè il 40% del totale. La soluzione è F(), che lascia la stringa in flash e la legge solo quando serve:

Serial.println(F("Calibration complete, entering drive mode"));  // 0 bytes of SRAM

Gli array sono l’altro grande consumatore. Un float è 4 byte, quindi un buffer di registrazione da 200 campioni è 800 byte e non produce alcun avviso: il compilatore riporta volentieri l’uso della flash e non dice nulla di utile sulla SRAM durante l’esecuzione.

Il sintomo dell’esaurimento non è un errore pulito. Lo stack cresce verso il basso, l’heap verso l’alto e quando si incontrano le variabili si corrompono silenziosamente a vicenda. La scheda si comporta in modo irregolare: letture assurde, un ciclo che salta, un reset senza causa. Se Uno inizia a comportarsi in modo irrazionale dopo che hai aggiunto una funzionalità, sospetta la SRAM prima di ogni altra cosa.

// Drop this in and watch it while you develop.
int freeRam() {
  extern int __heap_start, *__brkval;
  int v;
  return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}

Con meno di circa 200 byte liberi, aspettati problemi.

Risoluzione dei problemi

Sintomo Causa probabile Soluzione
Si resetta all’avvio dei motori Corrente dei motori attraverso la scheda Alimentazione separata per i motori, sola massa in comune
Caricamento non riuscito: «not in sync» Qualcosa su D0/D1 oppure porta sbagliata Scollega tutto ciò che usa i pin seriali
Comportamento irregolare dopo aver aggiunto codice SRAM esaurita Racchiudi le stringhe in F(); controlla freeRam()
analogWrite non fa nulla Il pin non supporta PWM Usa 3, 5, 6, 9, 10 o 11
La libreria Servo rompe la PWM su 9/10 Servo prende il controllo del Timer 1 Usa altri pin PWM oppure pilota i servomotori da un PCA9685
Dispositivo I²C non trovato A4/A5 usati per altro Il bus I²C è esattamente quei due pin, esclusivamente
Regolatore molto caldo Ingresso vicino a 12 V Riduci a 7–9 V
Dispositivo a 3.3 V in brownout Limite di 50 mA su quel pin Usa un regolatore 3.3 V separato
Il sensore legge valori assurdi Sensore a 3.3 V su logica a 5 V Trasla i livelli oppure usa una scheda a 3.3 V

Uno o qualcos’altro?

Scheda Logica Perché sceglierla
Uno 5 V Tollerante, documentata ovunque, chip su zoccolo sostituibile
Nano 5 V Stesso chip, adatta al breadboard, 8 pin analogici anziché 6
Mega 2560 5 V 54 digitali, 16 analogici, 6 interrupt, 8 KB SRAM: la risposta alla pressione sui pin
ESP32 3.3 V Wi-Fi, Bluetooth, doppio nucleo, molto più veloce
Pro Micro 5 V USB nativo: può fingere di essere una tastiera o un mouse

La Nano merita una menzione particolare per i robot: è lo stesso ATmega328P con lo stesso codice ed espone A6 e A7 come ingressi analogici aggiuntivi. Per un array di riflessione a 8 canali, è la differenza fra riuscire o meno a montarlo: è esattamente il motivo per cui le costruzioni di inseguitori di linea spesso specificano una Nano.

Il riepilogo onesto è che il valore di Uno sta nel fatto che tutto funziona al primo tentativo. Ogni libreria, ogni tutorial e ogni schema di cablaggio presuppone una Uno. Durante l’apprendimento vale più di qualsiasi specifica e, quando la superi, ciò che hai superato è quasi sempre il numero di pin.

Esplora il grafo

Usato in queste costruzioni

Progetti, percorsi di apprendimento e simulatori che includono Arduino Uno.

Confronto

Alternative

Domande

FAQ su Arduino Uno

Che cos'è Arduino Uno?

Arduino Uno è una scheda a microcontrollore adatta ai principianti, basata sul chip ATmega328P. Ti permette di leggere sensori e controllare motori, LED e altra elettronica con brevi programmi C++ chiamati sketch; è la scheda su cui la maggior parte delle persone impara la robotica.

A cosa si usa Arduino Uno nella robotica?

Nella robotica Uno funge da cervello del robot: legge i sensori, esegue un ciclo di controllo e pilota i motori tramite un driver come L298N. È adatto a inseguitori di linea, robot che evitano ostacoli e piccoli rover, dove il compito è semplice e richiede temporizzazioni prevedibili in tempo reale.

Quale microcontrollore usa Arduino Uno?

Arduino Uno usa ATmega328P di Microchip, un microcontrollore AVR a 8 bit che opera a 16 MHz con 32 KB di flash e 2 KB di SRAM. La scheda aggiunge un'interfaccia USB, un regolatore di tensione e connettori attorno a quel singolo chip.

Arduino si programma in C o C++?

Gli sketch Arduino sono scritti in C++, con sopra un framework semplificato e adatto ai principianti. Puoi usare anche il C puro, perché il C è in gran parte un sottoinsieme del C++, ma le funzioni e le librerie standard Arduino sono in C++.

Il codice Arduino è difficile da imparare?

No: Arduino è uno dei modi più gentili per avvicinarsi alla programmazione dell'hardware. La struttura a due funzioni, setup e loop, un enorme ecosistema di librerie e migliaia di sketch di esempio permettono a un principiante di far lampeggiare un LED o girare un motore in un'ora.

Per la robotica è meglio Arduino o Raspberry Pi?

Risolvono problemi diversi. Arduino è un microcontrollore, ideale per il controllo in tempo reale di motori e sensori con temporizzazioni prevedibili. Raspberry Pi è un computer Linux completo, più adatto alla visione, ai calcoli pesanti o al Wi-Fi. Molti robot avanzati usano entrambi: il Pi per pensare e Arduino per agire.

Perché Arduino Uno è così diffuso?

Perché è tollerante e ben supportato. I pin a 5 V sopportano gli errori di cablaggio dei principianti, quasi ogni sensore hobbistico include codice di esempio per Uno e la comunità ha risposto quasi a ogni domanda, quindi resti bloccato solo raramente.

Posso usare ChatGPT o l'IA per scrivere codice Arduino?

Sì: gli assistenti IA possono preparare e correggere sketch Arduino e sono un utile supporto didattico. Prova sempre il codice generato dall'IA sull'hardware prima di fidarti, perché uno sketch dall'aspetto plausibile può comunque avere numeri di pin, temporizzazioni o logica sbagliati.

Per approfondire

Fonti