- Configurare dispositivi elettronici programmabili per il controllo di sistemi automatici
- Analizzare il funzionamento di attuatori e componenti elettronici
- Realizzare semplici applicazioni integrate hardware/software
- Utilizzare ambienti di simulazione per il testing di circuiti elettronici
- Interpretare schemi elettrici e collegamenti hardware
- Scrivere e modificare codice per il controllo di periferiche elettroniche
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 |
- corrente maggiore
- attivazione sequenziale delle bobine interne
- protezione dai ritorni di corrente generati dal motore
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 |
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.
- PC con connessione Internet
- Tinkercad Circuits
- Arduino UNO
- Driver ULN2003
- Motore stepper 28BYJ-48
- Cavi di collegamento virtuali
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);
}