I was looking for a cheap solution to add a motor to my Arduino and I found a kit that includes an unipolar stepper motor and the driver board.
I brought the kit from Hobby Components, but similar kits are available on many webstores and on eBay. The motor is labeled 28BYJ-48 (here’s its datasheet), while the driver board is based on the ULN2003 IC, using the same schematic available on Arduino’s website, with just the add of 4 leds to show the active phase.
Wiring to Arduino is very simple: you need 4 digital pins (in the following example I chose pin 2-3-4-5) and a 5V power supply.
To drive the motor, you can use the Stepper library, passing as parameters the number of steps required for a complete revolution (2048 for the included motor) and the Arduino’s pins:
Stepper myStepper(2048,2,3,4,5); |
With the setSpeed() method you can set the speed (= revolutions per minute) while using the step() method you can move the motor n steps forward (if n is negative, the motor will move backward):
#include <Stepper.h> Stepper myStepper(2048,2,3,4,5); void setup() { myStepper.setSpeed(10); } void loop() { myStepper.step(2048); delay(1000); myStepper.step(-2048); delay(1000); } |
Here’s a video about the previous sketch:
Ciao
Ho lo stesso motore che scheda driver, ma non riesco a farlo funzionare nè con lo sketch che hai messo nè con gli esempi della libreria Stepper, giusto un po’ di ronzio ed un lieve riscaldamento.
Qualche idea ?
ciao Enrico,
strano… i led come sono? tutti accesi? a me è capitato quando ho impostato una velocità troppo alta
Ciao, sì i led si accendono. All’inversione di senso di rotazione si spengono il 2° ed il 4° per un istante, mentre nel tuo filmato mi pare di vedere che si spengono il 3° ed il 4°, per cui ho sospettato una inversione di terminali, ma non sono riuscito a trovareuna combinazione funzionante. C’è una pagina dove si discute di questo ( http://www.youtube.com/all_comments?v=asv5-kYzSsE&page=1 ) e risulterebbe (in alcuni esemplari?) appunto una inversione, ma anche seguendo le indicazioni … niente.
Solo con l’esempio di velocità regolata con un potenziometro ad un certo valore ho una parziale rotazione.
Il venditore vuole risarcirmelo, ma mi sarebbe piaciuto riuscire a farlo funzionare. Ma dove si trova il “cablaggio” interno ? ho misurato dei valori che si avvicinano a quello indicato nel datasheet, ma non capisco il 5° terminale
Ciao Enrico,
ho trovato una differenza nel modo in cui sono realizzate alcune schede di controllo… prova a sostituire:
Stepper myStepper(2048,2,3,4,5);
con:
Stepper myStepper(2048,2,4,3,5);
e fammi sapere se così si inverte… eventualmente prova anche a ridurre la velocità
Ciao,
mi potresti dare un link per recuperare la libreria Stepper corretta?
ciao
è quella inclusa in Arduino, non devi scaricare nulla
Ciao Luca,
Ho lo stesso tuo motore con la stessa drive board, ma quando carico il tuo programma ottengo solo un ronzio da parte del motore, l’albero non si muove. Hai qualche idea? E come hai fatto a sapere che il numero degli step è 2048? Io leggendo qualche documento ho letto che questo motore ha 64 step! Grazie in anticipo
Ciao Giacomo,
il motore ha 64 steps/giro ma incluso c’è un riduttore che li porta a 2048/giro.
prova come suggerito in un altro commento a mettere Stepper myStepper(2048,2,4,3,5);
No.. niente da fare, stesso risultato 🙁
myStepper.setSpeed(10);
Il massimo valore inseribile è 7!
…con 5V
2048/64=32/4 step=8 (0-7)
🙂
Ciao Luigi
non ho capito il tuo ragionamento: la funzione setSpeed() imposta il numero di giri al minuto che fa il motore, da dove vedi che quel motore al massimo ne può fare solo 7?
Ciao, sei il migliore! Miglior guida in assoluto per semplicità ed immediatezza. Ci tengo a precisare alcune cose: ho comprato quei motorini e ho eseguito il tuo sketch: intanto con la velocità a 10 non funzionano, ecco spiegato il ronzio di cui parlavano gli altri, a me va al massimo a 7, oltre gira male o non gira. Poi volevo dirti che dopo il delay continua a girare sempre nello stesso verso anche se il numero è negativo… Puoi spiegarmi perchè? Ultima cosa: ho bisogno di controllare due motorini per muovere qualcosa su due assi, si riescono a controllare due motorini di questo tipo (infatti ne ho presi proprio due) e magari implementare in modo semplice G-Code? Grazie in anticipo 😉
ciao scusa sono sempre io ho provato questo steck avendo una motor shield che usa per il mio motore passo passo i pin pwa = 3 dira=2 pwb=9 dirb=8 e fa 200 step per giro… così ho scritto:
#include
Stepper myStepper(200,2,3,8,9);
void setup() {
myStepper.setSpeed(10);
}
void loop() {
myStepper.step(200);
delay(1000);
myStepper.step(-200);
delay(1000);
}
ma il motore non gira ma traballa come se sbagliasse le fasi
ciao Fabio
prova a ridurre il numero di passi per giro…
ciao luca, ho aggiunto al progetto anche il Wii nunchuck (il joystick), però ho bisogno di aiuto con il codice, mi daresti una mano??grazie
Il mio, identico a questo, funziona con:
Stepper myStepper(2048,1,3,2,12);
Dimenticavo, collegato come da schema. Non so come sia possibile che il motore funzioni bene nonostante NON abbia collegato il pin 1,3,2 e 12 ma, come da articolo, abbia collegato il 2,3,4,5!
Come velocità:
myStepper.setSpeed(9);
Davvero un bell’articolo. Quali sono le applicazioni per un motore stepper? Si potrebbe usare per far ruotare gli annunci su un piccolo tabellone pubblicitario?
Grazie! Normalmente i motori stepper si utilizzano dove è necessaria precisione di movimento (CNC…) ma naturalmente possono essere impiegati ogni qualvolta serva “muovere” qualcosa.
Nel lontano 12/12/2012 hai scritto:
prova a sostituire:
Stepper myStepper(2048,2,3,4,5);
con:
Stepper myStepper(2048,2,4,3,5);
ed io oggi ho risolto.
Grazie
molto bene! 😉
Buonasera, innanzitutto complimenti per l’articolo, ho provato e funziona perfettamente (con la modifica 2,4,3,5). Volevo solo un chiarimento, dal data sheet del motore lo stride angle è di 5,625° che grazie al riduttore passa a 0,088° circa, quindi per fare un giro dovrebbe impiegare 360/0.088=4096 passi però invece è giusto 2048 perchè con 4096 mi fa 2 giri..mi spieghi il tuo calcolo? Dove sbaglio? Grazie in anticipo!
Ciao Fabrizio, i tuoi calcoli sono giusti in base al datasheet, purtroppo come altri utenti sul Forum Arduino hanno scoperto, quei motori arrivano con diversi motoriduttori… il mio (e quindi anche il tuo) in realtà paiono essere /32 e non /64 come dichiarato.