Motori passo-passo, pilotarli con Arduino – quarta parte

Ed eccoci giunti al primo anello di congiunzione tra mie due passioni, elettronica ed informatica, scriviamo il codice per pilotare i motori passo-passo unipolari.

Non mi dilungherò sull’uso di Arduino e del suo software di programmazione, per queste conoscenze puoi fare riferimento al sito ufficiale ed ai numerosi  tutorial, guide ed esempi su come iniziare con questo favoloso strumento.

Iniziamo subito con il primo esempio di codice preso direttamente dal sito arduino nella sezione tutorial:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* Stepper Copal
 * -------------
 *
 * Program to drive a stepper motor coming from a 5'25 disk drive
 * according to the documentation I found, this stepper: "[...] motor
 * made by Copal Electronics, with 1.8 degrees per step and 96 ohms
 * per winding, with center taps brought out to separate leads [...]"
 * [http://www.cs.uiowa.edu/~jones/step/example.html]
 *
 * It is a unipolar stepper motor with 5 wires:
 *
 * - red: power connector, I have it at 5V and works fine
 * - orange and black: coil 1
 * - brown and yellow: coil 2
 *
 * (cleft) 2005 DojoDave for K3
 * http://www.0j0.org | http://arduino.berlios.de
 *
 * @author: David Cuartielles
 * @date: 20 Oct. 2005
 */
 
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 500;
 
void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}
 
void loop() {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
}

Grazie a questo esempio possiamo far compiere al nostro motore i primi passi, anzi in questo caso i primi giri. Il codice è molto semplice, se hai già dimestichezza con la sintassi Arduino:

le linee 23-26 impostano la corrispondenza tra la fase del motore e il pin a cui è collegata su Arduino;
la linea 27 imposta il ritardo di rotazione, in millisecondi, tra un passo e quello successivo;
le linee 29-34 settano i parametri iniziali del programma, nel caso specifico imposta i pin di arduino in modalità OUTPUT per l’invio dei segnali;
la linea 36 definisce il loop che il programma eseguirà continuamente una volta avviato;
le linee 37-40 indicherano ad arduino di inviare un segnale alto ( HIGH ) sul pin 8, quest’ultimo collegato all’ULN2003A, collegherà la fase corrispondente facendo avanzare l’asse del motore, le stesse impostano come segnale basso ( LOW ) i pin dal 9 al 11, mantre la linea 40 indica di attendere il tempo di ritardo impostato ( 5oo millisecondi ) prima di procedere ad eseguire le istruzioni successive.
le linee che seguono 42-46, 47-51 e 52-56 impostano a livello alto in successione i pin 9,10 e 11 creando l’effetto rotazione ed attendendo per ogni passo del motore un tempo di 500 millisecondi prima di procedere oltre.

Essendo le linee dalla 36 alla 57 inserite in una speciale funzione detta “loop” di arduino il risultato è un ciclo continuo dell’alberino del motore.

Nel prossimo articolo avalizzeremo un codice più complesso con cui pilotare 2 motori, nell’attesa ti invito a sperimentare cosa accade se modifichi il “delayTime” da 500 ad un valore inferiore o superiore, buona sperimentazione.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/informatica/motori-passo-passo-pilotarli-con-arduino-quarta-parte.html

45 commenti

Vai al modulo dei commenti

    • Roberto il 28 Ottobre 2011 alle 08:24
    • Rispondi

    Ottimo Mauro!
    Funziona perfettamente! Il mio però l’ho fatto con un solo motore, e un piccolo circuitino collegato al comando remoto della mia reflex (intervaluino). Praticamente lo stepper è montato su un binario, serve per far muovere molto lentamente una fotocamera, ad ogni piccolo movimento, c’è uno “stop” e uno scatto fotografico, e il ciclo va avanti così. Ora vorrei aggiungere il secondo motore passo passo per far muovere la fotocamera anche in senso rotatorio, ovviamente i movimenti dei 2 motori devono essere gli stessi, quindi entrambi si muovono e si fermano nello stesso momento per dare la possibilità di intervenire con l’ intervaluino per fare lo scatto fotografico.
    Ecco il mio sketch con un solo motore e il circuito intervaluino:
    int shutter_on = 200; //tempo di pressione per attivare la cam, da settare intorno i 100 e 300
    int shutter_off = 1500; // tempo di attesa prima di attivare il motorino

    int wakeup = 300; //time to activate wakeup (focus)
    int wakewait =200; //time between wake and shutter

    int outpin = 13; //uscita per lo scatto
    int wakepin = 12; //uscita per la messa a fuoco

    // init motorino
    int motorPin1 =8;
    int motorPin2 =9;
    int motorPin3 =10;
    int motorPin4 =11;
    int delayTime = 500;

    void setup() {
    // init dei pin per lo scatto
    pinMode(outpin, OUTPUT); //outpin gives output
    pinMode(wakepin, OUTPUT); //wakepin gives output

    // tempistiche per lo scatto, modificare in base alle esigenze
    shutter_on = 200;

    // init dei pin per il motorino
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);

    }

    /////////// Loop ////////////

    void loop(){

    digitalWrite(wakepin, HIGH); //turn wakeup/focus on
    delay(wakeup); //keep focus
    digitalWrite(wakepin, LOW); //turn wakeup off
    delay(wakewait); //wait
    digitalWrite(outpin, HIGH); //press the shutter
    delay(shutter_on); //wait the shutter release time
    digitalWrite(outpin, LOW); //release shutter
    delay(shutter_off); //wait for next round

    rotate3();
    delay(1000); // qui metti in millisendi quanto vuoi attendere prima di scattare
    }

    void rotate3(){
    // in base al numero delle chiamate il motorino farà più o meno scatti
    rotate();

    }

    void rotate(){
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    }

    Volendo aggiungere adesso il secondo motore, secondo te cosa dovrei modificare?

    1. Ciao Roberto,
      se i due motori devono muoversi all’unisono, ossia ad ogni step del primo deve corrispondere l’avanzamento di uno step del secondo, io procederei a collegare un secondo ULN2003A sui pin 4,5,6,7 di Arduino ed aggiungerei le seguenti linee:
      // init motorino 2
      int motor2Pin1 =4;
      int motor2Pin2 =5;
      int motor2Pin3 =6;
      int motor2Pin4 =7;

      ed modificherei la rotate() in questo modo:

      void rotate(){
      digitalWrite(motorPin1, HIGH);
      digitalWrite(motorPin2, LOW);
      digitalWrite(motorPin3, LOW);
      digitalWrite(motorPin4, LOW);

      digitalWrite(motor2Pin1, HIGH);
      digitalWrite(motor2Pin2, LOW);
      digitalWrite(motor2Pin3, LOW);
      digitalWrite(motor2Pin4, LOW);

      delay(delayTime);

      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
      digitalWrite(motorPin3, LOW);
      digitalWrite(motorPin4, LOW);

      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, HIGH);
      digitalWrite(motor2Pin3, LOW);
      digitalWrite(motor2Pin4, LOW);

      delay(delayTime);

      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      digitalWrite(motorPin3, HIGH);
      digitalWrite(motorPin4, LOW);

      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, LOW);
      digitalWrite(motor2Pin3, HIGH);
      digitalWrite(motor2Pin4, LOW);

      delay(delayTime);

      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      digitalWrite(motorPin3, LOW);
      digitalWrite(motorPin4, HIGH);

      digitalWrite(motor2Pin1, LOW);
      digitalWrite(motor2Pin2, LOW);
      digitalWrite(motor2Pin3, LOW);
      digitalWrite(motor2Pin4, HIGH);

      delay(delayTime);
      }

      Questa è la modifica più semplice che puoi esegure per soddisfare la tua esigenza. Ci sono altre azioni che puoi eseguire, magari a progetto concluso se vorrai condividerlo sul blog potrei aiutarti a scrivere del codice con una differente tecnica di programmazone che sto sperimentando con Arduino.

      Buon lavoro

    • Nichole il 21 Agosto 2012 alle 08:02
    • Rispondi

    I fеel this is οne of thе such а lot significant infо for me.

    And і am satisfieԁ гeadіng
    youг article. Howevеr ωanna commentary оn
    few basic issuеs, Thе wеb site
    stуlе is grеat, thе articles іs aсtuallу nice : D.
    Eхсellent pгocess, cheers

    • Mario il 29 Ottobre 2012 alle 16:51
    • Rispondi

    Salve Mauro, intanto ti faccio tantissimi complimenti perchè sei molto esauriente e preciso.
    Sono completamente digiuno di Arduino (che mi sto premurando di comprare) ma ho un’infarinatura molto generica di programmazione. Pensando di costruirmi un plotter da taglio o al limite per il disegno, mi vengono 2 domande:

    I) il mio utensile si dovrà muovere a velocità diverse contemporaneamente sugli assi x ed y del piano di lavoro. Devo avanzare sulla x per ricavare la y di volta in volta (o viceversa) indentando un ciclo FOR dentro un altro, o posso gestire diversi delay contemporaneamente?

    II) è possibile collegare 2 stepper in parallelo su un singolo driver perchè si comportino nello modo?

    Grazie mille e ciao,
    Mario

    1. Ciao Mario,
      grazie per i complimenti.
      Rispondo alle tue domande:

      I) il delay in Arduino è una pausa di esecuzione dello sketch, ossia tutto si ferma per i millisecondi che indichi, in un sistema a plotter penso che sia controproducente; inoltre se annidi due cicli for ottieni un passettino per X ed uno per Y, la cosa migliore è lasciare che sia il loop() a gestire il ciclo e i movimenti.

      II) è solo questione di potenze e di meccanica, in teoria se tutto fosse perfetto ( sessi motori, stessa meccanica e stessi attriti ) potresti dimensionare i driver in modo da collegare un driver per due motori, siccome i driver costano meno dei motori io suggerisco un driver per motore e semmai colleghi entrambi ai medesimi pin, anche se usando pin differenti ottieni più controllo.

      Da quello che mi scrivi: “Sono completamente digiuno di Arduino (che mi sto premurando di comprare)” ti consiglio di leggere un po di articoli nella sezione “corso arduino” del blog: https://www.mauroalfieri.it/corso-arduino

      Mauro

        • Mario il 30 Ottobre 2012 alle 15:42
        • Rispondi

        Per ora aspetto il corriere SDA, sembra che il mio kit sia in viaggio quindi non posso testare direttamente sull’hardware. Nel frattempo ti chiedo ancora:
        sul tuo corso (o forse direttamente sul sito arduino, non ricordo) ho letto che negli sketch si possono includere le stesse librerie del C++. Partendo da un file di testo in GCode vorrei analizzare riga per riga, comando per comando e muovere il mandrino, ma qua la libreria fstream non è presente. Specifico che a questa pagina sono arrivato da una ‘di arduino’.
        C’è altro modi per leggere da file di testo?
        Grazie ancora,
        Mario.

        1. Ciao Mario,
          se non ricordo male esistono già delle librerie per leggere il GCODE e far eseguire i passi ad Arduino.
          Dovrebbero essere quelle utilizzate dal progetto rep-rap.

          Prova a cercare in Google

          Mauro

            • Mario il 30 Ottobre 2012 alle 23:12

            Bingo!!
            Grazie Mauro, sei stato utilissimo.
            Ancora tanti complimenti e ciao,
            Mario.

    • max1989 il 27 Gennaio 2013 alle 15:31
    • Rispondi

    salve
    ho comprato un kit 4 assi cnc senza le istruzioni.problema che non riesco a collegare i motori alla scheda di controllo.il motore ha 4 cavi e non so dove vanno collegati.ho gia trovato le 2 coppie dei cavi.mi potete aiutare?

    1. Ciao Max,
      sul blog ci sono molti articoli dedicati ai motori passo passo, su come riconoscerli e come utilizzarli.
      Leggi il corso arduino, gratuito, on-line e scoprirai che i tuoi motori sono dei bipolari e come riconoscere le coppie di ciascuna fase.

      Poi collegarle al controller non dovrebbe essere difficile.

      Mauro

    • Andrea Guzzini il 6 Agosto 2013 alle 16:14
    • Rispondi

    Buonasera sig. Mauro!
    Innanzitutto complimenti per il suo sito e per i suoi ottimi tutorial!
    Premetto che ho conoscenze di informatica e di elettronica “scolastiche”, cioè PRESSOCHE’ NULLE, ma ho trovato i suoi articoli molto chiari ed esaurienti!

    In particolare, mi sono imbattuto questo suo tutorial mentre cercavo in rete informazioni su come comandare un motore passo passo da applicare ad un “tavoletta equatoriale motorizzata”, cioè un aggeggio di questo tipo:
    http://davetrott.com/inventions/double-arm-barn-door-drive/

    In pratica il motore comanda semplicemente una vite facendola ruotare ad 1 rpm, in modo che una tavoletta su cui è montata una fotocamera si apra in corrispondenza della cerniera con un velocità angolare pari alla rotazione terrestre. la macchina fotografica riesce quindi a fare foto al cielo stellato a lunga esposizione (dell’ordine anche della decina di minuti) senza risentire del “mosso” dovuto alla rotazione “apparente ” delle stelle (ovviamente ciò è vero se l’asse della cerniera è coincidente con l’asse di rotazione terrestre).

    ciò premesso, il suo tutorial è già sufficiente a consentirmi di pilotare il motore alla velocità desiderata con moto “in apertura” della “tavoletta…

    tuttavia, vorrei aggiungere due semplici interruttori “a pressione” (deviatori?) che consentano di individuare il fine corsa in un senso e nell’altro e alternare il movimento, ciclicamente, tra
    – avanzamento a 1 rpm
    – riavvolgimento a 60 rpm

    immagino che questo possa essere fatto con Arduino collegando gli interruttori in modo da passare da una parte dello “sketch” all’altra.

    Considerando le premesse (pressoché zero conoscenze di elettronica e di informatica),
    come mi consigli di affrontare il problema?
    quali sezioni dei tutorial di Arduino dovrei consultare?
    di quali componenti hardware ho bisogno e come fare i collegamenti?

    Grazie della tua pazienza nel leggere queste mie domande… spero di essere stato chiaro e di non abusare della tua pazienza e delle tue competenze!

    1. Ciao Andrea,
      il tuo progetto è molto interessante e mi piacerebbe pubblicarlo una volta ultimato se ti va.
      In merito agli interruttori di finecorsa puoi leggere uno degli articoli dedicati ai pulsanti in cui trovi sia come debbano essere collegati ad arduino sia come leggere il loro input e di conseguenza adattare lo sketch per fargli fare ciò che desideri.

      Al posto di microswitch puoi optare anche per dei finecorsa IR, ne ho provato uno molto interesante da pochi euro che rende il progetto ancora più interessante e senza complicarne il codice.

      Mauro

        • Andrea Guzzini il 6 Agosto 2013 alle 18:46
        • Rispondi

        Grazie Mauro,
        per quello che riguarda i pulsanti intendi questi tutorial?

        https://www.mauroalfieri.it/elettronica/motori-passo-passo-bipolari-comandati-da-interruttori.html

        comincerò sicuramente da qui… o devo controllare dell’altro materiale?
        in merito al tipo di fine corsa, al momento opterei per un pulsante meccanico, che venga azionato automaticamente dal moto della tavoletta ma che possa anche essere azionato rapidamente a mano per riposizionare la tavoletta all’occorrenza… l’unica cosa è che devono essere posizionati al di fuori della breadboard… ma credo che questo sia solo un problema di collegamento di fili… vero?

        Ma sono in fase di progetto “embrionale” e sto raccogliendo materiale per rendermi conto della fattibilità.
        Il mio intento sarebbe di realizzare uno strumento preciso ma di costruzione la più semplice possibile. Che sia quindi replicabile anche da chi come me non ha conoscenze di elettronica e informatica, ma solo una certa capacità “meccanica” e molta buona volontà e pazienza.

        La motorizzazione per ora è la parte più ostica e devo studiarci a fondo…
        Mi riservo di ricontattarti in futuro, se me lo permetti… 😉

        Una volta ultimato, nessun problema nel pubblicare il progetto (tra l’altro mancano esempi dettagliati in lingua italiana mentre si trova molto in lingua inglese), anzi ne sarei felice…

        Ma credo ci vorrà un po’ di tempo…

        1. Ciao Andrea,
          l’articolo che citi è un ottimo inizio.
          Puoi leggere anche qualche articolo sul “Dolly Photo” in cui ho introdotto i finecorsa e come utilizzarli.

          Aspetto le tue news sul progetto.

          Mauro

    • federico il 20 Agosto 2013 alle 11:43
    • Rispondi

    ciao mauro complimenti x il sito.
    Ho da pilotare due motori passo passo da 200 step ciascuno e un servo futaba S3003.
    Il primo movimento e la rotazione del servo di 180 gradi in senso antiorario,il secondo movimento e la rotazione del primo motore passo passo che deve fare un giro completo in senso orario,pero compiuti 125 passi deve partire il secondo motore passo passo il quale deve fare 100 passi in senso antiorario non occorre che finiscono nello stesso tempo ma l’importante è che compiuti 125 passi del primo parta il secondo e al termine dei passi mantenghino la posizione ottenuta per un secondo.
    Non so trovare lo sketch adatto.
    se mi puoi consigliare te grazie in anticipo!

    1. Ciao Federico,
      il progetto non é complesso ma di certo specifico.
      Lo sketch puoi scrivertelo partendo dagli esempi presenti nel blog, ti consiglio di utilizzare dei driver tipo easy driver per i motori asso-passo in modo da semplificanti la vita.

      Controlla l’assorbimento dei motori prima di scegliere il driver da utilizzare.
      Il servo ti consiglio di alimentarlo con una tensione i 6v esterna ad arduino per non incorrere in vibrazioni e falsi movimenti.

      Mauro

    • federico il 23 Agosto 2013 alle 20:01
    • Rispondi

    Grazie ho trovato lo sketch nel tuo blog in una delle tue risposte.
    Ti devo fare altre due domandine perche i tuoiconsigli mi hanno portato un grande aiuto in quello che sto facendo.
    I draiver ho usato l298n ei motori sono passopasso a12v e 2, 5 amper.
    Laprima domanda e dopo che un motore p p ha finito di girare puo rimanere accesa lultima bobina per far mantenere la posizione al motore mentre il secondo motore p p fa il suo giro o si brucia qualcosa?
    La seconda domanda quanti amper deve avere l alimentatore a 6 v per il servo, perche ho riscontrato i falsi movimenti che mi hai detto.
    Grazie in anticipo i tuoi consigli sono molto utili

    1. Ciao Federico,
      i motori assorbono 2,5A per fase od in totale?
      Il driver che siti utilizzando eroga 2A di picco per motore quindi valuta la possibilità di usare qualcosa i più adeguato.

      Puoi lasciare l’ultima fase in tensione, tuttavia considera che un motore passo-passo non é progettato per resistere a carichi meccanici sull’alberino a lungo, questo comporta c’è se qualcosa di forte sposta l’alberino potresti trovarti in una condizione di sforzo eccessivo.

      Per il servo puoi guardare sul sito del produttore le caratteristiche elettriche e dedurre l’alimentatore da acquistare.

      Una curiosità: a che progetto stai lavorando?

      Mauro

    • federico il 24 Agosto 2013 alle 15:59
    • Rispondi

    grazie mille mauro per i tuoi consigli sei sempre molto preciso nelle tue risposte. si i miei motori passo passo assorbono 2,5amper per fase che driver mi consigli?. ti rispondo alla tua curiosità, sto costruendo un macchinario per riuscire a fare il mio lavoro in automatico per ridurre le mie ore di lavoro e con i tuoi consigli sul blog ci sto riuscendo. è un piacere leggere i tuoi lavori li ho usati e sono andati a segno.

    1. Ciao Fede,
      prova a leggere l’articolo sulla BigEasyDriver se non ricordo male supporta alimentazioni fino a 3A.
      Che lavoro svolgi?

      Mauro

    • federico il 27 Agosto 2013 alle 16:58
    • Rispondi

    per contratto non posso dire proprio che lavoro è ma ti dico la macchina è una fattispece di macchina da cucire sto lavorando con altri non da solo. però appena ho piu tempo mi piacerebbe pubblicare nel tuo blog un altro progetto del tutto mio. se anche a te non dispiace. ho solo bisogno di tempo perche ho un periodo molto idaffarato.

    1. Ciao Fede,
      deve essere un’azienda importante e spero tu stia lavorando ad un progetto che cambi o migliori la vita di qualcuno o di tutti 🙂

      Per il tuo progetto sono sempre a disposizione quando vorrai pubblicarlo.

      Mauro

    • federico il 28 Agosto 2013 alle 12:20
    • Rispondi

    grazie mille mauro la mia situazione si migliorera se funziona. appena sono piu libero sara un piacere pubblicare un progetto nel tuo blog.

    ciao federico

    • Dylan il 16 Settembre 2013 alle 17:05
    • Rispondi

    Ciao Mauro, innanzitutto grazie mille per i tuoi tutorial, sono sempre esaustivi! Purtroppo ho un problema con i miei due step motor unipolari….Ho seguito i tuoi tutorial alla perfezione, partendo dalla ricerca delle fasi fino all’implementazione del codice arduino…purtroppo però entrambi i miei due motori (recuperati da una stampante Epson ad aghi) fanno uno scatto avanti e uno indietro…Ho provato anche a invertire le fasi ma niente…hai qualche consiglio? Grazie

    1. Ciao Dylan,
      dalla tua descrizione sembra che tu abbia individuato l’errata sequenza delle fasi.
      I motori unipolari sono più semplici perché hanno almeno un filo comune ( quelli a 5 fili ) o due comuni ( quelli a 6 fili ) individuati questi non ti resta che provare la sequenza posizionando il polo negativo sul comune e il positivo una volta su un terminale della fase ed una seconda volta sull’altro.

      Mauro

  1. Ciao Mauro, sono un neofita dell’arduino…ti volevo chiedere una cosa: in fase di caricamento del programma su arduino, il compilatore mi restituisce questo errore:

    avrdude: stk500_getsync(): not in sync: resp=0x00

    Cosa vuol dire?

    1. Ciao Carlo,
      ti consiglio di leggere gli articoli in cui parlo dei possibili errori che l’IDE ti restituisce.
      In particolare questo indica che l’IDE non trova arduino.

      Controlla di aver selezionato la porta corretta e che il computer abbia caricato i driver per comunicare con Arduino.

    • Luca Vanin il 26 Marzo 2014 alle 23:46
    • Rispondi

    Ciao mauro,
    Sono uno studente dell’itis elettronica, sono arrivato in 5ª e come progetto per l’esame voglio fare un distributore di lattine.
    Il progetto prevede 4 tipi di bibita, la lattina viene spinta da una spirale collegata al motore passo passo.. Quindi 4 motori..
    Ogni motore una fila di lattine(solo 2 lattine per fila ho scelto)
    La selezione della bevanda viene fatta tramite un tastierino collegato alla scheda arduino quando riceve il codice dal tastierino corrispondente la bibita, il motore corrispondente deve fare un giro e poi fermarsi..
    Ho pensato che potrei utilizzare un “case”.
    Ho a disposizione una scheda arduino mega 2560 (54 ingressi/uscite).
    Spero di essere stato chiaro.
    Ti chiedevo se mi puoi dare qualche consiglio.
    Grazie mille in anticipo..
    Luca

    1. Ciao Luca,
      bel progetto.
      Con i motori passo-passo io ti consiglio di usare dei driver tipo i pololu o l’easydriver che rendono il controllo più semplice.
      Il case può essere un’ottima soluzione se hai solo 4 motori e 4 scelte, se fossero di più o se tu volessi rendere il codice più interessante potresti usare un array con 4 codici e quando rilevi un codice fai un ciclo for sull’array e verifichi a quale corrisponde.

        • luca il 22 Aprile 2014 alle 18:02
        • Rispondi

        ciao mauro…
        mi sono arrivati i motori e la scheda arduino mega 2560.
        i motori hanno le seguenti caratteristiche:
        Rated Voltage: 6V
        Rated Current: 0.8A

        quali integrato posso usare per pilotare i motori? ho pensato all’uln2003

        1. Ciao Luca,
          sono bipolari o unipolari?
          la corrente richiesta è limitata ( 0,8A ) per cui puoi usare l’ULN2003 se unipolari e l’SN754410NE se sono dei motori passo-passo bipolari.
          Resta sempre l’opzione più semplice di usare un driver tipo EasyDriver o uno della Pololu.

    • nicola il 6 Dicembre 2014 alle 09:54
    • Rispondi

    Salve Mauro!
    ho provato a utilizzare questo sketch per pilotare un 28byj-48 con un ULN2003A.
    Il problema è che il motore vibra molto e ruota lentissimamente, praticamente a scatti minimi.

    Scrivendo invece uno sketck con switch/case invece dei delay, mi funziona perfettamente, ruotando con un movimento fluido.
    Premetto che non ho modificato la posizione dei pin o altro; solo lo sketch.

    Sapresti indicarmi il motivo?
    grazie mille

    1. Ciao Nicola,
      come hai sostituito il delay con uno switch/case, i due comandi eseguono operazioni completamente differenti.

    • Giuseppe il 19 Gennaio 2015 alle 09:35
    • Rispondi

    Salve Mauro, innanzitutto complimenti per il gran lavoro divulgativo, e chiedo scusa per le domande che forse ti sembreranno stupide….ma sono proprio all’inizio.
    Allora, in merito agli stepper avevo in mente di usare i driver della POLOLU A4988 ma mi sorgono alcuni dubbi.
    Io ho capito che attraverso il trimmer si possono regolare gli ampere erogati (che di solito si sta sotto all’80%) ma per quanto riguarda i volt vedo che il driver si alimenta tra gli 8 e i 35 volt.
    Domanda: se io ho un motore passo passo che presenta 6 volt per fase da una parte Arduino non basta e come fa il driver a erogarmi i volt giusti?

    Grazie e scusa ancora per il disturbo
    Giuseppe

    1. Ciao Giuseppe,
      la tua domanda è lecita ed hai compreso bene quanto riportato dalle specifiche del produttore.
      Controlla tra le FAQ del prodotto mi sembra che la problematica che hai colto sia oggetto della prima FAQ del produttore.

    • mauro il 13 Agosto 2015 alle 16:26
    • Rispondi

    Ciao mauro, con lo sketch che hai scritto tu il mio motorino non funziona. Quando lo tocco però sento che fa degli scatti tuttavia l’ albero motore non si muove. Io uso uno step motor 28BYJ-48 a 5V. Inoltre senza usare la breadboard uso un motor driver module che ho trovato nel kit di arduino. Ti chiedo gentilmente di aiutarmi. Grazie.

    1. Ciao Mauro,
      con le informazioni che mi hai fornito è complicato aiutarti, senza conoscere il driver ( sigla ) e come hai eseguito le connessioni non mi è possibile suggerirti nulla.
      Ti consiglio di leggere tutti i miei articoli sui motori passo-passo e di provare a comprendere bene che differenze ci siano tra i driver per motori passo passo e come usarli.

    • mauro il 14 Agosto 2015 alle 18:28
    • Rispondi

    Comunque anche usando la breadboard e collegando correttamente i cavi persiste lo stesso problema. Inoltre su internet su questo sito (http://www.danielealberti.it/2013/11/arduino-collegamento-motore-passo-passo.html?m=1) ho trovato uno sketch che fa funzionare il motore. Riesci a spiegarmi perchè? E se hai tempo/voglia riuscireti a spiegarmelo?Grazie mille. mauro:)

    1. Ciao Mauro,
      il perché devi chiederlo all’autore dello sketch .. lui sa bene che ragionamenti ha fatto.

    • Davide il 12 Settembre 2015 alle 18:42
    • Rispondi

    Buongiorno scusi il disturbo ma è un pó che sto seguendo le nozioni di Arduino sul suo sito.
    Riguardo ad un mio progetto vorrei chiederle se é possibile collegare 4 Motori passo passo con un doppio Motor sheild r3 su Arduino uno, o ci sono altri sistemi più immediati

    1. Ciao Davide,
      si esistono molte shield adatte al collegamento di 4 motori passo-passo ad arduino.
      Pensa ad esempio a tutto il mondo delle stampanti 3D o delle Cnc realizzate con arduino.
      Non saprei quale consigliarti, il panorama è ampio e ciascuna ha delle caratteristiche specifiche per un ambito o per l’altro, devi scegliere in base al progetto che hai intenzione di realizzare.

    • mauro il 1 Settembre 2019 alle 09:58
    • Rispondi

    ciao mauro, scusa il disturbo io sono appassionato di fermodellismo e vorrei autocostruire una piattaforma girevole nn so se hai presente ma con step motor28byj-48 pero nn volevo farlo fermare ad ogni posizione volevo farlo con i tasti del tipo schiaccio posizione 2 e va direttamente li 8 e va li e cosi via . possibile la cosa ?

    grazie Mauro

    1. Ciao Mauro,
      si è possibile farlo senza problemi, trovi anche qualche sketch già realizzato da me per ottenere un posizionamento.
      Dovrai certamente modificarlo per adattarlo al tuo progetto.
      Tuttavia penso che il problema maggiore sarà di tipo meccanico perché il motore passo-passo che hai scelto ha pochi passi/giro.

  2. Ciao Mauro,

    ti disturbo perchè ho provato a seguire il tuoi consigli su come pilotare un motore passo passo.
    Ti scrivo perchè ho un problema e non riesco ad uscirne, Attualmente ho configurato Arduino per utilizzare un motore NEMA 23 con un driver TB6600 per muovere una puleggia, se non attacco il motore alla puleggia, fa effettivamente quanto gli chiedo, se attacco la puleggia va e poi si ferma e poi riprende, come se non avesse la forza.
    a questo punto ho comprato un NEMA 34 con un driver DM860T e lo stesso programma non funziona, ho provato in altri 1000 modi senza riuscirci. tu riusciresti a darmi una dritta relativamente alla library che devo utilizzare con il Driver DM860T ?
    intanto grazie del tempo e spero di ricevere un tuo consiglio

    Davide Caggiano

    1. Buonasera Davide,
      in primo luogo ti sconsiglio di mettere il tuo numero di telefono nei commenti di un blog, solitamente è raccolto ed utilizzato per spam e non solo.
      In merito alla tua richiesta non conosco il driver DMT860T che mi indichi e da una ricerca in internet non ho trovato informazioni, sei certo del modello di driver?
      Il produttore o il venditore non rilasciano istruzioni di utilizzo ?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.