Stepper kit for Arduino

by luca
24 comments

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.

even if you can power the motor using the 5V output of Arduino, it’s strongly recommended to use an external 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:

[youtube id=”kyrvU2DV5qA” width=”600″ height=”350″]

Related Posts

24 comments

Enrico Monday December 10th, 2012 - 09:49 AM

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 ?

Reply
luca Monday December 10th, 2012 - 10:40 AM

ciao Enrico,

strano… i led come sono? tutti accesi? a me è capitato quando ho impostato una velocità troppo alta

Reply
Enrico Wednesday December 12th, 2012 - 01:12 AM

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

Reply
luca Wednesday December 12th, 2012 - 08:53 AM

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à

Reply
doc Saturday June 29th, 2013 - 11:32 AM

Ciao,
mi potresti dare un link per recuperare la libreria Stepper corretta?

Reply
luca Monday July 1st, 2013 - 09:13 PM

ciao

è quella inclusa in Arduino, non devi scaricare nulla

Reply
Giacomo Thursday July 11th, 2013 - 12:41 PM

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

Reply
luca Thursday July 11th, 2013 - 12:59 PM

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);

Reply
Giacomo Thursday July 11th, 2013 - 01:07 PM

No.. niente da fare, stesso risultato 🙁

Reply
Luigi Wednesday July 17th, 2013 - 08:40 AM

myStepper.setSpeed(10);

Il massimo valore inseribile è 7!

Reply
Luigi Wednesday July 17th, 2013 - 08:46 AM

…con 5V
2048/64=32/4 step=8 (0-7)
🙂

Reply
luca Wednesday July 17th, 2013 - 06:52 PM

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?

Reply
Vito Friday August 2nd, 2013 - 03:20 PM

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 😉

Reply
Fabio Monday June 16th, 2014 - 04:47 PM

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

Reply
luca Tuesday June 17th, 2014 - 09:54 AM

ciao Fabio

prova a ridurre il numero di passi per giro…

Reply
Florin Sunday June 14th, 2015 - 11:09 AM

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

Reply
Gian Marco Friday June 19th, 2015 - 02:16 PM

Il mio, identico a questo, funziona con:
Stepper myStepper(2048,1,3,2,12);

Reply
Gian Marco Friday June 19th, 2015 - 02:19 PM

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);

Reply
stepper Tuesday January 12th, 2016 - 03:57 PM

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?

Reply
luca Tuesday January 12th, 2016 - 08:47 PM

Grazie! Normalmente i motori stepper si utilizzano dove è necessaria precisione di movimento (CNC…) ma naturalmente possono essere impiegati ogni qualvolta serva “muovere” qualcosa.

Reply
Claudio Carletta Friday June 23rd, 2017 - 10:21 PM

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

Reply
luca Friday June 30th, 2017 - 10:12 AM

molto bene! 😉

Reply
Fabrizio Tuesday February 20th, 2018 - 08:11 PM

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!

Reply
luca Monday February 26th, 2018 - 02:46 PM

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.

Reply

Leave a Reply to Enrico Cancel Reply

10 + 16 =