Elettronica E Hardware

Step Motor

I motori passo-passo sono utilizzati in numerosi dispositivi automatici come stampanti 3D, CNC, telecamere e sistemi motorizzati. Il modello 28BYJ-48 rappresenta una soluzione economica e semplice da utilizzare con Arduino, ideale per apprendere il controllo preciso dei movimenti tramite driver ULN2003. In questa attività verranno analizzati collegamenti, funzionamento e programmazione del motore stepper utilizzando le librerie Stepper e AccelStepper.

Durata

100 minuti

Software

Arduino IDE, Tinkercad Circuits

Arduino Uno | Step Motor

Il motore 28BYJ-48 è uno dei motori passo-passo più utilizzati nei progetti di automazione e robotica didattica. A differenza di un normale motore DC, questo componente non ruota continuamente quando viene alimentato, ma esegue piccoli movimenti angolari chiamati step.

Un motore passo a passo è un tipo di motore DC senza spazzole che si muove in passi precisi e piccoli invece di girare continuamente. Il principio di funzionamento di un motore passo passo si basa su campi magnetici. Ha due componenti principali: un rotore (la parte mobile) con denti magnetici e uno stator (la parte ferma) con bobine elettromagnetiche.
Quando l'elettricità scorre attraverso queste bobine in un ordine specifico, ciascuna crea un campo magnetico. Questo campo magnetico attira i denti del rotore più vicini, facendo avanzare il motore di un unico incremento angolare preciso e fisso, noto come gradino.

Il modo in cui le bobine sono pulsate determina esattamente come si muove il motore:

  • La sequenza degli impulsi controlla la direzione in cui gira il motore
  • La frequenza degli impulsi determina la velocità con cui il motore gira
  • Il numero totale di impulsi che inviiamo determina esattamente quanto gira il motore

Alimentando le bobine, passo dopo passo, una dopo l'altra in un ordine particolare, possiamo far girare il motore esattamente quanto vogliamo, quanto velocemente vogliamo e nella direzione desiderata.

Caratteristiche del motore 28BYJ-48
Caratteristica Valore
Tensione di alimentazione 5V
Tipo motore Stepper unipolare
Numero di fasi 4
Riduttore interno 64:1
Precisione Movimento a piccoli passi

Il driver ULN2003

Arduino non può alimentare direttamente il motore perché i pin digitali forniscono una corrente limitata. Il driver ULN2003 agisce come interfaccia tra Arduino e il motore.

  • Riceve i segnali digitali da Arduino
  • Amplifica la corrente necessaria al motore
  • Protegge il microcontrollore
  • Permette il controllo corretto delle bobine del motore
Struttura del sistema
Componente Funzione
Arduino UNO Gestione logica e controllo
ULN2003 Driver di potenza
28BYJ-48 Movimento meccanico
Tinkercad Simulazione del circuito
ULN2003 Arduino
IN1 Pin 8
IN2 Pin 9
IN3 Pin 10
IN4 Pin 11
GND GND
VCC 5V
Un motore stepper non può essere collegato direttamente ad Arduino perché richiede una quantità di corrente superiore a quella che i pin della scheda possono fornire in sicurezza. Arduino riesce a gestire soltanto piccoli segnali digitali, mentre un motore passo-passo necessita di:
  • corrente maggiore
  • attivazione sequenziale delle bobine interne
  • protezione dai ritorni di corrente generati dal motore
Per questo motivo viene utilizzato un driver come il ULN2003. Il driver svolge diverse funzioni fondamentali:

Ecco una rapida tabella di riferimento per le connessioni dei pin:

Funzione del driver Descrizione
Amplificazione corrente Fornisce al motore la corrente necessaria
Protezione Arduino Evita danni ai pin della scheda
Controllo sequenziale Gestisce l attivazione corretta delle bobine
Stabilità del movimento Permette rotazioni precise e controllate
Nel caso del 28BYJ-48, il modulo ULN2003 riceve i segnali digitali da Arduino e li converte nei segnali di potenza necessari al motore. Il flusso corretto è quindi:
 Arduino → Driver ULN2003 → Motore Stepper 28BYJ-48 
Senza driver il motore:
  • potrebbe non muoversi
  • vibrare senza ruotare
  • assorbire troppa corrente
  • danneggiare Arduino

La scheda driver ULN2003

I microcontrollori come Arduino sono strumenti eccezionali per controllare l'elettronica, ma presentano un limite strutturale: ogni pin GPIO può erogare solo una piccola quantità di corrente, solitamente intorno ai 20–40 mA. Il motore passo-passo 28BYJ-48 richiede invece molta più energia: circa 240 mA per fase. Si tratta di una quantità sei volte superiore a quella che Arduino può fornire in sicurezza senza rischiare di bruciarsi!

Per superare questo limite, il motore viene quasi sempre abbinato a una scheda driver ULN2003. L'ULN2003 è un circuito integrato progettato specificamente per gestire tensioni e correnti elevate, che funge da "ponte" per azionare in sicurezza le bobine del motore sfruttando i segnali a bassa corrente provenienti da Arduino.

Il chip ULN2003 contiene al suo interno sette coppie di transistor Darlington. Ciascuna coppia è in grado di sopportare fino a 500 mA e 50 Volt, valori più che sufficienti per questo motore. La scheda sfrutta quattro di queste sette coppie per controllare le quattro fasi del motore passo-passo.

Esiste anche un secondo motivo fondamentale per utilizzare l'ULN2003: i motori elettrici sono carichi induttivi. Questo significa che, soprattutto durante le fasi di commutazione e spegnimento, possono generare pericolosi picchi ad alta tensione, noti come forza controelettromotrice (back EMF). Questi picchi improvvisi potrebbero distruggere il microcontrollore o gli altri componenti collegati.

Nota di sicurezza: Per evitare danni, il chip ULN2003 integra al suo interno dei diodi di ricircolo (chiamati anche diodi flyback o diodi a ruota libera). Questi diodi hanno il compito di assorbire e dissipare in sicurezza i picchi di tensione, proteggendo l'intero circuito.

Libreria Stepper di Arduino

Arduino mette a disposizione la libreria Stepper.h che semplifica il controllo dei motori passo-passo.

La libreria consente di:

  • Impostare la velocità del motore
  • Definire il numero di passi
  • Invertire la direzione di rotazione
  • Controllare il movimento con poche istruzioni

Struttura base del programma


#include <Stepper.h>

const int stepsPerRevolution = 2048;

Stepper myStepper(
    stepsPerRevolution,
    8,
    10,
    9,
    11
);

void setup() {

    myStepper.setSpeed(10);

}

void loop() {

    myStepper.step(2048);

    delay(1000);

    myStepper.step(-2048);

    delay(1000);

}

Analisi del codice

Istruzione Funzione
#include <Stepper.h> Importa la libreria per il motore stepper
stepsPerRevolution Numero di passi per un giro completo
setSpeed(10) Imposta la velocità del motore
step(2048) Rotazione in senso orario
step(-2048) Rotazione in senso antiorario

Applicazioni reali

  • Stampanti 3D
  • Sistemi CNC
  • Robotica
  • Automazione industriale
  • Controllo apertura porte automatiche
  • Sistemi di puntamento
LABORATORIO

Controllo di un motore stepper con Arduino e ULN2003

Realizzazione di un sistema di movimentazione controllato tramite Arduino utilizzando simulazione Tinkercad.


1 Creazione del progetto Tinkercad

Accedere a Tinkercad e creare un nuovo circuito.

  • Inserire una scheda Arduino UNO
  • Aggiungere il driver ULN2003
  • Aggiungere il motore 28BYJ-48
  • Collegare il motore al driver

Successivamente collegare il driver ad Arduino secondo la tabella seguente.

Driver ULN2003 Arduino UNO
IN1 8
IN2 9
IN3 10
IN4 11
GND GND
VCC 5V

2 Inserimento del programma

Aprire l editor di codice di Tinkercad e sostituire il codice predefinito con il seguente programma.


#include <Stepper.h>

const int stepsPerRevolution = 2048;

Stepper myStepper(
    stepsPerRevolution,
    8,
    10,
    9,
    11
);

void setup() {

    myStepper.setSpeed(12);

}

void loop() {

    myStepper.step(2048);

    delay(1000);

    myStepper.step(-2048);

    delay(1000);

}

3 Avvio della simulazione

Eseguire la simulazione e osservare il comportamento del motore.

  • Il motore deve ruotare in senso orario
  • Dopo una pausa deve invertire la direzione
  • La velocità dipende dal valore impostato con setSpeed()

Provare a modificare il valore della velocità.

Valore Effetto
5 Rotazione lenta
10 Rotazione moderata
15 Rotazione veloce

4 Esercitazione guidata

Modificare il programma per ottenere:

  • Rotazione di mezzo giro
  • Pausa di 2 secondi
  • Rotazione inversa di mezzo giro

Suggerimento:


myStepper.step(1024);

1024 rappresenta metà dei passi necessari per una rotazione completa.


5 Esercizio applicativo reale

Simulare un sistema automatico di apertura di una barriera motorizzata.

Obiettivo:

  • Il motore deve aprire la barriera
  • Attendere 3 secondi
  • Richiudere automaticamente la barriera

Indicazioni operative:

  • Utilizzare delay(3000)
  • Utilizzare rotazione positiva e negativa
  • Modificare il numero di passi per simulare un apertura parziale

6 Attività avanzata facoltativa

Integrare un pulsante virtuale in Tinkercad per avviare il motore solo quando viene premuto.

Obiettivi:

  • Utilizzare input digitali
  • Leggere lo stato di un pulsante
  • Controllare il movimento tramite evento

if(digitalRead(2) == HIGH){

    myStepper.step(2048);

}





Arduino, ULN2003, 28BYJ-48, Motore Stepper, Sistemi e Reti, Elettronica, Tinkercad, Microcontrollori, Automazione, Coding,