ULN2003 con Arduino - collegamenti e test del 28BYJ-48

Arduino Uno collegato a un driver ULN2003 per controllare un motore passo-passo.

Scritto da

Ippolito Vitali

Pubblicato il

14 mag 2026

Indice

Il modulo ULN2003 con Arduino è una delle soluzioni più semplici per comandare un piccolo motore passo-passo senza entrare subito in driver più complessi. Qui trovi come lavora il chip, come collegare il classico 28BYJ-48, quale alimentazione usare davvero e quali dettagli fanno la differenza tra un prototipo che vibra e uno che gira con continuità.

In breve, è una soluzione semplice ma con limiti precisi

  • ULN2003 è un array di 7 canali Darlington pensato per pilotare carichi induttivi dal lato massa.
  • Con Arduino funziona bene soprattutto con motori passo-passo unipolari a 5 V, come il 28BYJ-48.
  • Il motore va alimentato con una sorgente esterna stabile; i pin di Arduino devono inviare solo i segnali di controllo.
  • Il chip regge correnti elevate per singolo canale, ma la caduta di tensione interna non è trascurabile.
  • Per motori bipolari o carichi più impegnativi conviene passare a driver a corrente regolata.

Che cosa fa davvero il ULN2003

Il ULN2003 non è un “motore” né un driver intelligente: è uno stadio di potenza. In pratica Arduino dice al chip quando attivare una bobina, e il chip porta a massa la corrente del carico. Questa logica low-side, cioè lato massa, è semplice da gestire e molto utile con bobine, relè e piccoli attuatori. Una coppia Darlington mette due transistor in cascata per aumentare il guadagno di corrente: il vantaggio è che Arduino deve fornire pochissima corrente in ingresso, il compromesso è una caduta di tensione più alta rispetto a soluzioni moderne a MOSFET.

La scheda TI indica 7 canali, uscita fino a 50 V e corrente fino a 500 mA per singolo canale. Gli ingressi sono adatti alla logica 5 V e, nei casi corretti, anche a quella a 3,3 V. C’è anche un dettaglio importante: i diodi di clamp sono integrati, quindi il chip è già pensato per gestire il ritorno di energia tipico dei carichi induttivi. Io leggo tutto questo così: è un componente robusto, ma nasce per semplicità e compatibilità, non per spremere il motore al massimo dell’efficienza.

Parametro Valore utile Perché conta
Canali 7 Ne usi 4 per un piccolo stepper unipolare, gli altri restano liberi.
Corrente per canale Fino a 500 mA È un limite massimo, non un obiettivo da inseguire per forza.
Tensione di uscita Fino a 50 V Molto più di quanto serva ai comuni progetti con Arduino.
Tipo di uscita Open collector, sink Il chip commuta la massa del carico, non il positivo.
Protezione Diodi di clamp integrati Aiutano con le sovratensioni generate dalle bobine.
Compatibilità logica 5 V e 3,3 V Comodo anche se il progetto poi si sposta su altri microcontrollori.

Capito il ruolo del chip, il passo successivo è il cablaggio corretto: lì nascono quasi tutti i problemi reali.

Arduino Uno collegato a un driver ULN2003 e a un motore passo-passo, pronto per un progetto di robotica.

Collegamenti corretti e alimentazione esterna

La regola più importante è semplice: alimenta il motore con una sorgente esterna e tieni la massa in comune con Arduino. I pin digitali della scheda servono a comandare gli ingressi del ULN2003, non a fornire la corrente delle bobine. Su un Arduino UNO i pin sono fatti per segnali, non per alimentare un motore passo-passo in modo diretto.

Collegamento Dove va Perché conta
IN1-IN4 Quattro pin digitali di Arduino, per esempio 8, 9, 10 e 11 Inviano la sequenza di eccitazione delle bobine.
VCC del modulo Alimentazione 5 V esterna È la parte di potenza, non va confusa con l’alimentazione logica.
GND del modulo Massa comune con Arduino e alimentatore Senza massa comune i livelli logici diventano inaffidabili.
Connettore motore Motore unipolare compatibile, come il 28BYJ-48 Il colore dei fili può cambiare da un produttore all’altro.

Se il tuo modulo espone anche un pin COM separato, quello serve per i diodi di ricircolo e va collegato come previsto dal costruttore; su molte schedine già pronte per il 28BYJ-48 il collegamento è già gestito sul PCB. In pratica, il cablaggio giusto è più importante di quanto sembri: un alimentatore da banco o un piccolo 5 V ben filtrato spesso fa la differenza tra un motore che perde passi e uno che si comporta bene. Io aggiungo quasi sempre un condensatore elettrolitico da 100-470 µF vicino al modulo, soprattutto se i cavi non sono cortissimi.

Una volta chiaro l’hardware, il codice diventa molto più lineare.

Come far muovere il motore con un codice minimo

Per il primo test io resto su un approccio essenziale. La libreria Stepper di Arduino basta per iniziare con un motore unipolare: imposti i pin, dai una velocità prudente e poi fai ruotare il motore avanti e indietro. Se il progetto crescerà, potrai passare a una gestione più raffinata; qui, però, l’obiettivo è ottenere un movimento chiaro e ripetibile.

#include 

const int passiPerGiro = 2048;  // punto di partenza tipico, da calibrare sul tuo motore
Stepper motore(passiPerGiro, 8, 10, 9, 11);

void setup() {
  motore.setSpeed(10);  // giri al minuto
}

void loop() {
  motore.step(passiPerGiro);
  delay(500);

  motore.step(-passiPerGiro);
  delay(500);
}

Ci sono due dettagli che vedo spesso ignorati. Il primo è l’ordine dei pin nel costruttore: se il motore vibra ma non ruota, quasi sempre la sequenza delle bobine è sbagliata. Il secondo è la taratura dei passi per giro: sul 28BYJ-48 il valore di partenza comunemente usato è 2048, ma in pratica può servire una piccola calibrazione. Io parto sempre basso con la velocità e la aumento a piccoli gradini, perché con questo tipo di motore il carico meccanico conta molto più di quanto sembri.

A questo punto vale la pena capire quando questa soluzione è davvero adatta e quando invece è meglio cambiare architettura.

Dove il modulo rende bene e dove no

Il ULN2003 dà il meglio di sé quando hai un motore piccolo, una meccanica leggera e vuoi una soluzione economica e comprensibile. È perfetto per dimostrazioni, piccoli movimenti ripetitivi, indicatori, sportelli leggeri, manopole e meccanismi da banco. Lo tengo volentieri anche nei progetti didattici, perché fa capire bene la separazione tra logica e potenza senza costringerti a tarare una corrente di fase.

Scenario ULN2003 Alternativa migliore Motivo
28BYJ-48 e piccoli attuatori Ottimo Non necessario Semplice, economico e sufficiente per carichi leggeri.
Motori bipolari tipo NEMA17 Non adatto A4988, DRV8825, TMC2209 o simili Serve un driver a corrente regolata e una logica diversa.
Progetti a batteria Accettabile solo se il consumo non è critico Driver più efficienti La caduta di tensione dei Darlington pesa sull’efficienza.
Movimenti silenziosi e fluidi Limitato Driver con micropassi I micropassi suddividono il passo e riducono vibrazioni e rumore.

Qui il limite non è solo la corrente nominale. La caduta di tensione interna del Darlington riduce la tensione effettiva sulle bobine e aumenta la dissipazione termica. Tradotto in pratica: il motore gira, ma non va trattato come se avesse un driver moderno con controllo di corrente. Io lo uso senza problemi per piccoli meccanismi; se devo chiedere coppia vera, velocità alta o precisione più pulita, passo a un’altra architettura. Prima di farlo, però, conviene eliminare gli errori tipici che fanno perdere tempo al primo collaudo.

Gli errori che vedo più spesso nei primi test

  • Alimentare il motore direttamente dai pin di Arduino invece che dal modulo e da una sorgente esterna.
  • Dimenticare la massa comune tra alimentatore, ULN2003 e scheda di controllo.
  • Scambiare l’ordine dei fili o la sequenza degli ingressi IN1-IN4.
  • Provare subito velocità troppo alte e concludere che il motore “non funziona”.
  • Ignorare il fatto che una bobina sotto carico resta calda anche quando il motore è fermo.

Il sintomo più ingannevole è questo: il motore vibra, scatta, fa rumore, ma non ruota davvero. In molti casi il chip è innocente; il problema è quasi sempre il cablaggio o la sequenza di eccitazione. Anche l’alimentazione conta moltissimo: un 5 V debole o rumoroso crea reset, passi persi e comportamenti casuali che sembrano difetti del codice ma non lo sono. Se eviti questi inciampi, restano pochi accorgimenti pratici che migliorano subito l’affidabilità.

Due accorgimenti che fanno la differenza al primo collaudo

Se dovessi ridurre tutto a due consigli, direi questo: alimentazione separata e velocità prudente. Un alimentatore 5 V stabile, con massa comune e cavi corti, risolve più problemi di quanto faccia cambiare sketch. Il condensatore da 100-470 µF vicino al modulo aiuta a reggere i picchi quando le bobine commutano, soprattutto se il motore parte e si ferma di continuo.

  • Parti con pochi giri al minuto e aumenta solo quando il motore resta regolare sotto il tuo carico reale.
  • Se il progetto deve muovere qualcosa di pesante, non cercare di “compensare” con più corrente sul ULN2003: cambia motore o driver.
  • Per maggiore precisione meccanica, usa finecorsa o riferimenti di zero; contare i passi senza un punto di homing lascia sempre un margine di errore.
  • Se il cablaggio è lungo o l’ambiente è rumoroso, tieni separati i percorsi di potenza e segnale per quanto possibile.

Per me il ULN2003 resta un ottimo punto di ingresso nel mondo dei motori passo-passo: costa poco, si capisce in fretta e insegna bene il rapporto tra logica e potenza. Se però il progetto deve andare oltre il banco di prova, la scelta giusta non è forzare il modulo, ma passare a un sistema di pilotaggio più adatto al carico reale.

Domande frequenti

Perché il ULN2003 è uno stadio low-side con 7 canali Darlington, pensato per carichi induttivi e motori unipolari a 5 V. Con il 28BYJ-48 basta usare 4 ingressi e una logica semplice; con un bipolare come un NEMA17 serve invece un driver a corrente regolata, come A4988, DRV8825 o TMC2209. Inoltre la caduta di tensione interna del Darlington riduce l'efficienza.

Il motore va alimentato con una sorgente 5 V esterna, mentre i pin di Arduino devono solo pilotare IN1-IN4. La massa di Arduino, del modulo e dell'alimentatore deve essere in comune; se il modulo espone un pin COM, va collegato come previsto dal costruttore. Un condensatore da 100-470 µF vicino al modulo aiuta a stabilizzare i picchi.

Prima verifica l'ordine dei pin nel costruttore della libreria Stepper e la sequenza delle bobine: è l'errore più comune. Poi rallenta la velocità, perché partire troppo forte fa perdere passi, e calibra il valore dei passi per giro: 2048 è un punto di partenza tipico per il 28BYJ-48, ma può richiedere una piccola taratura.

Quando il carico cresce, quando ti serve più fluidità o quando il progetto è a batteria e l'efficienza conta. Il ULN2003 è ottimo per meccanismi leggeri, sportelli, manopole e dimostrazioni, ma per movimenti silenziosi, micropassi o carichi più impegnativi è meglio scegliere un driver moderno con controllo di corrente.

Valuta l'articolo

Valutazione: 0.00 Numero di voti: 0

Tag:

darlington uln2003 28byj-48 motore passo-passo unipolare

Condividi post

Ippolito Vitali

Ippolito Vitali

Mi chiamo Ippolito Vitali e ho accumulato 8 anni di esperienza nel campo della tecnologia, dei hobby e del tempo libero. La mia passione per questi argomenti è nata da un interesse personale che si è trasformato in una vera e propria missione: aiutare gli altri a esplorare e comprendere le meraviglie del mondo tecnologico. Scrivo di tutto, dalle ultime innovazioni alle tecniche per ottimizzare il tempo libero, cercando sempre di semplificare concetti complessi e rendere le informazioni accessibili. Nel mio lavoro, mi impegno a controllare le fonti e a confrontare le informazioni per garantire contenuti utili, accurati e aggiornati. Seguo le tendenze del settore con attenzione, organizzando le mie conoscenze in modo chiaro e comprensibile. Credo che la tecnologia e il tempo libero possano migliorare la qualità della vita, e mi piace condividere queste idee con i lettori, offrendo spunti pratici e riflessioni stimolanti.

Scrivi un commento