Stepper kit per Arduino

luca 01/12/2012 22

Alla ricerca di una soluzione economica per dotare Arduino di un motore, ho trovato in vendita un kit composto da un motore passo-passo (stepper) unipolare e dalla relativa scheda di controllo.

Ho acquistato il kit da Hobby Components, ma kit simili sono disponibili su vari negozi online e su eBay. Il motore è siglato 28BYJ-48 (qui il suo datasheet), mentre la scheda di controllo si basa sull’integrato ULN2003, ricalcando lo schema presente sul sito di Arduino, con la sola aggiunta di 4 led per indicare la fase.

Il collegamento ad Arduino è molto semplice: sono necessari 4 pin digitali (nel mio esempio ho scelto 2-3-4-5) e l’alimentazione a 5V.

sebbene sia possibile alimentare il motore usando l’uscita a 5V di Arduino, è consigliata una fonte di alimentazione esterna

Per comandare il motore, possiamo utilizzare la libreria Stepper, indicando il numero di steps (passi) necessari per un giro completo (per il nostro motore 2048) e i pin che abbiamo utilizzato:

Stepper myStepper(2048,2,3,4,5);

Con il metodo setSpeed() possiamo decidere la velocità (= giri al minuto), mentre con step() muoviamo il motore di n passi (con n negativo il motore ruoterà in senso opposto):

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

Ecco un filmato che mostra lo sketch in azione:

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 »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione 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