Il tuo esperimento con i motori passo-passo bipolari inizia a diventare interessante, se hai seguito i precedenti articoli avrai realizzato il tuo controllo motore passo-passo bipolare con Arduino e un SN754410NE.
Nella quarta parte hai affrontato il problema della velocità di rotazione ed una prima soluzione per risolvere l’inconveniente dovuto ad una eccessiva velocità di successione dei segnali alle bobine che hanno come effetto collaterale la completa immobilità del motore e l’emissione di un sibilo.
L’aracano per evitare tutto questo è l’introduzione di un delay o tempo di ritardo tra una fase e la successiva.
Se il motore vuoi che compia un giro completo in un tempo da te stabilito puoi calcolare prima di impostare lo sketch, ad esempio se vuoi che il tuo motore compia un giro completo in un secondo non hai che da dividere il secondo per le fasi ( passi o step ) che il motore impiega per eseguir un giro completo.
Siccome il delay di Arduino lavora in millisecondi ossia 1 secondo = 1000 millisecondi, se il motore con cui stai lavorando è un 200 step ossia impiega 200 passi per compiere un giro, il calcolo è presto fatto: 1000/200 => 10/2 = 5 millisecondi; imposta quindi a 5 il delay.
Il problema vero è quando non sai a quale velocità devi far ruotare il motore, per cui non puoi calcolare anticipatamente il valore del delay da impostare.
Ed ecco che lo schema in figura:
ti mostra una possibile soluzione, inserendo un potenziometro da 10KΩ, come nello schema potrai regolare la velocità di rotazione mediante lo sketch presentato nella quarta parte di questa serie di articoli con qualche piccola modifica:
#define LED 13 #define ORARIO 2 #define ANTIOR 3 int motorPinx[] = {8, 9, 10, 11}; int sequenza[] = {1,3,2,4}; int countX = 0; int count2X = 0; int ora = 0; int ant = 0; int delayTime = 100; int pinPot = 0; void setup() { pinMode(LED, OUTPUT); pinMode(ORARIO, INPUT); pinMode(ANTIOR, INPUT); for (countX=0; countX<4; countX++) { pinMode(motorPinx[countX], OUTPUT); } pinMode(pinPot, INPUT); } void loop() { ora = digitalRead(ORARIO); ant = digitalRead(ANTIOR); int readPot = analogRead( pinPot ); int delayTime = map(readPot,0,1024,10,1000); if (ora == HIGH) { orario(); } if (ant == HIGH) { antiorario(); } delay(delayTime); } void orario() { int val = LOW; for (countX=0; countX<4; countX++) { if (countX == sequenza[count2X]) val = HIGH; else val = LOW; digitalWrite(motorPinx[countX], val); } count2X++; if (count2X == 4) count2X = 0; } void antiorario() { int val = LOW; for (countX=3; countX>=0; countX--) { if (countX == sequenza[count2X]) val = HIGH; else val = LOW; digitalWrite(motorPinx[countX], val); } count2X--; if (count2X < 0) count2X = 3; }
Avrai già visto la modifica da fare, riguarda le linee 12, 22, 28 e 29.
linea 12: definisci una nuova variabile di tipo integer in cui memorizzare il numero di pin a cui hai collegato il pin centrale del potenziometro, nella figura il pin è connesso al pin A0 (analogico 0);
linea 22: è all’interno della funzione setup() per cui è una istruzione di settaggio eseguita all’avvio dello sketch, imposti il pinPot, assegnato alla linea 12, in modalità INPUT indicando ad Arduino di leggere da questo pin i valori analogici che gli saranno inviati attraverso il potenziometro.
linea 28: leggi il valore del potenziometro attraverso il pin 0 analogico, e memorizzi il valore nella variabile readPot;
linea 29: utilizzi la funzione map(valore,valmin,valmax,outputvalmin,outputvalmax) per rimappare dei valori di input su dei valori di output, in pratica questa funzione accetta come primo parametro il valore da rimappare (readPot) il cui valore oscilla tra valmin ( 0 ) e valmax (1024 ) il passaggio da 0 a 1024 è il valore acquisito dal pin 0 in base alla posizione dell’alberino del potenziometro; tale valore viene rimappato in funzione dei valori di output min e max ( parametro 4 e 5 della funzione map ); nell’esempio i valori da 0 a 1024 sono rimappati da 10 a 1000 ma puoi provare a variare questi valori per adattarli al tuo progetto.
Buon divertimento.
61 commenti
Vai al modulo dei commenti
Salve Mauro,
proprio quello che cercavo!
Per ora non posso fare delle prove perchè non ho ancora l’arduiono..
Intanto complimenti per il suo blog.
(utente youtube modifica faro)
Autore
Sono contento, a breve pubblicherò dei tutorial sulla motorshield che ho preso con arduino da robot-domestici, proprio su come pilotare i passo-passo.
Se hai altri dubbi cerca nel sito e se non trovi articoli soddisfacenti scrivimi.
Mi piacerebbe pubblicare il tuo progetto.
Mauro
Il seguente sketch è provato e funzionante Saluti Franco
#define LED 13
#define ORARIO 2
#define ANTIOR 3
int motorPinx[] = {8, 9, 10, 11};
int sequenzaO[] = {0,2,1,3};
int sequenzaA[] = {3,1,2,0};
int countX = 0;
int countY = 0;
int ora = 0;
int ant = 0;
int delayTime = 50;
int pinPot = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(ORARIO, INPUT);
pinMode(ANTIOR, INPUT);
for (countX=0; countX<4; countX++)
{
pinMode(motorPinx[countX], OUTPUT);
}
pinMode(pinPot, INPUT);
}
void loop() {
ora = digitalRead(ORARIO);
ant = digitalRead(ANTIOR);
int readPot = analogRead( pinPot );
int delayTime = map(readPot,0,1024,10,1000);
if (ora == HIGH) {
orario();
}
if (ant == HIGH) {
antiorario();
}
delay(delayTime);
}
void orario(){
//int sequenzaO[] = {0,2,1,3};
int val = LOW;
for (countX=0; countX<4; countX++){
if (countX == countY){val = HIGH;}
else{val = LOW;}
digitalWrite(motorPinx[sequenzaO[countX]], val);
}
countY++;
if (countY == 4){
countY = 0;
//delay(delayTime);
}
}
void antiorario(){
//int sequenzaA[] = {3,1,2,0};
int val = LOW;
for (countX=0; countX<4; countX++){
if (countX == countY){val = HIGH;}
else{val = LOW;}
digitalWrite(motorPinx[sequenzaA[countX]], val);
}
countY++;
if (countY == 4){
countY = 0;
//delay(delayTime);
}
}
Autore
Ciao Franco, il tuo sketch è corretto, differisce da quello scritto nell’articolo per alcuni nomi di variabile ( Count2X con CountY) e per un differente approccio alla rotazione. La sequenza è una sia che tu voglia ruotare l’alberino in senso orario sia antiorario, non cambia in quanto non cambia la geometria del motore; semplicemente la rotazione oraria incrementa i Count (X e 2X o Y) con ++ e la rotazione antioraria le decrementa —
Mauro
ciao mauro,
ho scritto il codice di “frappaweb” e funziona tutto, volevo chiederti però se sapevi come pilotare allo stesso modo un motore stepper (precisamente ho un 28ybt-48) con 2 pulsanti e il potenziometro.
ti ringrazioo!!
Autore
Ciao Bernardo,
il codice che hai copiato è simile al mio, infatti “frappaweb” ha copiato e modificato il mio adattandolo al suo progetto.
Il codice dei due pulsanti ed un potenziometro dipende da cosa vuoi che faccia il potenziometro.
potrei contattarti in privato?
comunque a me interessa solo comandare questi stepper con i 2 pulsanti, il potenziometro non mi interessa tanto posso regolare la velocità nel programma (fissandola definitivamente).
Autore
Ciao Bernardo,
l’email è riservata ai progetti su commissione, purtroppo non riesco a dar seguito a tutte le richieste di progetti ed aiuto che ricevo ed ho dovuto dividere chi desidera solo dei consigli può usare il blog, chi desidera commissionarmi un progetto può utilizzare la casella email.
Comunque ho provato a collegare quello stepper con lo stesso programma del motore bipolare e funziona lo stesso solo che gira lentissimo e con il potenzionetro non riesco a regolare la velocità.
Autore
Ciao Bernardo se il motore è un bipolare lo sketch va benissimo.
Se hai un motore unipolare ti bastano poche righe di differenza ed adatti lo sketch al tuo scopo.
La velocità potrebbe dipendere dal delay impostato o dalla meccanica del motore.
infatti….mica potresti aiutarmi??perchè ho provato e non riesco proprio a farlo girare in entrambi i versi.
Autore
Ciao Bernardo,
il tuo è un motore bipolare o unipolare?
Ciao Mauro
innanzi tutto ti faccio i miei comlimenti per il tuo sito ben fatto e molto interessante, sopratutto per chi come me è alle prime armi che ho appena acquistato Arduini uno rev3 e la scheda Motor Shield perchè avendo alcuni motori passo passo ero curioso di imparare ad pilotarli.Ho provato alcuni sketch con i quali sono riuscito a far girare il motore (bipolare)senza nessun problema grazie alle tue spiegazioni molto chiare e ben fatte,il problema adesso è riuscire a farlo funzionare con i pusanti e il potenziometro che regola la velocità,ho trafficato un po con il tuo esempio di sketch ma non sono riuscito a risolvere il problema (non ho molta esperienza sulla programmazione),puoi aiutarmi ad venirne a capo? Magari con uno sketch che faccia girare il tutto con il motor shield?I collegamenti del motore pulsanti ed potenziometro funzionano,il motore si muove a scatti avanti ed indietro e se diminuisco il potenziometro si blocca, non gira bene come dovrebbe,credo dipenda dalla configurazione che gestisce le fasi del motore.Ti ringrazio anticipatamente e ti saluto cordialmente.
Autore
Ciao Ennio,
grazie per i complimenti.
l’articolo che hai commentato contiene esattamente quello che ti occorre, a parte il fatto che non utilizza la motor shield.
Il potenziometro non fa altro che aumentare o diminuite il tempo tra un passo ed il successivo, non dovrebbe mai fermare il motore per più di un secondo tra un passo ed il successivo ( vedi linea 29 ).
Da come descrivi il problema sembra che a minimo (10 millisecondi) il motore che stai utilizando non riesca a gestire i passi, prova ad aumentare questo valore a 100.
Colgo il tuo suggerimento e prossimamente proverò a scrivere un tutorial apposito.
Mauro
Ciao Mauro!! intanto complimenti per questo post veramente interessante e realizzato ad hoc!! Ho provato il tuo schema con un motore stepper attaccato al carrello della stampante(il carrello su cui sono montati i toner) e funziona!! l’unico problema è ke si muove a scatti il carrello, mentre originariamente si muoveva in modo molto fluido e molto + velocemente!! a cosa è dovuto questo rallentamento e questo movimento a scatti secondo te??
Autore
Ciao Michael,
Potrebbe essere dovuto al delayTime che introduce un ritardo, se leggi la spiegazione dell’articolo c’è scritto ogni riga a cosa serve e puoi capire come modificare il codice per fargli eseguire quello che ti occorre.
Se hai bisogno di aiuto sono a disposizione.
Mauro
ottimo argomento
ma quale modifica posso fare al circuito per comandare anche un motore unipolare?
grazie
mille
paolo
Autore
Ciao Paolo,
sul blog ci sono degli articoli dedicati al movimento dei passo-passo unipolari, quello che cambia sono il modo in cui il motore deve essere collegato e la sequenza di movimento che non sarà più per fasi alternate ma sequenziali.
Mauro
Ciao Mauro complimenti per i tutorial sono bellissimi, ne ho letti parecchi e ho imparato tante cose ma ora mi sono incasinato in uno sketch e non riesco a venirne fuori.
Praticamente ho usato il tuo schema per collegare il motore step con i pulsanti e il potenziometri e cercando di pilotare il motore a mezzi passi riesco a variare la velocità con il potenziometro ma non riesco a invertire il senso di rotazione, potresti aiutarmi per favore?
Autore
Ciao Antonio,
ti invito a leggere alla fine di ogni articolo ci sono due avvisi, uno dei quali chiede di non inserire codice nei commenti in quanto mi arriva illeggibile.
Per invertire il senso di rotazione di un motore passo-passo devi semplicemente ripercorrere al contrario le fasi che hai eseguito.
Se hai una sequenza di fasi A-B-C-D dovrai eseguire D-C-B-A.
Mauro
Buonasera,
complimenti per i tutorial fatti molto bene! Ho seguito le varie parti, io sto eseguendo lo sketch con un Nema 17, ho notato che l’integrato surriscalda parecchio è un problema del motore o devo utilizzare un altro integrato?
grazie!
Autore
Ciao Giorgio,
potrebbe essere colpa di entrambi, se il motore assorbe una corrente superiore a quella che il driver è in grado di erogare quest’ultimo si scalda di certo.
Mauro
Grazie per la risposta. Più precisamente il Nema 17 che utilizzo è il modello 42BYGHW811 con caratteristiche:
NEMA-17 Bipolar 4-wire
Step angle: 1.8°
Holding Torque: 4800g-cm @ 2.5 Amps
tensione funzionamento 3,1V
Secondo lei devo cambiare Driver, per esempio un l298?
Oppure collego il circuito con doppia alimentazione come spiegato benissimo nel suo Blog?
Se il motore passo passo funziona a 3,1V, devo rispettare tale tensione oppure posso usare anche 5V?
Ultima domanda, se dovessi cambiare driver, posso utilizzare sempre questo sketch?
grazie e scusi per le troppe domande
Autore
Ciao Giorgio,
il problema non è tanto il voltaggio, che devi comunque rispettare a 3,1v, ma l’amperaggio perchè 2,5A per fase sono troppi per molti driver comuni, puoi provare la BigEasy driver.
Lo sketch dipende da che driver per motori passo-passo scegli di usare, comunque nel blog ci sono anche degli sketch per controllare altri driver stepper.
Buona sera Mauro, sto provando a motorizzare un condnsarore variabile con uno stepper dello starter kit diarduino uno, ho effettuato svariati tentativi variando i valori della riga 29 ma l’albero o del motore vibra ma non gira. Pensi che devo provare con un altro tipo di motore?
Grazie in anticipo e complimenti per il sito.
Autore
Ciao Vittorio,
se proprio non riesci con questo tipo di circuito ti consiglio di leggere gli articoli dedicati alla EasyDriver che semplifica molto la movimentazione dei motori e ti permette di gestire il 1/2, 1/4, 1/8 di passo, migliorando la precisione nella regolazione.
Ciao Mauro, ancora non ho lasciato perdere tutto, sto insistendo ho provato con un motore passo passo bipolare e pare che provando uno dei tuoi sketch mi funziona cioè gira, però ho notato che girando e trattenendo un po l’albero con le mani si riesce a fermarlo, sapevo che questi motori hanno 1 coppia abbastanza buona cioè mantengono bene il passo, è normale questo?
comunque ho provato lo sketch con motorshield FE e motore bipolare e però al posto di quella motorshield io ne ho una diversa è più piccola misura 4x4cm, vabbè a parte questo, funziona.
Poi visto che funziona ne ho provato un altra con il cambio di rotazione, anche questo funzionava, aveva sempre quel problema di forza, non vorrei poi se un giorno “se non me stufo prima” di adattare il progetto a un lavoro definitivo e se poi il motore non riesce a tenere il passo, (vorrei dire il motore è abbastanza resistente ed è bello pesante misura 4lungh.x4largh.x2,5h cm) anche questo qui sketch funziona.
Adesso stavo provando questo di questa pagina, collegato il tutto ho usato un potenziometro di 4k7 perchè quello da 10k non ce l’ho a disposizione, però premendo sia il pulsante orario sia quello antiorario il motore mi fa 1-2 passi avanti e 1 indietro e il pot. che deve variare la velocità nn fa nessun effetto il motore l’ho collegato come sempre e per i collegamenti ho seguito il circuito lì disegnato,
ti chiedo se possibile cosa potrebbe mancare che mi è sfuggito?
cosa avrei sbagliato secondo te?
Autore
Ciao Marco, sono contento che non demordi 🙂
Molte motor shield sono simili a quella che uso io ed a quella ufficiale arduino ma sfruttano lo steso chip e quindi le stesse uscite.
Per la coppia del motore devi controllare le caratteristiche tecniche, in generale i motori passo-passo non offrono una coppia elevata a meno di non prendere un passo-passo motoridotto.
Per sapere se va bene per il tuo progetto ti consiglio di calcolare, in fase di progettazione, la coppia necessaria e acquistare il motore adeguato.
Lo sketch presentato potrebbe presentare differenze da quelli da te usati in precedenza, prova a controllare se ce ne sono ed adatta questo sketch al tuo progetto, avrai notato che la velocità è regolata dal potenziometro sulla base del delay tra le fasi, puoi anche adattare gli altri a questa funzione.
Controlla che il potenziometro venga correttamente letto da arduino, con il monitor seriale, e che rilevi valori tra 0 e 1023.
Ciao Mauro, per controllare valori sul monitor seriale devo mettere l’istruzione Seria.begin(9600); in void setup all’inizio
e Serial.print(pinPot); in void loop sotto la riga int readPot = analogRead( pinPot );
ho caricato il codice su Arduino però sul monitor seriale mi da sempre valore 0 ripetutamente
invece se scrivo Serial.print(readPot); sul monitor seriale mi da 1023 ripetutamente
ho anche sostituito il potenziometro con uno di 2,2 Mohm invece di 4K7 però niente da fare
mi pare che il potenziometro non me lo legge affatto
dammi 1 consiglio?
Autore
Ciao Marco,
la prima riga è sbagliata la seconda è corretta.
Tuttavia dipende dove hai collegato il potenziometro, ti consiglio di leggere le mie lezioni del corso base per capire come funziona il monitor seriale e come collegare il potenziometro per leggerlo.
Commenta quelle lezioni se hai dubbi.
Ciao Mauro, adesso riesco a leggere il potenziometro, ok.
il problema persiste sulla rotazione del motore, misurando sulle fasi la tensione non mi arriva a 3V dei 12V di alimentazione scelta, il fatto è che si muove xò non capisco dove sbaglio perchè la sequenza delle fasi l’ho trovata prendendo il motore a parte e provando con il tester le fasi, nello sketch precedente m’ha funzionato, lasciando invariato il collegamento ho solo caricato questo sketch, ho cercato di invertire i pin su questa riga
int motorPinx[] = {7, 8, 10, 12}; questi sono i pin che uso io per comodità
e in questa riga
int sequenza[] = {1,3,2,4}; però questa non ho capito che funzione ha
Autore
Ciao Marco,
nella descrizione dello sketch trovi riga per riga a cosa servono.
La sequenza serve a definire come muovere le fasi in funzione di come le hai collegate, nel mio caso 1,2,3,4 nel tuo potrebbe essere differente.
Leggi bene l’articolo e troverai gli errori che stai facendo come per il potenziometro, se proprio non riesci usa l’altro sketch aggiungendo le parti di questo che ti servono.
Ciao Mauro, mi sono dimenticato di dirti la motorshield L298N che sto usando è più semplice dell’altra questa rimane esterna ad Arduino e devo fare IO i collegamenti, ed ha solo 4 pin di ingresso e 4 uscite per il motore 4 diodi di ricircolo e l’integrato L298N.
Mentre la motorshield L293D andava attaccata direttamente ad Arduino, era difficile perchè come mi hai detto il codice doveva essere scritto specifico per questa.
con questo ti volevo dire che con quello che ti ho detto sopra la schedina per me non centra, però non so quale è il problema.
Grazie
…..segue il primo messaggio.
Ho misurato la tensione sui morsetti ma non arriva a quella stabilita ho aumentato anche il tempo a 2 sec, ma il problema non è questo, perchè poi sugli esempi precedenti che ho testato anche riducendo a 100 millisec lo faceva girare il motore
Autore
Ciao Marco,
vedi la mia risposta dettagliata.
Autore
Ciao Marco, ho immaginato che la schedina fosse esente dal problema.
Il diverso funzionamento potrebbe dipendere dalla gestione delle fasi e del potenziometro.
Ciao Mauro
non so dove posso farti questa domanda perciò te la scrivo qui,
io tempo fa ho acquistato Arduino Uno completo di integrato ATMEGA328P ma poi invece di cancellare e riprogrammare più volte l’integrato ne ho comprato un altro di integrato ATMEGA328P, il problema è che, quando vado a caricare la sketch sull’Arduino con l’integrato nuovo mi da errore di sincronizzazione,
cosa può essere?
lo sketch caricato sull’integrato già esistente va a buon fine mentre quello nuovo no
Se pensi alla porta USB ti dico che è sempre la stessa, perchè di solito se la porta USB non fosse quella usata di sempre mi da l’errore di non sincronizzazione, perciò devo scegliere la porta giusta tramite software di Arduino
Ti volevo chiedere poi dove posso trovare sui tuoi appunti il collegamento dell’Arduino ATMEGA328P, se lo dovessi usare una volta programmato con Arduino Uno fuori dalla medesima scheda, cioè cosa gli serve del minimo indispensabile per farlo funzionare?
Autore
Ciao Marco,
il nuovo integrato che hai acquistato probabilmente è senza bootloader, prima dovrai caricarlo.
Per informazioni su come caricare il bootloader, come collegare arduino senza la board puoi cercare sul web, so che ci sono molti tutorial che lo descrivono, io personalmente non ho scritto alcun tutorial su tale argomento.
Ciao Mauro,
grazie sono riuscito a caricare il bootloader sull’ATMEGA328 nuovo trovando il circuito che lo può fare e poi sono riuscito a caricarci lo sketch
Autore
Ottimo Marco,
se ti va di condividere questa tua esperienza mandami le foto, descrizione e schermate che la pubblichiamo per tutti coloro che vogliono fare la stessa cosa.
Gent.mo Mauro
Sto sperimentando arduino in collegamento con una stampante 3D. Vorrei pilotare un areatore che va a corrente 220 seguendo le dinamiche del motor step dell’estrusore. Il driver di quest’ultimo fornisce una tensione di 3.1V e una corrente di 2.5A, è un NeMa 17 bipolare. Penso di utilizzare arduino per ricevere il segnale da uno dei fili che parte dal driver ed alimenta il motor step e poi collegare arduino ad un relè, funzionante a 220, che pilota l’areatore a seconda del lavoro del motor step stesso. L’idea è di collegarlo al pin 13 di arduino. Supponendo che il segnale di tensione 3.1 sia sufficiente come segnale High x il pin 13, temo che possa arrivare un flusso di corrente elevato sullo stesso pin bruciando la scheda arduino.
Come posso fare?
Ti chiedo supporto perché non saprei come risolvere il problema.
Autore
Ciao Vito,
il tuo dubbio riguarda la possibilità che una corrente di ritorno attraverso il relay possa danneggiare arduino?
Se ho compreso bene il problema la soluzione potrebbe essere un optoisolatore che ti eviti contatto elettrico tra relay e pin arduino.
Grazie Mauro per la Tua risposta. Ciò che temo , e’ di bruciare Arduino, poiché la corrente che prelevo per per immetterla su Arduino come segnale di imput, e’ quella stessa che alimenta una delle fasi del motore bipolare, essendo di amperaggio 2,5 ampere e 3,1V.. Mi sbaglio ? Se devo attenuare l’amperaggio cosa devo fare?
Per poi immettere il segnale su arduino basta introdurlo su un PIN come il 13 e la massa sul GND oppure e’ errato? Mauro grazie attendo la Tua Risposta.
Autore
Ciao Vito,
non penso di aver compreso il tuo dubbio …
Scusa Mauro, sicuramente ciò che chiedo e’ banale, ma per me forse e’ un eccesso di prudenza. Dato che prelevo il segnale direttamente dalla corrente di alimentazione del drive di uno step motor gestito da un’altra scheda che non e’ Arduino , tensione 3,1V e corrente 2,5 ampere di cui un capo lo innesto sul pin 13 di arduino mentre l’altro lo innesto nel GND di arduino . Temo C he la corrente di 2,5 ampere siano eccessivi per Arduino dato che gestisce 40 mampere ( se non ricordo male) per ogni pin e non so se sto facendo i giusti collegamenti. In questo caso Arduino mi servirebbe per gestire un rele a 220 che comanda un areatore a seconda della rotazione di un motore step gestito da un’altra scheda. Credo che l’unico segnale per me possibile per gestire le due cose sia quello di prelevare la tensione del motorino comandato da questa scheda e convogliarla su arduino che a seconda gli impulsi mi gestisce il rele sull’areatore. Non so se sto facendo la giusta manovra e i giusti collegamenti su Arduino. Ti ringrazio per la Tua pazienza!!
Autore
Ciao Vito,
la corrente, o assorbimento, è proporzionale a quella richiesta dal dispositivo, in questo caso arduino.
E’ come un rubinetto, mi perdonino gli elettronici puri, anche se il tubo eroga potenzialmente 4Lt al minuto nessuno ti impedisce di aprirlo poco e ottenere solo un filo d’acqua.
In ogni caso se ci metti un optoisolatore il problema lo eviti al 100%
Grazie Mauro sei stato gentilissimo era ciò che volevo sapere. Sono riuscito nell’intento e funziona benissimo!!
Un saluto e ancora un grazie per la Tua chiarezza e disponibilità.
A presto Vito.
Salve, è da pochissimi giorni che ho una scheda Arduino Uno R3. Ho provato a realizzare questo schema, ma ovviamente non funziona. Immagino che sia per il driver che sto usando, un uln2003A (versione montata su basetta con led indicatori di fase). Vorrei solo la conferma, perchè ho ordinato il driver che lei ha usato, ovvero il SN754410NE. Ci riproverò appena arriva.
Può consigliarmi un buon manuale per studiare Arduino?
Saluti
Bruno
Autore
Ciao Bruno,
il driver corretto per questo esperimento è quello mostrato.
Se cambi il driver dovrai scrivere uno sketch adatto.
Per il manuale ti posso consigliare quello del Kit Arduino ufficiale che trovi in vendita su robotics-3d.com
Grazie Mauro. Sul manuale che mi ha indicato, troverò spiegazioni su cosa differisce la compilazione degli sketch in base al driver utilizzato? Altrimenti dove posso trovare documentazione in merito?
Buona giornata
Bruno
Autore
Ciao Bruno,
i manuali presenti nei kit sono generici e fatti per aiutare tutti a muovere i primi passi con arduino, se ti occorrono manuali specifici devi ricercarli nel web o in qualche negozio di elettronica.
Salve Mauro, in tutta sincerità ho provato svariate volte a far funzionare questo “circuito” ma senza risultato. Ho usato gli stessi componenti da te utilizzati. Sono sicuro che da qualche parte sto sbagliando ma non capisco dove. Mi era venuto un dubbio: io ho usato motori nema17, ma seguendo lo schema, li alimento praticamente dai 5 volt di arduino. Premendo i pulsanti il motore “tenta di girare” ma non lo fà. So che il comando dei pulsanti arriva correttamente perchè se premo orario il motore tenterà di girare in quel verso (ma senza riuscirci). Se in moto orario prendo il perno e tento di farlo ruotare in senso antiorario offre resistenza, mentre se lo accompagno in senso orario lo sento “libero di girare”.
Sto sbagliando l’alimentazione? Dovrei alimentare il driver con una tensione opportuna? I motori emettono un leggero ronzio. Ho provato anche a cambiare il delay ma senza risultato (i motori hanno 200 passi e applicando la tua formula ne derivano 5 ms di delay).
C’è qualcosa che posso provare o controllare?
Buona giornata.
Bruno
Autore
Ciao Bruno,
di certo l’alimentazione è fondamentale, se i tuoi motori sono dei 12v devi usare un adeguata alimentazione.
Aggiungi che la corrente erogata dai 5v di arduino potrebbe non essere sufficente ai motori; molto dipende dalle caratteristiche del motore e NEMA17 non indica null’altro che il tipo di attacco/flangia di giunzione meccanica.
Per i tempi, hai letto bene la formula, parte dal principio che tu conosca le caratteristiche meccaniche del motore e la velocità necessaria a compiere un giro completo, se questa informazione non la conosci puoi solo provare con delay alti per verificare il movimento.
Ok. Credo di aver capito dov’è il problema. Forse sono stato fuorviato da cio che ho letto sul web circa l’alimentazioni di questi motori. Leggevo spesso che si potevano alimentare con diversi valori di voltaggio ma devo aver capito male il concetto. Di seguito le caratteristiche dei miei motori:
Modello motore: 42BYGHW208
n° di fili: 4
Angolo di step: 1,8°
Passi per giro: 200
Tensione: 12V
Corrente: 0,4A
Resistenza di fase: 30 ohm
Induttanza di fase: 37 mH
Coppia: 2600 g.cm
Diametro asse: 5mm
Per gli step, avevo impostato bene il delay.
E’ chiaro che serve necessariamente la 12V. Mi hanno appena consegnato tre Easy Driver, proseguirò con le prove, e questa volta li alimenterò nel modo coretto. Grazie per l’aiuto Mauro.
Autore
Ottimo Bruno.
Ciao,
utilizzando un driver l298n, posso decidere il verso di rotazione tramite pulsanti?
puoi indicarmi qualche articolo?
Grazie.
Umberto
Autore
Ciao Umberto,
puoi provare a seguire il ragionamento e lo schema di collegamento usato con la motor shield per il controllo dei motori passo-passo.
Ho scritto e spiegato come fare in un articolo sul blog.
Utilizza il motore di ricerca in alto a destra per trovare l’articolo.
ciao Mauro, complimenti per le guide molto esaustive e precise, vorrei provare a realizzare il tuo circuito per muovere un telescopio, al quale collegherò una webcam sull’oculare, volevo chiederti 2 cose, essendo per me una novità arduino:
il codice come devo modificarlo per usare 3 motori? lo copio 3 volte associando ad ogni blocco i pin che ho usato per il rispettivo motore?
è possibile avere 2 tasti ed un potenziometro per ogni motore, giusto? non ci sono pericoli di conflitti? come ad esempio regolando un potenziometro varia la velocità di tutti i motori?
infine mi manca di sapere come collegare l’alimentazione e quale alimentazione sia necessaria.
i 3 motori che intendo usare saranno uno per spostamenti verticali, uno per quelli orizzontali ed infine uno per la messa a fuoco
grazie mille e complimenti ancora per le guide
Autore
Ciao Michele,
in merito alle modifiche del codice devi mantenere fisse la setup e la loop uniche nello sketch e, semmai, duplicare la parte dei motori e dei pulsnati ricordandoti di cambiare i pin in base a quelli che definirai nel circuito.
In ogni caso prima di eseguire queste modifiche ti consiglio di seguire almeno il mio corso base gratuito arduino on-line per prendere confidenza sul codice.
Ho un motore stepper 220v 515w hp0,7 che faceva parte di una tagliaverdure .Il motore e’stato maldestramente separato dal circuito elettronico di avviamento.Io sono di Manfredonia ,ho sentito chiunque del mestiere che potesse verosimilmente collegare il motore e farlo ripartire.Sono tutti rimasti sconcertati di fronte a un motore con uscita a 4 fili e con i multimetri impazziti che chiudevano o aprivano i circuiti in modo per loro incomprensibile . La conclusione e’ che non so cosa fare per risolvere il mio problema.Potete suggerirmi qualcosa? grazie Francesco
Autore
Ciao Francesco,
non saprei come aiutarti, lascio il tuo commento online nel caso qualcuno sappia come aiutarti.