Collegare un piccolo motore passo passo ad Arduino

Qui troverete le istruzioni per collegare uno stepper ad Arduino. 
Il kit si trova facilmente su Ebay ed è formato da un motore stepper ed un circuito di controllo.
Il motore è siglato 28BYJ-48 mentre il driver è un circuito basato sull'uln2003 (li trovate su eBay a questo link).
Ecco un video che ci mostra la rotazione in entrambi i sensi.



Il collegamento è semplice, basta portare i 4 pin di controllo del circuito a 4 pin digitali di Arduino e 
collegare l'alimentazione al circuitino.





Lo schema mostra i 5 volt prelevati dall'Arduino, consiglio però di prelevarla esternamente (da un alimentatore o da una batteria)


Caricate ora questo sketch per vedere il motore muoversi come nel video.
Cambiando i vari parametri è possibile cambiare velocità e gradi di rotazione.

  1. #include <Stepper.h>
  2. #define STEPS  100  
  3. Stepper small_stepper(STEPS, 2, 4, 3, 5);
  4. int  Steps2Take;
  5. void setup()  
  6. {
  7. }
  8. void loop()  
  9. {
  10.   small_stepper.setSpeed(100);  
  11.   Steps2Take  =  2048;  
  12.   // Rotate CW For a complete rotation
  13.   // Change this number for change the degrees of the rotation
  14.   small_stepper.step(Steps2Take);
  15.   delay(2000);
  16.   small_stepper.setSpeed(100);  
  17.   // Change this for change the speed
  18.   Steps2Take  =  -2048;  // Rotate CCW
  19.   small_stepper.step(Steps2Take);
  20.   delay(2000);
  21. }

Spero vi torni utile, ciao! =)

Segui Daniele Alberti su Google+

Ciao!

33 commenti:

  1. Ciao Daniele, grazie per l'articolo, molto utile e interessante. Complimenti!
    Avrei una sola domanda. La velocità con cui ruota il motore passo passo nel video è la massima possibile? E poi sarebbe opportuno collegare Arduino ad un'alimentazione esterna?
    Grazie.
    Leonardo

    RispondiElimina
    Risposte
    1. Ciao, grazie per i complimenti!
      La velocità può essere incrementata ancora di poco, ma si perde molta coppia.
      Per l'alimentazione ho cercato un datasheet che dicesse l'assorbimento di questo motore, ma non l'ho trovato.
      Comunque se vuoi fare una prova collegalo pure come ho fatto io, se è per un circuito definitivo alimentarlo esternamente.
      Ciao!

      Elimina
  2. Ciao! Questo motore in termini di peso quanto può alzare?

    RispondiElimina
    Risposte
    1. Veramente poco, considera che costa 1 euro, quindi è quasi unicamente per scopi didattici, in ogni caso dipende dagli ingranaggi che gli colleghi..

      Elimina
    2. Dovrei alzare la cabina del mio ascensore in miniatura, peserà meno di 200 grammi ad occhio e croce... Gli ingranaggi adatti a questo motore dove gli posso trovare?

      Elimina
    3. Bella domanda.. È il problema che incontro anch'io quando ho a che fare coi motori.. Potresti cercare un tubo che si innesta nel rotore e poi gli fai avvolgere intorno un filo che tira su l'ascensore.. Oppure se conosci qualcuno con una stampante 3d te lo puoi costruire..

      Elimina
  3. Ciao Daniele, questo motorino con le dovute modifiche nel programma si potrebbe usare per una pedana girevole che ruoti di 5/9 gradi alla volta?
    grazie mille
    Bnedetta

    RispondiElimina
    Risposte
    1. Una pedana quadrata 20 per 20 cm di legno o plastica su cui poter appoggiare piccole sculture

      Elimina
    2. Si secondo me dovrebbe farcela, considera che è abbastanza lento, come nel video x intenderci.

      Elimina
    3. La velocità non è un problema basta che sei preciso nella rotazione di x gradi...
      Grazie mille, se riesce ti mando le foto, è il primo progetto dopo il corso nn so come verrà...

      Elimina
    4. Non dovresti avere problemi, fammi sapere comunque :)

      Elimina
  4. Ciao Daniele!! Complimenti per il tutorial. Mi chiamo Filippo e ho costruito un astro inseguitore per poter fotografare la via lattea, vorrei pilotarla con arduino uno + driver ULN2003. Ti volevo chiedere se il motore , con lo schema che hai postato gira anche al contrario, e dovendolo collegare ad una corona dentata, deve far girare la corona di 360° in un minuto. Il motore è di una stampante rottamata ma funziona perfettamente E' possibile? Ti ringrazio per l'aiuto, e buon anno.

    RispondiElimina
    Risposte
    1. Ciao e grazie per il complimento!
      Già nello sketch di esempio il motore gira in entrambi i sensi,
      Quel driver va bene per motori abbastanza piccoli, se vuoi andare sul sicuro ti consiglio di guardare anche questo:
      http://www.danielealberti.it/2014/08/collegare-un-motore-stepper-ad-arduino.html?m=0

      Elimina
  5. Scusa di elettronica e programmazione non so una cippa!! ciao!!

    RispondiElimina
  6. Ciao!! Il motore che ho intenzione di usare è già stato provato per guidare una tavoletta equatoriale e va bene solo che lo schema con cui era pilotato non andava in senso contrario e non si abbassava più di un certo valore il numero di giri.Ti volevo chiedere se si deve aggiungere altro allo schema che hai postato. Ciao!

    RispondiElimina
    Risposte
    1. Se è un motore passo passo con questo schema può girare in entrambi i sensi e andare lento quanto vuoi, aggiungo che se poi vuoi condividere il tuo progetto scrivimi che facciamo un bel post :)

      Elimina
    2. Ciao! Vorrei aggiungere delle foto per rendere l'idea così da condividere il progetto , comunque in rete si trovano tanti progetti del genere (non ho scoperto nulla basta andare su Google e digitare : barn door traker) ed escono un sacco di realizzazioni del genere.Se una persona si vuole dilettare a realizzare una tavoletta equatoriale da muovere manualmente, si può realizzare a costo di 5 euro anche meno.
      Ciao e grazie per l'aiuto poi mi dirai come fare per diminuire la velocità di rotazione, grazie ancora!!

      Elimina
    3. Si ma magari in rete manca qualche parte o non sono precisi, del resto se tu stai chiedendo a me vuol dire che non hai trovato altrove, quindi se fai un bel progetto fai qualche foto e scrivimi ! :)

      Elimina
    4. Scusa per sbaglio credo di aver cancellato il tuo commento, comunque se ti va puoi andare nella sezione "chiedi e rispondi" e creare una nuova domanda li, così riuscirò ad aiutarti in modo più ordinato! :)

      Elimina
  7. ciao daniele,
    ho questo motorino e vorrei poterlo controllarlo tramite 2 pulsanti in modo da poterlo far girare in senso antiorario con uno e orario con l'altro, come dovrei modificare lo sketch??
    grazie!!!

    RispondiElimina
    Risposte
    1. Ciao, devi prima leggere lo stato dei pulsanti, poi con un ciclo "if" se lo stato del pulsante 1 è premuto allora fai girare il motore in senso orario. Stessa cosa per l'altro pulsante.

      Elimina
    2. Ciao, devi prima leggere lo stato dei pulsanti, poi con un ciclo "if" se lo stato del pulsante 1 è premuto allora fai girare il motore in senso orario. Stessa cosa per l'altro pulsante.

      Elimina
    3. sono riuscito a montare i pulsanti e a far girare i motorini quando premo i 2 pulsanti, il problema sta nel fatto che una volta che premo il pulsante, il motorino gira anche se lo lascio, mentre a me interessa che quando lascio il pulsante il motorino deve fermarsi.
      ecco lo sketch:

      #include
      #define STEPS 100
      #define ORARIO 6
      #define ANTIOR 7
      Stepper small_stepper(STEPS, 2, 4, 3, 5);
      int Steps2Take;
      int ora = 0;
      int ant = 0;
      int delayTime = 50;
      int pinPot = 0;
      void setup()
      {
      pinMode(ORARIO, INPUT);
      pinMode(ANTIOR, INPUT);
      pinMode(pinPot, INPUT);
      }

      void loop()
      {
      ora = digitalRead(ORARIO);
      ant = digitalRead(ANTIOR);
      int readPot = analogRead( pinPot );
      int delayTime = map(readPot,0,1024,10,1000);
      if (ora == HIGH) {
      small_stepper.setSpeed(200);
      Steps2Take = 2048;
      // Rotate CW For a complete rotation
      // Change this number for change the degrees of the rotation
      small_stepper.step(Steps2Take);
      }
      if (ant == HIGH) {
      small_stepper.setSpeed(200);
      // Change this for change the speed
      Steps2Take = -2048; // Rotate CCW
      small_stepper.step(Steps2Take);
      }
      delay(delayTime);
      }

      Elimina
    4. il problema sta nell'if di entrambi i pulsanti, precisamente:
      Steps2Take = 2048;
      perchè esegue una rotazione stabilita, invece il motorino deve girare solo per tutto il tempo in cui il pulsante (orario o antiorario) è premuto.
      mi potresti aiutare??

      Elimina
    5. Prova a ridurre il valore di Steps2Take,
      Metti un valore basso ad esempio 1.

      Elimina
  8. ok ci provo e ti farò sapere!
    grazie!

    RispondiElimina
  9. Ciao daniele io ho usato questo motorino comprato su amazon per pochi euro e lo ho comandato tramite Bluetooth con un modulino hc-06 e un applicazione Android scritta da me ti può interessare per scrivere un articolo?fammi sapere

    RispondiElimina
    Risposte
    1. Ciao,
      certo che mi interessa, scrivimi pure un tuo indirizzo email che ti contatto in privato, ciao!

      Elimina
  10. Ciao ragazzi essendo che per la prima volta mi sto commentando nel elettronica e chiedo se sarebbe possibile aver un disegno del motore passo passo come collegarli con tutta la spiegazione grazie la mia email è robirossano@gmail.com

    RispondiElimina
  11. scusa posso chiederti se si possono collegare 3 motori su arduino uno il motore e 28BJY-48 Stepper grazie in anticipo

    RispondiElimina
  12. Questo commento è stato eliminato dall'autore.

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post