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.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/informatica/motori-passo-passo-pilotarli-con-arduino-quarta-parte.html

41 comments

Skip to comment form

    • Roberto on 28 Ott 2011 at 08:24
    • Reply

    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 on 21 Ago 2012 at 08:02
    • Reply

    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 on 29 Ott 2012 at 16:51
    • Reply

    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: http://www.mauroalfieri.it/corso-arduino

      Mauro

        • Mario on 30 Ott 2012 at 15:42
        • Reply

        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 on 30 Ott 2012 at 23:12

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

    • max1989 on 27 Gen 2013 at 15:31
    • Reply

    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 on 6 Ago 2013 at 16:14
    • Reply

    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 on 6 Ago 2013 at 18:46
        • Reply

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

        http://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 on 20 Ago 2013 at 11:43
    • Reply

    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 on 23 Ago 2013 at 20:01
    • Reply

    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 on 24 Ago 2013 at 15:59
    • Reply

    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 on 27 Ago 2013 at 16:58
    • Reply

    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 on 28 Ago 2013 at 12:20
    • Reply

    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 on 16 Set 2013 at 17:05
    • Reply

    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 on 26 Mar 2014 at 23:46
    • Reply

    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 on 22 Apr 2014 at 18:02
        • Reply

        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 on 6 Dic 2014 at 09:54
    • Reply

    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 on 19 Gen 2015 at 09:35
    • Reply

    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 on 13 Ago 2015 at 16:26
    • Reply

    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 on 14 Ago 2015 at 18:28
    • Reply

    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 on 12 Set 2015 at 18:42
    • Reply

    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.

Lascia un commento

Your email address will not be published.

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