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.
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 è indelay(), non può leggere i sensori né reagire. Per qualsiasi cosa responsiva, misura il tempo conmillis().- 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.
- ProgettoBraccio robotico 4-DOF: PCA9685, servomotori e cinematica
- ProgettoCostruisci un Micromouse per labirinto con flood fill
- ProgettoCostruisci un plotter a penna: due assi passo-passo che arrivano
- ProgettoCostruisci un robot autobilanciante con MPU6050 e PID
- ProgettoCostruisci un robot di copertura che percorre un'intera stanza
- ProgettoCostruisci un robot di prelievo e posa che sa quando ha mancato
- ProgettoCostruisci un robot ROS 2 che vede e raggiunge un marcatore
- ProgettoCostruisci un robot seguilinea: dal simulatore alla pista reale
- ProgettoCostruisci un rover GPS autonomo tra punti di passaggio
- ProgettoCostruisci un'auto robot col telefono via Bluetooth o Wi-Fi
- ProgettoMini sumo robot: presa, cuneo e rilevamento del bordo
- ProgettoRobot con evitamento degli ostacoli: rileva, scansiona e sterza
- ProgettoRobot per labirinto di linee con memoria del percorso LSRB
- PercorsoFondamenti di elettronica robotica: percorso di apprendimento
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