Motori passo-passo bipolari con Arduino controlla la velocità

Oggi ho fatto qualche esperimento con il mio motore bipolare, Arduino e l’SN754410NE, nel precedente articolo: Motori passo-passo bipolari con Arduino – seconda parte hai imparato a pilotare un motore bipolare con Arduino, oggi imparerai come regolarne la velocità.

Motore Stepper Bipolare Schema

Nello schema in alto ho rappresentato il collegamento tra

  • Arduino Duemilanove;
  • SN754410NE driver Brige H;
  • Il motore bipolare (riciclato da una stampante);
  • Un potenziometro da 10KΩ

Oltre a questi componenti ti serviranno una breadboard e dei cavetti per l’assemblaggio.

Per facilitare il collegamento del motore all’SN754410NE ed Arduino puoi leggere l’articolo: Motori passo-passo bipolari con Arduino – prima parte in cui ho scattato delle foto passo dopo passo su come eseguire il collegamento.

Per collegare il potenziometro puoi seguire lo schema in alto, in cui vedi che gli estremi del potenziometro sono connessi al positivo e negativo dell’alimentazione, in pratica la resistenza fissa di 10KΩ è tra positivo e negativo ed il pin centrale, quello relativo al cursore del potenziometro lo devi collegare al pin analogico 0 (A0) di Arduino, utilizzerai questo pin per rilevare il valore della resistenza assunta dal potenziometro.

Dovrai fare anche alcune modifiche allo sketch proposto in precedenza:

Aggiungi una nuova variabile al gruppo delle variabili già impostate:

int pinPot = 0;

serve a definire a quale pin hai collegato il potenziometro, nell’esempio è collegato al pin 0;

Nella funzione setup() devi aggiungere una nuova linea dopo le altre che indichi ad Arduino di utilizzare il pin 0 (pinPot) come INPUT, ossia per leggere il valore di resistenza impostato:

pinMode(pinPot, INPUT);

Ed infine alcune modifiche alla funzione loop(), in primo luogo aggiungi subito dopo la definizione della funzione loop() le seguenti linee:

int readPin = analogRead(pinPot);
int delayTime=map(readPin,0,1024,0,500);

Il cui significato è per la linea 01 l’impostazione di una nuova variabile di tipo integer in cui farai confluire il valore letto sul pinPot mediante l’utilizzo della funzione analogRead, se vuoi maggiori dettagli su questa funzione e sul suo utilizzo puoi leggere l’articolo Programmare con Arduino – leggere un segnale analogico; la linea 2 imposta il delayTime, in italiano tempo di attesa, uguale alla proporzione matematica tra lo 0 letto e lo 0 impostato e il valore 1024 letto e il 500 come valore massimo, in pratica la funzione map() restituisce in tempo reale la rimappatura del valore minimo e massimo letto rispetto ai valori minimo e massimo desiderati, quando sul pin 0 leggerai un valore 0 -> map restituirà 0; quando leggerai 1024 -> map restituirà 500; quando leggerai 512 -> map restituirà 250; e così via per tutti i valori intermedi da 0 a 1024.

Non occorrono altre modifiche in quanto il tempo calcolato su delayTime è già impostato come quello da attendere tra un passo e quello successivo.

Ora hai chiaro anche il perchè della proporzione inversa tra resistenza e velocità di rotazione, il motivo è che al crescere della resistenza aumenta il tempo di attesa tra un passo ed il successivo per cui una velocità più lenta; al diminuire della resistenza diminuisce anche il tempo di rotazione comportando una velocità maggiore di rotazione.

Riporto lo sketch intero per semplificarti la vita:

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int pinPot = 0;

void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  
  pinMode(pinPot, INPUT);
}

void loop() {
  int readPin = analogRead(pinPot);
  int delayTime=map(readPin,0,1024,0,500);
  
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  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, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
}

Ho realizzato anche un piccolo video in cui puoi osservare come lo sketch appena visto si comporta in pratica.

Buon divertimento.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/motori-passo-passo-bipolari-con-arduino-controlla-la-velocita.html

75 comments

1 ping

Skip to comment form

    • Luigi on 13 giugno 2012 at 21:58
    • Reply

    Ciao ringrazio per i vari tutorial che mi hanno dato la possibilità di capirne un po’, a questo punto mi sorge una domanda sarebbe possibile comndare il movimento del passo passo e visualizzare in percentuale quale è la velcità del motere stesso, cosa utile se si volesse costruire un estrusore.?
    Grazie

    1. Ciao Luigi,
      il motore passo-passo per sua natura compie un giro al raggiungimento del numero di passi per cui è progettato, mi spiego meglio: se hai un 200step avrai il giro completo in 200passi, 100% del giro. La velocità in cui li compie è data dal tempo che attendi tra un passo e l’altro, ossia 0,10 sec tra un passo ed il successivo equivale a 20sec = ( 0,10 sec x 200 passi ).
      Con Arduino ogni loop è dato dalla velocità di esecuzione dello sketch, se non ci sono delay a fermare lo sketch puoi misurare questa velocità con la funzione millis(), c’è un tutorial su questa funzione.
      Assegna A=millis(), esegui 200 passi e assegna B=millis() la differenza (B-A) ti da il tempo in cui il tuo motore passo-passo fa un giro.

      Attenzione che il motore potrebbe non riuscire ad eseguire i passi ad una velocità troppo elevata, devi fare un po’ di prove con il tuo motore rallentando i passi fino a capire l’intervallo minimo di rotazione.

      Spero di aver capito il tuo dubbio, se così non fosse riscrivimi.

      Mauro

      • vitaliano on 8 gennaio 2014 at 13:39
      • Reply

      Salve, ottimo pilotare motori passo passo con potenziometro, ma la mia domanda è la seguente, è possibile far ruotare un mot.passo passo con l’utilizzo di un encoder rotativo? Mi spiego, il motore deve rimanere fermo , quindi velocità zero, solo quando faccio ruotare l’encoder dovrà girare, mentre la velocità del motore dipenderà esclusivamente dalla velocità con la quale faccio ruotare l’encoder.
      é possibile?grazie

      1. Ciao Vitaliano,
        non è semplicissimo ma si può fare 🙂
        Leggi i miei articoli sugli encoder per comprendere come leggere il loro valore angolare e applicali al motore passo-passo secondo le tue esigenze.

        Mauro

    • paolo on 12 ottobre 2012 at 22:53
    • Reply

    Bravo Mauro i tuoi tutorial sono chiari e alla portata anche dei non esperti come me. Stavo seguendo un progetto che mi interessa realizzare e che richiede l’utilizzo di un motore passo passo. La domanda è sulla reperibilità di questi motori possibile che non riesca a trovarlo simile in Italia.? Sotto i link.
    grazie Paolo
    PS complimenti per il recente progetto ROVER 5 penso di provare a realizzarlo presto.

    progetto
    http://www.youtube.com/watch?v=pk52n31XMPM
    il motore
    https://www.sparkfun.com/products/9238?
    tutti i componenti:
    http://imgur.com/a/9QmfJ

    1. Ciao Paolo,
      bello il progetto.
      Per il motore hai provato sul sito http://www.robot-domestici.it con cui collaboro, mi sembra che un motore simile sia quello che ho utilizzato per il mio progetto Dolly e l’ho comprato da loro:
      http://www.robot-domestici.it/joomla/component/virtuemart/robotica-domotica/motori/motori-passo-passo/stepper-motor-with-cable

      con leasydriver:
      http://www.robot-domestici.it/joomla/component/virtuemart/robotica-domotica/schede/controllo-motori/easydriver-stepper-motor-driver

      Grazie per il rover lo trovi in kit sempre sul sito:
      http://www.robot-domestici.it/joomla/component/virtuemart/Arduino/arduino-kit/leo-wi-rover5

      Mauro

    • Antonio Porcelli on 1 novembre 2012 at 01:31
    • Reply

    ciao Mauro,
    con enorme entusiasmo sto sviluppando varie ideee a partire da questo toutorial, sto però riscontrando un piccolo problema, l’ SN754410H scalda parecchio specialmente alle alte velocità… è normale che si comporti che riscontri questi surriscaldamenti, quale sarebbe una possibile via per eliminare il problema?
    sto alimentando l’integrato direttamente da arduino… non ho ancora provato con la rete esterna perchè ho paura di fare guai, potrebbe essere una strada per migliorare la situazione?

    1. Ciao Antonio,
      sicuramente l’alimentazione è una delle cose che devi tenere in considerazione, se utilizzi quella proveniente da Arduino e ti è sufficente allora non hai bisogno dell’SN754410H ti basta collegare le fasi in modo diretto.
      I componenti elettronici di potenza, ossia quelli che ti permettono di pilotare motori o altri carichi induttivi, solitamente scaldano, tale surriscaldamento non dovrebbe essere eccessivo e di solito con un opportuno dissipatore puoi risolvere il problema.

      Mauro

    • Antonio Porcelli on 2 novembre 2012 at 17:27
    • Reply

    grazie Mauro,
    non sono riuscito a trovare le specifiche tecniche del mio motore (l’ho riciclato da una stampante rotta), tenterò si la strada del collegamento diretto che quella dell uso di un dissipatore.

    a presto.
    Antonio

    • Pasquale Cardellicchio on 24 febbraio 2013 at 19:31
    • Reply

    Piacere di fare la tua conoscenza Mauro,
    prima di ogni cosa devo farti i complimenti per il tuo blog
    è Fantastico!

    mi chiamo Pasquale e studio all’ università di Chieti in Abruzzo
    ti scrivo x chiederti dei consigli in merito ad un progetto che voglio realizzare.

    Vorrei collegare dei motri passo – passo ad un arduino
    per controllarne il verso di rotazione e la velocità in modo preciso.

    vorrei capire, x fare questo mi bastano dei motori unipolari?
    (te lo chiedo xke qui x la velocità fa riferimento a quelli bipolari ma se ho ben capito la velocità la si imposta con delle pause nello script e credo a sto punto anche il versolo si imposta da li) oppure ho bisogno di un potenziometro?? io vorrei far gestire il tutto dal pc in modo da avere diverse condizioni(velocità costante, velocità variabile; sia un verso che nell’altro)

    è la prima volta che mi avvicino al mondo dell arduino
    quindi perdonami se sono un semplice neofita.
    basta un semplice arduino uno?

    mi devo riferire alla guida con l’integrato SN754410NE o ad un integrato di tipo ULN2003A

    mi consiglieresti un sito dove poter acquistare tutto il materiale insieme in modo da nn avere diversi ordini ( o spendo piu di spedizione che di materiale)

    ti ringrazio x il tuo aiuto è davvero prezioso!
    io sono laureato in Psicologia è quel poco che so mi è stato trasmesso da mio padre che era un elettro-tecnico e di cui vado profondamente orgoglioso 🙂

    magari se ti va possiamo sentirci anche su fb o su skype

    spero di essermi fatto capire attraverso le mie domande 🙂
    (sicuramente ti saranno sembrate idiote)

    Ancora Grazie
    Pasquale

    1. Ciao Pasquale,
      abbiamo 2 cose in comune: Arduino ed un padre elettrotecnico che ci ha trasmesso la passione per l’elettronica.
      In compenso io non capisco nulla di psicologia.

      I motori bipolari e unipolari differiscono per tante caratteristiche, una tra tutte il modo di pilotarli, se non sei pratico di elettronica, saldature e schede auto costruite ti consiglio di provare con i driver per motori passo-passo già fatti.

      Io acquisto da robot-domestici.it e mi trovo bene, hanno una buona assistenza e non impiegano molto a farmi recapitare il materiale se disponibile.

      Per i motori bipolari io uso la EasyDriver, trovi tanti esempi sul blog.
      Per i motori unipolari non ho trovato nessun driver già fatto a catalogo, puoi riferirti all’ULN2003A.

      Mauro

    • Pasquale on 25 febbraio 2013 at 18:18
    • Reply

    sto gia procedendo alla lista della spesa da robot-domestici 🙂

    1 Arduino Jumper Cables (65 Pack)
    1 ARDUINO UNO REV3
    2 Stepper Motor with Cable (Step Angle (degrees) :1.8)
    1 BREADBOARD – 400 CONTATTI

    l’unico problema è che nn trovo i 2 ULN2003A Con che cosa li posso sostituire???

    1. Ciao Pasquale,
      purtroppo l’ULN2003A è un componente che puoi trovare solo nei negozi di elettronica.
      Se i motori stepper li devi acquister perchè non prendi dei bipolari e due easyDriver rendendo tutto più semplice sia per il montaggio che per il controllo?
      Io avevo intuito che i motori tu li avessi già.

      Mauro

    • Pasquale on 26 febbraio 2013 at 15:16
    • Reply

    no no devo comprare tutto… e ho pressioni a fare il prima possibile
    x l’ULN2003A non credo sia un grosso prob.
    gbc mi ha detto di averli
    il resto lo prendo tutto da robot-domestici
    opterò x gli unipolari xke mi sembrano piu semplici da montare 🙂 speriamo solo che i newton siano suff. x quello che voglio fare

    al posto del duemilanove l’ arduino uno andra bene lo stesso?

    se riesco a fare il tutto ti mando le foto e cosi se ti fa piacere puoi aggiungere delle sezioni nel blog x esperimenti di psicologia con l’arduino 🙂

    1. Ciao Pasquale,
      mi incuriosisce molto il progetto che vede Arduino usato in psicologia 🙂 e sarò felicissimo di pubblicarlo oltra ad altri progetti che potrai inventare.
      Per i motori se hai dubbi sui newton puoi verificare le caratteristiche del motore prima di acquistarlo, sul motaggio mi sembra che si montino tutti allo stesso modo, 4 viti, i bipolari hanno soli 4 fili e con i driver è più semplice pilotarli.
      Gli unipolari hanno minimo 5 fili e ti consiglio di guardare sul datasheet dell?ULN2003A come costruire un driver, non penso tu possa usare il solo integrato se intendi usare il progetto più volte o per più tempo.

      L’arduno Uno andrà benissimo al posto del 2009, per darti maggiori informazioni dovrei almeno sapere di che progetto si tratta, io in alcuni progetti ho dovuto sostituire Arduino Uno con Leonardo.

      Mauro

    • vincenzo mastroddi on 3 marzo 2013 at 07:44
    • Reply

    Buon giorno sign Alfieri
    Sono giorni che giro su iinternet ma purtroppo senza risultati
    Voreei chiederle una cosa io avrei bisogno di motorizzare due persiane un po scomode a casa mia secondo lei e possibile farlo con arduino in modo che si apra prima una poi dopo qualche secondo laltra e che quando stanno per arrivare a fine c o rsa rallentino per trovare lo stop dato dall assorbimento del motore
    La prego mi aiuti
    Vuona giornata

    1. Ciao Vincenzo,
      puoi darmi del tu come fanno tutti .. siamo appassionati e makers 🙂
      A mio avviso non ci sono problemi sia per la parte di apertura ritardata tra le due persiane sia per la regolazione della velocità.

      L’unica cosa che non ho provato è misurare l’assorbimento del motore, immagino che sia una informazione che dovrebbe arrivare dal driver per motori che usi, quelli che ho provato io non lo fanno.

      Prova a cercare sul web chi produce controlli motore per persiane con rilevazione dell’assorbimento, penso si tratti di articoli professionali.
      Quando avrai questo genere di dispositivo puoi verificare se il tuo progetto è fattibile.

      Mauro

    • vincenzo mastroddi on 4 marzo 2013 at 07:22
    • Reply

    Buon giorno
    E grazie per la risposta
    Il problema e proprio questo io vorrei autocostruirmi tutto
    Vorrei acquistare dei motorini e da li provare a fare questa ardua impresa anche perche se dovesse funzoonare piu in la lo vorrei mettere su tutte la persiane in modo da farle chiudere ed aprire ogni qualvolta inserisco e tolgo l antifurto
    Buona giornata

    • Giovanni on 14 marzo 2013 at 10:52
    • Reply

    non funziona

    1. A tutti gli altri si 🙂
      Scherzi a parte se non mi dici che errore ti da non posso aiutarti.

      Mauro

    • Daniele on 4 giugno 2013 at 23:29
    • Reply

    Ciao Mauro,
    ho un motore stepper, arduino e la motor shield di arduino.
    Mi puoi dare una mano per lo sketch per far ruotare il motore sia in un senso, che in un altro?
    Gentilissimo,grazie!

    1. Ciao Daniele,
      sul blog trovi molti articoli a cui puoi fare riferimento.

      Mauro

    • Utente on 16 agosto 2013 at 22:21
    • Reply

    Ho recuperato un motore passo-passo bipolare Epson EM-483 da una vecchia stampante. Cercando con Google ho trovato queste informazioni:
    Nominal Voltage 7
    Current 0.7
    Resistance (ohm) 3.6
    Torque (in-oz) 44.4
    Torque (kg*cm) 3.2
    Wires 4
    Condition pulled
    Steps / Revolution 200
    Step Size (degrees) 1.8
    NEMA frame size 17
    Ora vorrei pilotarlo con questo circuito, usando però un’ alimentazione esterna, visto che la 5v non sembra sufficiente e vorrei sapere se le comuni pile alcaline sono in grado di alimentarlo o devo usare qualcos’ altro.

    1. Ciao Utente,
      Mi piacerebbe conoscere il tuo nome e poterci dare del tu, come avrai letto che faccio con tutti gli appassionati di arduino e motori passo-passo.

      Se vuoi puoi alimentare il motore con una alimentazione esterna da 7v e le normali pile alcaline potrebbero andar bene visto i limitati consumi: 0,7A del motore.
      Con 7v potresti anche alimentare Arduino che accetta in input 7-12v

      Mauro

    • Lorenzo on 25 agosto 2013 at 20:22
    • Reply

    Mauro,
    vorrei provare ad utilizzare un vecchio motore passo-passo recuperato da una stampante il modello è EM-483.
    Spero che i dati indicati dall’utente del 16/08 siano giusti (in internent ho trovato 12V di alimentazione).
    Ho visto che hai utilizzato un SN754410NE, hai avuto la necessità di montare anche un dissipatore?
    Puo’ andare bene anche per il motore EM-483?

    Grazie

    Ciao

    Lorenzo

    1. Ciao Lorenzo,
      i dati che hai trovato in internet per il tuo motore potrebbero essere più corretti di quelli riportati nel commento del 16/08, ciò che ti interessa conoscere è la tensione di alimentazione e la corrente per fase.
      In ogni caso per un test va benissimo il chip SN754410NE, ma se vuoi realizzare un progetto io ti consiglio un driver per motori passo-passo tipo l’EasyDriver, la Big Easy Driver o uno dei driver della Pololu.

      Mauro

    • Nicolò on 22 ottobre 2013 at 22:21
    • Reply

    Buona sera.
    Avrei un problema che non riesco ad’uscirne,chiedo il suo santo aiuto:)
    Ho costruito una scheda per comandare un motore passo con il 297 e 298 però io avrei bisogno di un istruzione di arduino che mi generi per esempio 50 passi(clock) e poi si ferma.
    Come posso fare?
    Grazie mille

    1. Ciao Nicolò,
      trovi molti esempi di questo tipo nei miei progetti, consulta ad esempio gli articoli del Dolly.

      Mauro

    • Marco on 5 marzo 2014 at 07:39
    • Reply

    Caro Mauro,

    Grazie ai Tuoi tutorial ho mosso i miei primi passi con arduino. Per il mio esperimento ho bisogno di controllare un motore bipolare con arduino variandone la velocità ed il senso di rotazione . Vorrei usare come reostato una LCD keypad shield (df robot v1.0) per poter visualizzare sul display i valori di velocità .
    Potresti aiutarmi?
    Grazie
    Marco

    1. Ciao Marco, certo che posso aiutarti quello che ti occorre é una parte del codice del Dolly, puoi prendere quello, studiarlo tutto ed eliminare le parti di codice superflue per ottenere il codice che ti occorre.

    • Luciano on 8 marzo 2014 at 18:09
    • Reply

    Ciao MAuro, complimenti per il sito, per me neofita di arduino è una miniera di informazioni. Mesi fa ho comprato per pochi euro una scheda simile ad arduino della T.I. che credo conoscerai, Launchpad. Ho provato alcuni schetc di arduino e pare non ci siano differenze…ma devo ancora sperimentare qualcosa oltre il semplice led !! ahahahh. Sto costruendo un piccolo automatismo ad un macchinario e mi servirebbe poter controllare la velocità di un motore passo passo (preso da una cnc), così mi sono imbattuto nel tuo articolo molto preciso.
    VOrrei usare 2 interruttori per far muovere un solo motorino in senso orario o antiorario, e un potenziometro per regolarne la velocità, e due finecorsa per limitarne la corsa nulla di complesso…
    Mi chiedevo se potesse bastare la tua “scheda” con sn754410 o è meglio optare per easy driver? in effetti dovrebbe fa girare il motorino per 2 minuti al max… con soste di qualche minuto e non più di 5 volte al giorno….. quindi non sarebbe un “lavoro” pesante! Ora non ho il motorino davanti a me , ma mi pareva fosse 1,5A.
    Dove posso reperire l’SN o eventualmente ? Credi che il launchpad possa andare o meglio un arduino?
    Ti ringrazio per la tua risposta.

    1. Ciao Luciano, non conosco la scheda di cui mi parli, se ritieni possa essere simile puoi usarla, tuttavia io consiglio sempre di riprodurre i miei progetti con materiale uguale o migliore di quello da me utilizzato, questo ti mette al riparo da malfunzionamenti non dovuti al codice ma al prodotto.

      Per il controllo di un motore come quello che descrivi ti consiglio la easydriver, più semplice da controllare ed affidabile, inoltre mi sembra che l’SN….. abbia al massimo 1A di controllo.

        • Luciano on 11 marzo 2014 at 12:14
        • Reply

        Ti ringrazio del tuo consiglio, quindi prenderò la easy… per non avere problemi. Tu dove ti fornisci?

        1. Ciao Luciano,
          io acquisto dal sito robot-domestici.it

            • Luciano on 12 marzo 2014 at 13:59

            Grazie Mauro..farò altrettanto, tanto sono vicini..

        • Luciano on 30 marzo 2014 at 00:51
        • Reply

        Ciao Mauro, ho seguito il tuo consiglio e in meno di 48 ore ho ricevuto il materiale da robot-domestici. Ho provato alcuni programmini, o meglio ne ho realizzati un paio fortunatamente funzionanti, sebbene dopo un pò ldi tempo usato per rivedere l’abbinamento pins, dato che uso un “launchpad”. Diciamo che mi interessava realizzare un controllo di velocità per un motore passo passo, usando potenziometro. Ci sono riuscito! Ho notato una cosa : nella void in cui leggo il valore del potenziometro e mando lo step alla bigeasydriver, se aggiungo un if per dare un senso alla rotazione, il motore gira più lentamente, come se l’istruzione if rallenti l’esecuzione della void…… E’ questo il motivo??

        1. Ciao Luciano,
          solitamente ogni iscruzione eseguita dal microcontrollore richiede un tempo di elaborazione.
          Di solito un if non dovrebbe introdurre una latenza tale da essere percepita ad occhio nudo, tuttavia dipende molto da quante operazioni l’if deve elaborare e quanto veloce stai facendo girare il motore.

    • Johny on 30 maggio 2014 at 22:51
    • Reply

    Ciao io avrei un problemino… Il potenziometro risponde in maniera illogica, teoricamente se lo dovessi muovere tutto da una parte, aumenterebbe/diminuirebbe al massimo/minimo la velocità giusto? Poi a circa metà ad una certa posizione del potenziometro il motore non si muove nemmeno :S

    1. Caio Johny, dalla tua descrizione deduco che il potenziometro potrebbe essere danneggiato, considera che i potenziometri hanno due difetti:
      1. non sono lineari al 100% almeno di non usare potenziometri molto costosi e con precisione garantita;
      2. Sono normalmente composti da un sottile strato di grafite su cui scorre un contatto, con l’uso la grafite si consuma per sfregamento e forma delle irregolarità nella risposta dei valori.

      Ti consiglio di testare i valori provenienti dal potenziometro leggendoli con il monitor seriale.

    • Marco on 22 luglio 2014 at 08:34
    • Reply

    Salve Mauro, ti ringrazio molto del tutorial, è stato molto utile, ma ti volevo chiedere: avendo un arduino uno e un arduino motor shield, come collego il potenziometrio???

    • Claudio on 12 dicembre 2014 at 12:40
    • Reply

    Ciao Mauro.
    Ho bisogno di un consiglio pratico:
    Vorrei acquistare un motore bipolare con un’alta coppia perchè devo calettarci una barra filettata che tramite un bullone mi alza un peso di 500 grammi.
    Deve muoversi in un senso (verso l’alto) di circa 40 cm in un tempo di 5-10 secondi al massimo. E nell’altro senso (verso il basso) per la stessa distanza e stesso tempo.
    Vorrei utilizzare arduino uno r3 che ho già preso e sicuramente mi servirà un driver per motori tipo easydriver.
    Vorrei alimentarlo a batterie (max 9 v)
    Mi aiuti per la scelta del motore e del driver?
    In attesa ti ringrazio anticipatamente.
    Claudio

    1. Ciao Claudio,
      data la complessità meccanica ti chiedo se hai idea della coppia di cui hai bisogno.
      Alta per me può essere 2N/cm e per te 30N/cm non saprei quantificarla.

  1. Ciao Mauro vorrei applicare allo sketch di questa lezione la possibilita’ di inversione del moto con i due pulsanti, ho provato ad utilizzare gli esempi in giro per il tuo blog ma con scarsi risultati, mi puoi aiutare, dispongo di arduino uno e shield ardumoto (shield FE) e vorrei realizzare un tester per motori PP Bipolari.

    ciao grazie

    1. Ciao Damiano, mi sembra tu abbia già commentato altri articoli, ma posso sbagliarmi.
      Ti consiglio di leggere e capire il principio di funzionamento dei motori passo-passo ed i miei sketch, resterai stupito della semplicità e di come sia semplice adattare uno sketch come questo al tuo progetto.

    • claudio on 19 dicembre 2014 at 22:37
    • Reply

    Ciao Mauro.
    Se la coppia si misura: peso per la forza di gravità (sempre che sia cosi..) allora il calcolo da me fatto è:
    peso per forza di gravità= 500 gr x 9.8 = 4900 gr/cm2= 4,9 Newton giusto?
    Se è sbagliato ti prego di correggermi.
    Se è esatto (più o meno) ci sono motori che hanno questa coppia (4,8N) ma il fatto è che ho bisogno che giri anche veloce. Credo 1000 g/m vadano bene. Devo spostare un peso di 500 gr per 40 cm in 5-8 secondi al max.
    Un aiutino? Non vorrei fare altri acquisti e pentirmene ancora..(ho comprato un nema 17 da 200 passi da 2,5A per 3V circa ma è lento e l’ho restituito)
    Grazie in anticipo
    Claudio

    1. Ciao Claudio, non sono ferrato in meccanica, lascio ad appassionati del blog la possibilità di correggerti le formule, mi sembrano solo molto ridotte all’osso e quindi suscettibili di grandi errori.
      Per il secondo problema, la velocità, io mi concentrerei sui motori Dc al posto dei passo-passo e se ti serve conoscerne la posizione usa un encoder.

    • claudio on 4 gennaio 2015 at 21:28
    • Reply

    Ciao Mauro e..Buon Anno!
    Volevo chiederti se potevi linkarmi il post (che non trovo) dove colleghi un motore (passo passo) e lo fai funzionare con 2 pulsanti. i fine corsa possono essere considerati (al momento) con 2 pulsanti.
    Il problema è che non ricordo come programmare lo sketch per far si che premendo i due pulsanti insieme (tipo VERSO ORARIO E ANTIORARIO) non si creino interferenze. Mi spiego meglio: se premo il pulsante per VERSO ORARIO non ottengo nessuna reazione dagli altri pulsanti TRANNE quello di fine corsa (pulsante!)
    Mi consigli?
    Grazie mille
    Claudio

    1. Ciao Claudio,
      ti invito a cercare meglio nel blog, ci sono molti articoli che fanno quello che mi chiedi.
      Per il conflitto tra i pulsanti puoi risolverlo via sketch in modo molto semplice: nel loop() usi due while le cui condizioni sono la pressione del primo o del secondo pulsante in modo che quando leggi la pressione di uno dei due il ciclo loop() non legga altro pulsante fino al rilascio dello stesso.

    • claudio on 4 gennaio 2015 at 21:45
    • Reply

    Ciao Mauro
    volevo sapere una cosa:
    collegando una tensione esterna ad arduino senza la usb per esempio 12 volt. 5 volt servono ad arduino per funzionare ei restanti 7 volt vanno al circuito (motori,pulsanti,resistenze ecc..)?
    E’ giusto? Non riesco a capire questa cosa..
    grazie mille
    Claudio

    1. Assolutamente no!!
      Ti consiglio di leggere le prime lezioni del mio corso on-line per capire meglio come funziona arduino e non danneggiarlo.

    • claudio on 12 gennaio 2015 at 22:00
    • Reply

    Ciao Mauro.
    Grazie delle risposte e del tempo dedicatomi. Ho la testa piena di progetti e più leggo post più aumentano i desideri di realizzare qualcosa di concreto.. Purtroppo il tempo a disposizione è poco e i figli “succhiano” anche quel poco..
    Spero di riuscire a realizzare quest’ascensore!
    Complimenti per tutto il lavoro che svolgi ma soprattutto per la pazienza che devi avere per aiutare i neofiti come me!
    claudio

    1. Ciao Claudio,
      anche io ho un figlio e ti capisco 🙂
      Tuttavia credo riuscirai ed attendo che tu abbia concluso il progetto, se vuoi, per condividerlo con altri papà makers.

    • Simone on 31 gennaio 2015 at 16:49
    • Reply

    Ciao Mauro,
    Grazie per i tuoi tutorial!

    Vorrei chiederti se è possibile utilizzare il potenziometro non solo per regolare la velocità di rotazione ma anche come switch per invertirne la rotazione.

    Vorrei costruire una pompa a siringa e un tool del genere potrebbe essermi utilissimo!

    Grazie
    buona giornata

    Simone

    1. Ciao Simone,
      si è possibile giocando con i valori letti ed inviati al motore.
      Per una pompa io preferirei usare un motore cc e non un motore passo-passo per le sue caratteristiche.

    • FRANCESCO on 3 maggio 2015 at 20:01
    • Reply

    Ciao Mauro, da tempo seguo i tuoi tutorial e ti ringrazio per il tempo che ci dedichi.
    Devo scegliere un motore stepper a 24Vdc, bassa velocità(anche 30 giri/min) ma con coppia elevata, almeno 16Nm. Vorrei controllare il tutto con Ardunio come hai fatto tu, ma devo scegliere il driver adatto ( che supporti almeno 8A di corrente) e prendere chiaramente un power supply a 24V. La mia richiesta è la seguente:
    in commercio esistono Stepper a 4Nm ma con 2000 rpm, secondo te, visto che a me bastano 30 rpm, potrei diminuire la velocità con conseguente aumento di coppia (Nm) fino ad ottenere i miei 16Nm? è possibile diminuire la velocità con Arduino, aumentando di conseguenza la coppia?

    1. Ciao Francesco,
      la tua domanda è più adatta ad un esperto di meccanica e di motori passo-passo che ad un appassionato di elettronica ed arduino.
      Lascio la tua richiesta pubblica così che chiunque sappia la risposta corretta possa fornirtela.

    • MAURIZIO on 29 gennaio 2016 at 20:50
    • Reply

    EGREGIO SIG. MAURO DA QUALCHE TEMPO SEGUO CON MOLTA ATTENZIONE I SUOI PROGETTI E REALIZZAZIONI IN PARTICOLARE ARDUINO MI SONO AVVICINATO A QUEST ‘ULTIMO AQUISTANDO UN ARDUINO UNO E POI UN ARDUINO 2 NUTRIVO MOLTO INTERESSE PER IL TOUCH SCREEN E NE HO AQUISTATO UNO DICESI ADATTO ALL’ARDUINO 2, MA NON RIESCO A FARLO FUNZIONARE
    CON NESSUN SHETC INDICATO .
    I DATI DEL TFT SONO ” SAINSMART TFT320QVT, LE SAREI MOLTO GRATO SE POTESE INDICARMI LO SCHETC GIUSTO PER VEDERLO IN FUNZIONE , SEMBRA CHE CI SIA PROPRIO UNA INCOMPATIBILITA’
    GRAZIE MAURIZIO

    1. Ciao Maurizio,
      ti chiedo la cortesia di non usare il carattere MAISCOLO quando scrivi, sul web è considerato cattiva educazione perché equivale ad urlare.
      Detto questo non sono riuscito a trovare documentazione sul display, ti consiglio di chiedere al fornitore/negozio/produttore del tuo display di darti un esempio di sketch.

      In generale ti sconsiglio di acquistare materiale da siti che non ti diano uno sketch di uso/esempio perché spesso è troppo complesso utilizzarli e si rischiano acquisti inutili.

    • Carmelo on 31 gennaio 2016 at 16:46
    • Reply

    Salve,
    ho letto molte cose su arduino nel suo blog e devo farle i complimenti.
    Avevo un dubbio, siccome sto costruendo un inseguitore stellare (ho letto anche di un ragazzo che le ha scritto in merito), ho già tutto il materiale. Ho anche lo sketch per farlo ruotare precisamente ad 1 rpm. Adesso vorrei aggiungere un interruttore del tipo ON-OFF-ON per fare ruotare da una parte il motore ad 1 rpm e dell’altro , in senso inverso, ad elevata velocità. Cosa dovrei aggiungere nello sketch? e l’interruttore va collegato nei pin analogici, giusto?

    1. Ciao Carmelo,
      l’interruttore puoi collegarlo sia ai pin digitali sia analogici con le dovute resistenze di pull-up.
      Ti consiglio la lettura degli articoli in cui parlo di pulsanti o interruttori, troverai gli schemi di collegamento e capirai anche cosa modificare nel codice.

        • Carmelo on 2 febbraio 2016 at 15:25
        • Reply

        Perfetto, quindi seguo la parte dei pulsanti. Grazie mille.

    • MAURIZIO on 2 febbraio 2016 at 08:32
    • Reply

    grazie infinite Mauro per il consiglio scrivo raramente sul web ed ho trascurato questa regola , vi prego di accogliere le mie scuse ,
    torniamo al tft , lei quale mi consiglierebbe per non incappare nel problema delle librerie?

    1. Ciao Maurizio,
      nessun problema per il maiuscolo.
      In merito si display ne esistono molti modelli tra cui scegliere quello più adatto al tuo scopo, touch e non.
      Io ho usato quelli della 4D System, se cerchi nel blog trovi qualche esperimento descritto da cui prendere spunto.

    • mimmo on 8 febbraio 2016 at 22:54
    • Reply

    Ciao Mauro, be complimenti bei progetti, ho trovato ineressante questo sul controllo della velocita’ nei bipolari……..se puoi, mi aiuteresti nel mio intento e cioe’ utilizzare easy driver come drive e potenziometro per la regolazione della velocita’ sempre per i bipolari.

    Grazie

    Mimmo

    1. Ciao Mimmo,
      con easydriver è più semplice 🙂 comprendi il concetto su cui ho scritto questo progetto e applicalo agli sketch scritti per l’easy driver.

    • Andrea on 2 marzo 2016 at 13:33
    • Reply

    Ciao Mauro ti seguo assiduamente anche se non scrivo tanti commenti.
    A proposito dei motori stepper mi è capitato tra le mani un NEOCENE 2T3542 che dal datasheet si presenta come 5 omh a 12v (3A ma non sono sicuro.
    Come posso collegarlo ad arduino? Quali integrato a ponte H mi consigli? Grazie!

    1. Ciao Andrea,
      se hai un motore con 3A per fase puoi verificare le caratteristiche della BigEasyDriver che ricordo supporti fino a 3A, considera che sei ad un punto limite e che sarebbe meglio tenere un margine spostandosi in driver di fascia semi-professionale.

    • Fabio on 6 maggio 2016 at 07:57
    • Reply

    È possibile utilizzare anche un L239D al posto del SN?? Tanto le uniche differenze sono nella corrente nominale minore. Se il motore me lo permette potrei usare anche L239D giusto?

    1. Ciao Fabio,
      se la sola differenza è nella corrente nominale penso tu possa utilizzarlo. Io non ho mai provato.

    • Federico on 22 luglio 2017 at 10:49
    • Reply

    Ciao Mauro. Ho fatto anche io la stessa cosa per controllare la velocità ma non saprei come fare per aggiungere uno switch per cambiare il senso di rotazione.. hai qualche consiglio?
    Grazie,
    Federico

    1. Ciao Federico, non sai come aggiungere uno switch al circuito? Come scrivere il codice o come invertire la rotazione? Per ognuno di questi argomenti dovresti trovare un mio articolo su questo blog. Se non li trovi puoi seguire il mio corso base Arduino gratuito on line.

    • Andrea on 6 novembre 2017 at 12:03
    • Reply

    Ciao Mauro, sono Andrea e sono un neofita per quanto riguarda il mondo di Arduino. Volevo chiederti, come si capisce se il motore DC che utilizziamo è danneggiato? Mi spiego, io utilizzo il driver ULN2003 e dopo aver collegato tutte le componenti e dopo aver inserito uno dei tanti code trovati in internet nella mia scheda UNO, vedo lampeggiare il driver ma il motore non si muove. Cosa c’è che non va? Grazie mille in anticipo.

    1. Ciao Andrea,
      il motore che usi è DC o Stepper? te lo chiedo perchè scrivi DC ma il commento è in un articolo dedicato ai motori stepper, forse è per tale confusione che il motore non fa quello che desideri.

    • Federico on 9 marzo 2018 at 12:23
    • Reply

    Ciao Mauro, stavo leggendo il tuo sito e ho visto il video del pilotaggio tramite pulsantini di un passo passo. Io ho un motore passo passo Nema 23 57mm da 2Nm, 2V o 1.5 a seconda di come si collega.
    Vorrei farlo girare a velocità variabili tramite potenziometro…(non capisco un’H di elettronica).
    Oltre al motore,al potenziometro ed arduino, cos’altro mi servirebbe ??

    Ho visto che lo fanno girare anche con un semplice condensatore… collegando due fili delle bobine insieme al codnensatore, l’alimentazione 12v dalla batteria al codnensatore e l’altro filo “libero” del motore al meno della batteria. Il codensatore da XmicroFara evidentemente, si carica e scarica dando gli impulsi al motore e questo gira ad una certa velocità. Due domande. 1) Come faccio a dimensionare il condensatore per il mio motore ?
    2) Si potrebbe mettere un potenziometro e controllare la velocità di rotazione ?

    illuminami

    1. Ciao Federico,
      con il condensatore non saprei dirti come dimensionarlo e modificare il circuito, puoi chiedere a chi lo ha realizzato.
      Per farlo girare con Arduino puoi leggere i molti articoli che ho scritto sui motori passo-passo e cercare di capire a quale modello risponde il tuo.
      Compreso il modello puoi dimensionare e scegliere il tipo di driver motore a cui collegarlo.
      Poi per la programmazione con arduino troverai di certo un mio articolo in cui spiego come farla e suggerisco qualche sketch di esempio.

  1. […] un motore passo-passo con due interruttori. Nei precedenti articoli hai imparato a collegare e regolare la velocità di un motore passo-passo bipolare con […]

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.