PROGETTI ARDUINO

  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti
  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti

Progetto 158
​Controllo di un motore stepper con driver A4988

🚀 Introduzione

Dopo aver controllato un piccolo motore passo-passo 28BYJ-48 con il driver ULN2003, è il momento di passare a una soluzione più potente e precisa.

In questo progetto utilizzerai Arduino UNO insieme al driver A4988, uno dei moduli più diffusi per il controllo di motori stepper bipolari.

L’A4988 viene utilizzato in:
  • stampanti 3D;
  • macchine CNC;
  • plotter;
  • sistemi di posizionamento;
  • piccoli robot;
  • assi lineari automatizzati.

A differenza del driver ULN2003, l’A4988 controlla il motore tramite due segnali principali:
  • STEP, che genera i passi;
  • DIR, che stabilisce la direzione.
​
Ogni impulso inviato al pin STEP fa avanzare il motore di un passo o di una frazione di passo, in base alla modalità selezionata.

Con due pulsanti potrai ruotare il motore nei due sensi, mentre un potenziometro permetterà di regolare la velocità.
Un LED segnalerà quando il motore è in movimento.
​
👉 Questo progetto introduce la logica tipica dei sistemi CNC e prepara il terreno ai progetti successivi dedicati al posizionamento preciso.

🎯 Cosa realizzerai
​

Con Arduino creerai un sistema capace di:
  • ⚙️ controllare un motore stepper bipolare;
  • 🔌 utilizzare il driver A4988;
  • ↔️ scegliere la direzione di rotazione;
  • 🔘 comandare il motore con due pulsanti;
  • 🎛️ regolare la velocità tramite potenziometro;
  • 💡 indicare il movimento con un LED;
  • 🛑 fermare il motore al rilascio dei pulsanti;
  • 📏 generare impulsi STEP precisi;
  • 🧠 comprendere la differenza tra STEP e DIR;
  • ✅ utilizzare codice compatibile con Arduino UNO.

🧰 Materiale necessario
​
  • 1x Arduino UNO;
  • 1x motore passo-passo bipolare, ad esempio NEMA 17;
  • 1x modulo driver A4988;
  • 1x condensatore elettrolitico da almeno 100 µF;
  • 2x pulsanti;
  • 1x potenziometro lineare da 10 kΩ;
  • 1x LED;
  • 1x resistenza da 220 Ω;
  • 1x alimentatore esterno adatto al motore;
  • 1x breadboard o basetta di supporto;
  • cavetti jumper;
  • cavo USB.
​
Il motore deve essere compatibile con la corrente massima gestibile dal driver A4988.

🛒 Non hai ancora i componenti?

Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.

👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW

📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un'occhiata anche ai miei libri dedicati ad Arduino.
All'interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4rfzjXE
​

📚 Librerie necessarie

Il progetto non richiede librerie esterne.

Arduino controllerà direttamente il driver A4988 tramite:
  • digitalWrite() per il segnale di direzione;
  • impulsi sul pin STEP;
  • analogRead() per leggere il potenziometro;
  • micros() per regolare la velocità senza bloccare il programma.
Il codice potrà quindi essere compilato direttamente con Arduino IDE.

🔌 Schema di collegamento
​

Driver A4988 – Lato logico
  • VDD → 5V di Arduino;
  • GND logico → GND di Arduino;
  • STEP → pin digitale 9;
  • DIR → pin digitale 8;
  • ENABLE → pin digitale 7;
  • RESET → collegato a SLEEP;
  • SLEEP → 5V;
  • MS1 → GND;
  • MS2 → GND;
  • MS3 → GND.
Con MS1, MS2 e MS3 collegati a GND, il driver lavora in modalità passo intero.

Driver A4988 – Alimentazione motore
  • VMOT → positivo dell’alimentatore esterno;
  • GND motore → negativo dell’alimentatore esterno.
Collega un condensatore elettrolitico da almeno 100 µF tra VMOT e GND, il più vicino possibile al driver.
Rispetta la polarità del condensatore.

Motore stepper bipolare
  • una bobina → uscite 1A e 1B;
  • seconda bobina → uscite 2A e 2B.
Le coppie corrette dipendono dal motore utilizzato.
Prima di collegarlo, identifica le due bobine con un multimetro.

Pulsante rotazione oraria
  • un terminale → pin digitale 2;
  • terminale opposto → GND.

Pulsante rotazione antioraria
  • un terminale → pin digitale 3;
  • terminale opposto → GND.
Entrambi i pulsanti utilizzano INPUT_PULLUP.

Potenziometro velocità
  • terminale laterale → 5V;
  • terminale centrale → A0;
  • terminale laterale opposto → GND.

LED di movimento
  • anodo → pin digitale 6 tramite resistenza da 220 Ω;
  • catodo → GND.
⚠️ Alimentazione
​

Il motore non deve essere alimentato dal pin 5V di Arduino.

L’A4988 utilizza due alimentazioni separate:
  • VDD per la logica;
  • VMOT per il motore.
Arduino alimenta solamente la parte logica del driver.

Il motore deve essere alimentato con una sorgente esterna adeguata.

Collega insieme:
  • GND di Arduino;
  • GND logico dell’A4988;
  • GND dell’alimentatore del motore.
👉 La massa comune è indispensabile.

Non collegare o scollegare il motore mentre il driver è alimentato.

Questa operazione può danneggiare immediatamente il modulo A4988.
​
Il condensatore tra VMOT e GND è molto importante perché aiuta a proteggere il driver dai picchi di tensione generati dal motore.

⚠️ Regolazione della corrente
​

Prima di utilizzare il motore è necessario regolare il limite di corrente del driver A4988.

Il modulo contiene un piccolo trimmer che stabilisce la corrente massima fornita alle bobine.

Una regolazione errata può causare:
  • motore debole;
  • perdita di passi;
  • surriscaldamento;
  • danneggiamento del driver;
  • danneggiamento del motore.

La regolazione deve essere eseguita in base:
  • al modello del modulo A4988;
  • al valore delle resistenze di misura;
  • alla corrente nominale del motore.

La formula esatta può variare leggermente tra i diversi moduli.

Per questo motivo è importante consultare la documentazione del driver specifico utilizzato.
​
Durante la regolazione:
  • utilizza un cacciavite isolato;
  • evita cortocircuiti;
  • non toccare i componenti metallici;
  • misura la tensione di riferimento con attenzione;
  • applica un dissipatore al driver.
Foto

💻 Codice Arduino
​
​
Il programma gestirà:
  • lettura dei due pulsanti;
  • scelta della direzione;
  • lettura del potenziometro;
  • generazione degli impulsi STEP;
  • regolazione della velocità;
  • controllo del pin ENABLE;
  • LED di movimento;
  • arresto quando nessun pulsante è premuto.

    

⚙️ Come funziona
​

Quando Arduino viene acceso, il driver rimane disabilitato.
Il motore non riceve impulsi e resta fermo.

Premendo il pulsante di rotazione oraria:
  • Arduino imposta il pin DIR;
  • abilita il driver;
  • genera impulsi sul pin STEP;
  • accende il LED.
​
Premendo il pulsante antiorario, il livello del pin DIR viene invertito e il motore ruota nella direzione opposta.

Quando entrambi i pulsanti vengono rilasciati:
  • gli impulsi STEP si interrompono;
  • il driver viene disabilitato;
  • il LED si spegne.

Se i due pulsanti vengono premuti contemporaneamente, il motore rimane fermo per evitare comandi contrari.

📏 Segnale STEP
​

Il pin STEP riceve una sequenza di impulsi.
Ogni impulso corrisponde a:
  • un passo intero;
  • mezzo passo;
  • un quarto di passo;
  • un ottavo di passo;
  • un sedicesimo di passo.
La modalità dipende dai pin MS1, MS2 e MS3.

Nel progetto base verrà utilizzato il passo intero.
​
Con un motore da 200 passi per giro:
  • 200 impulsi corrispondono a circa un giro completo;
  • 100 impulsi corrispondono a circa mezzo giro;
  • 50 impulsi corrispondono a circa un quarto di giro.

Il valore reale dipende dal motore e da eventuali riduzioni meccaniche.

↔️ Segnale DIR
​

Il pin DIR stabilisce il verso di rotazione.

In genere:
  • HIGH → una direzione;
  • LOW → direzione opposta.
Il verso effettivo dipende dal collegamento delle bobine.

Se il motore ruota al contrario, puoi:
  • invertire il livello DIR nel codice;
  • scambiare i due fili di una sola bobina;
  • rinominare i pulsanti.
​
Non scambiare casualmente i fili tra bobine diverse.

🎛️ Regolazione della velocità
​

Il potenziometro restituisce un valore compreso tra 0 e 1023.

Arduino converte questo valore in un intervallo di tempo tra due impulsi STEP.

Più piccolo è l’intervallo:
  • più rapidamente vengono inviati gli impulsi;
  • maggiore è la velocità del motore.

Più grande è l’intervallo:
  • minore è la frequenza degli impulsi;
  • più lento è il movimento.
​
La velocità massima deve essere limitata per evitare la perdita di passi.

🔌 Pin ENABLE
​

Il pin ENABLE dell’A4988 è attivo a livello basso.

Questo significa:
  • LOW → driver abilitato;
  • HIGH → driver disabilitato.

Quando il motore è fermo, disabilitare il driver permette di:
  • ridurre il consumo;
  • diminuire il riscaldamento;
  • togliere coppia alle bobine.

Quando il driver è disabilitato, l’albero può essere mosso più facilmente a mano.
​
Se invece è necessario mantenere la posizione, il driver può rimanere abilitato.

💡 Suggerimenti pratici
​

  • Regola il limite di corrente prima di collegare un carico.
  • Utilizza sempre il condensatore su VMOT.
  • Applica un dissipatore al driver.
  • Non scollegare il motore mentre il sistema è acceso.
  • Identifica correttamente le bobine.
  • Inizia con una velocità bassa.
  • Prova il motore senza carico.
  • Utilizza cavi corti tra driver e motore.
  • Fissa il motore a una struttura stabile.
  • Evita di toccare il driver durante il funzionamento.
  • Controlla frequentemente la temperatura.
  • Non superare la tensione massima del modulo.
  • Disabilita il sistema prima di modificare i collegamenti.
  • Verifica che RESET e SLEEP siano collegati correttamente.
  • Utilizza una breadboard solo per prove a bassa corrente.

⚠️ Errori comuni
​

Il motore vibra ma non gira
Le bobine sono probabilmente collegate in modo errato.
Identifica nuovamente le coppie con un multimetro.

Il motore perde passi
Le cause più comuni sono:
  • velocità troppo elevata;
  • accelerazione troppo brusca;
  • corrente insufficiente;
  • carico eccessivo;
  • alimentazione inadeguata.
Riduci la velocità e controlla il limite di corrente.

Il driver diventa molto caldo
Un certo riscaldamento è normale.
Se il modulo diventa eccessivamente caldo:
  • interrompi l’alimentazione;
  • riduci il limite di corrente;
  • aggiungi un dissipatore;
  • migliora la ventilazione;
  • riduci il carico;
  • controlla che il motore non sia bloccato.

Il motore non mantiene la posizione
Se il pin ENABLE viene portato a HIGH, il driver disattiva le bobine.
Per mantenere la posizione è necessario lasciare il driver abilitato.

Il potenziometro non cambia la velocità
Controlla:
  • terminale centrale collegato ad A0;
  • terminali laterali collegati a 5V e GND;
  • massa comune;
  • valore letto nel programma.

Il motore gira nel verso sbagliato
Puoi:
  • invertire la logica del pin DIR;
  • scambiare i due fili di una bobina;
  • scambiare le funzioni dei pulsanti.

Arduino si riavvia
Il motore potrebbe essere alimentato in modo errato oppure i disturbi elettrici stanno raggiungendo la logica.
Verifica:
  • alimentazione separata;
  • massa comune;
  • condensatore;
  • cablaggi;
  • corrente del driver.

Il driver si danneggia all’accensione
Le cause più frequenti sono:
  • condensatore assente;
  • polarità invertita;
  • motore scollegato mentre era alimentato;
  • cortocircuito;
  • tensione eccessiva;
  • regolazione errata della corrente.

🔄 Varianti possibili
​

Vuoi migliorare il progetto?
  • 🔢 aggiungi un numero preciso di passi;
  • 📟 visualizza la velocità su un display LCD;
  • 🧭 controlla la posizione con un encoder;
  • 🛑 aggiungi due finecorsa;
  • 🎛️ regola anche il numero di passi con un potenziometro;
  • 🕹️ utilizza un joystick;
  • 🔘 aggiungi un pulsante di arresto;
  • 💾 salva la posizione nella EEPROM;
  • 🧰 utilizza la libreria AccelStepper;
  • 📱 aggiungi il controllo Bluetooth;
  • 🌐 aggiungi il controllo Wi-Fi;
  • ⚙️ attiva il microstepping;
  • 🏭 realizza un asse lineare;
  • 🖨️ costruisci un piccolo plotter;
  • 🛠️ prepara il sistema per una mini CNC.

Foto
Foto

© ProgettiArduino.com 2026 - Fancello Salvatore
​ Layout, immagini e testi sono di esclusiva proprietà di www.progettiarduino.com 
Privacy Policy