Stepper kit for Arduino

luca 01/12/2012 22

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:

22 Comments »

  1. Enrico 10/12/2012 at 09:49 - Reply

    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 ?

    • luca 10/12/2012 at 10:40 - Reply

      ciao Enrico,

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

  2. Enrico 12/12/2012 at 01:12 - Reply

    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

    • luca 12/12/2012 at 08:53 - Reply

      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à

  3. doc 29/06/2013 at 11:32 - Reply

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

    • luca 01/07/2013 at 21:13 - Reply

      ciao

      è quella inclusa in Arduino, non devi scaricare nulla

  4. Giacomo 11/07/2013 at 12:41 - Reply

    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

    • luca 11/07/2013 at 12:59 - Reply

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

  5. Giacomo 11/07/2013 at 13:07 - Reply

    No.. niente da fare, stesso risultato :(

  6. Luigi 17/07/2013 at 08:40 - Reply

    myStepper.setSpeed(10);

    Il massimo valore inseribile è 7!

  7. Luigi 17/07/2013 at 08:46 - Reply

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

    • luca 17/07/2013 at 18:52 - Reply

      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?

  8. Vito 02/08/2013 at 15:20 - Reply

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

  9. Fabio 16/06/2014 at 16:47 - Reply

    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

    • luca 17/06/2014 at 09:54 - Reply

      ciao Fabio

      prova a ridurre il numero di passi per giro…

  10. Florin 14/06/2015 at 11:09 - Reply

    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

  11. Gian Marco 19/06/2015 at 14:16 - Reply

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

    • Gian Marco 19/06/2015 at 14:19 - Reply

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

  12. stepper 12/01/2016 at 15:57 - Reply

    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?

    • luca 12/01/2016 at 20:47 - Reply

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

  13. Claudio Carletta 23/06/2017 at 22:21 - Reply

    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

    • luca 30/06/2017 at 10:12 - Reply

      molto bene! ;)

Leave A Response »

This website uses cookies to ensure you get the best experience on our website maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi