Attuatore lineare (Mini V Linear Actuator Build)

Salve a tutti,
avrei bisogno di aiuto con questo attuatore lineare.
Mini V Linear Actuator Build

Ho utilizzato questo Nema 17
con questo driver Easy Driver

  • Arduino Uno rev3

Il tutorial che ho seguito é questo TUTORIAL

Questo il codice che ho usato

int Distance = 0;  // Record the number of steps we've taken

void setup() {                
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {
  digitalWrite(9, HIGH);
  delayMicroseconds(100);          
  digitalWrite(9, LOW); 
  delayMicroseconds(100);
  Distance = Distance + 1;   // record this step
  
  // Check to see if we are at the end of our move
  if (Distance == 3600)
  {
    // We are! Reverse direction (invert DIR signal)
    if (digitalRead(8) == LOW)
    {
      digitalWrite(8, HIGH);
    }
    else
    {
      digitalWrite(8, LOW);
    }
    // Reset our distance back to zero since we're
    // starting a new move
    Distance = 0;
    // Now pause for half a second
    delay(500);
  }
}

Posta la piastra che deve scorrere, al centro di questa barra di metri 1,5, e mandando in esecuzione lo sctech, avviene un movimento avanti e dietro ripetuto non sempre lisci avvolte tremolante.Inoltre cosa più importante ad ogni esecuzione la piastra si avvicina sempre di più verso una delle estremità, fino a giungere a fine corsa sgranando sulla puleggia.

Cosa vorrei ottenere in realtà? Semplicemente che la staffa si muova in maniera regolare e regolabile tanto a sx quanto a dx da una posizione definita centrale del binario.

Grazie in anticipo per la vostra attenzione.

Ciao Dreamful, secondo me potresti usare due finecorsa: uno posizionato a dx e uno a sx.
Modificando il codice, potresti dire al motore di fermarsi quando riceve il segnale da un finecorsa, ed in base al finecorsa che ha inviato il messaggio, far partire il giusto loop per farlo muovere nella direzione opposta.
Per avere la distanza variabile, ci sono due modi: o sposti i finecorsa manualmente, oppure crei un ciclo for per far fare al motore il numero desiderato di step. Spero di esserti stato di aiuto :wink:

..si avevo pensato anche cosi, ma lo spostamento sx dx varia e quindi il fine corsa non era esattamente la soluzione ideale...ma se non risolvo ...vado con il fine corsa

grazie :wink:

Comunque quello Stepper con quel driver proprio non ci azzeccano.
l'Easy driver che dà al massimo 750mA, non può pilotare un motore che richiede una corrente doppia , 1,5A

Con cosa lo alimenti quel motore ?

Non sono a casa, ma se non ricordo male con 4,5 v come da scheda del motore con un alimentatore da max 1000ma.

....accetto suggerimenti ed indicazioni, grazie in anticipo.

Dreamful:
Salve a tutti,
avrei bisogno di aiuto con questo attuatore lineare.
Mini V Linear Actuator Build

Ho utilizzato questo Nema 17
con questo driver Easy Driver

  • Arduino Uno rev3

Il tutorial che ho seguito é questo TUTORIAL

Questo il codice che ho usato

int Distance = 0;  // Record the number of steps we've taken

void setup() {               
  pinMode(8, OUTPUT);   
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {
  digitalWrite(9, HIGH);
  delayMicroseconds(100);         
  digitalWrite(9, LOW);
  delayMicroseconds(100);
  Distance = Distance + 1;  // record this step
 
  // Check to see if we are at the end of our move
  if (Distance == 3600)
  {
    // We are! Reverse direction (invert DIR signal)
    if (digitalRead(8) == LOW)
    {
      digitalWrite(8, HIGH);
    }
    else
    {
      digitalWrite(8, LOW);
    }
    // Reset our distance back to zero since we're
    // starting a new move
    Distance = 0;
    // Now pause for half a second
    delay(500);
  }
}





Posta la piastra che deve scorrere, al centro di questa barra di metri 1,5, e mandando in esecuzione lo sctech, avviene un movimento avanti e dietro ripetuto non sempre lisci avvolte tremolante.Inoltre cosa più importante ad ogni esecuzione la piastra si avvicina sempre di più verso una delle estremità, fino a giungere a fine corsa sgranando sulla puleggia.

Cosa vorrei ottenere in realtà? Semplicemente che la staffa si muova in maniera regolare e regolabile tanto a sx quanto a dx da una posizione definita centrale del binario.

Grazie in anticipo per la vostra attenzione.

Non è che il movimento a scatti sia dovuto a tutti quei delay??? Il punto zero come fai a farlo??? Non ti conviene usare un encoder per conoscere la posizione della piastra??? Parti dal punto zero e la fai muovere di tot controllandola con l'encoder. E comunque due proximity per farmare tutto in caso di fondocorsa ci vogliono...

E poi scusa, prima di fargli verificare la distanza tu lo fai avanzare??? Perchè la verifica non la inserisci all'inizio del loop??? Nel caso sia minore di 3600 gli fai eseguire quel ciclo e incrementare, altrimenti salta e gira la direzione. No??? Ho capito male il funzionamento???
L'avvicinarsi al fondo corsa secondo me è dovuto a quello. Va avanti, incrementa, verifica la posizione, e così via giro per giro sino a toccare il fondo corsa. Ah, e poi non vedo nessun decremento sulla posizione quando torna indietro. Tu la azzeri del tutto, ma cosa ne sai di dove è quando la azzeri??? Verifica la posizione, se è minore di 3600 gli fai eseguire la prima parte e incrementare, se è inferiore gli fai fare la seconda parte e decrementare. Metti anche un controllo sulla direzione perchè altrimenti verifica, è 3600 torna indietro, decrementa ed è di nuovo minore di 3600, così va di nuovo avanti.
Non so se mi son spiegato.

Grazie per la risposta Lollo82.

In pratica è il mio secondo esperimento con arduino e molte cose mi sono ancora oscure.

Mi sono limitato a prendere lo scketch, prosto nel tutorial (x easy driver), per provare il movimento sull'attuatore e, trovandolo simile alla mia intezione, mi ero semplicemente affidato a quanto fatto dall'autore.

Sicuramente dovrò inserire dei limitatori.
Forse sarebbe il caso, che prima la piastra faccia sx dx fino a fondo corsa, misurando magari l'escursione e poi si setti al centro da solo (fase setup) e poi esegua il loop.
(non so ancora come)

Il motore l'ho preso qui dallo store di arduino, quale sarebbe il giusto driver?
Ho anche questo, ma credo che non vada bene driver

....grazie ancora per gli spunti, cercherò di mettere giù il file appena arrivano i fine corsa...

...il discorso dell encoder non mi è chiaro quale e con quale differenza?

Ma di solito in questi casi si studia il rapporto mm/passiDelMotore e si crea una funzione che letto da seriale la distanza lo porti a quel punto, il fine corsa lo si mette solo all inizio perché pere la fine sai quanto è lunga la tuà Corsa .
Inoltre usar un encoder mentre stai utilizzando è un po. Un nonsense soprattutto se ne utilizzi uno da due soldi. Per il driver il motore girerà sicuramente (utilizza i full step che hanno più coppia) e sicuramente una tensione maggiore dei 5 volt assolutamente . Conta che lo stepper fa 200 step a colpo d occhio ogni mezzo centimetro pensa al delay povero...

....ok quindi aumento la tensione sul motore, ma come imposto il file?
....cosa mi suggerisci?
....una traccia?

grazie Lucailvec.

....credo che devo ripartire da zero, non ho chiaro i comandi per gli stepper...con questo driver e con la sua libreria....
....con il materiale che ho come posso lavorare?

...grazie a tutti.

Sono interessato a questi attuatori e allora ho dato uno sguardo al sito e mi sembra di capire che il kit attuatore completo non esiste nello store per cui bisogna prendere i singoli kit fare la somma dei costi per avere almeno una idea di ciò che costa un attuatore di quella lunghezza, cosa che farò prima di acquistare ma se mi potessi dare una idea del costo attuatore escluso motore mi posso fare una idea rapida dei costi.

Passiamo alle risposte alle tue domande:
La scheda driver che hai acquistato ha davvero un costo modesto, la convenienza però sarebbe massima se oltre alla schedina il venditore creasse un datasheet dettagliato della scheda, ma questo farebbe lievitare i costi per cui in questi casi l'unico testo di riferimento è il datasheet del integrato driver A3967 montato su quella scheda.

Scarica il datasheet:http://www.allegromicro.com/~/media/Files/Datasheets/A3967-Datasheet.ashx

Leggendo il datasheet velocemente e visionando il tuo codice arrivo facilmente alla conclusione che non riuscirai mai ad avere un movimento con velocità costante. Il motivo è dovuto agli impulsi di clock forniti dal codice seguente:

digitalWrite(9, HIGH);
  delayMicroseconds(100);          
  digitalWrite(9, LOW); 
  delayMicroseconds(100);

Dopo queste istruzioni c'è altro codice che impegna il micro per più di 100us, quindi la frequenza generata non sarà una costante di conseguenza non lo sarà la velocità di movimento.

Mantenendo lo stesso codice puoi riuscire a generare una frequenza costante riducendo la frequenza di clock fin tanto che non noti un movimento a velocità costante, se avessi un oscilloscopio ti apparirebbe lampante cosa accade, senza devi lavorare di fantasia con carta e penna.

Per evitare questi problemi il micro di Arduino (come in genere tutti i micro) ha dei timer hardware, uno ad esempio viene usato da analogWrite() per generare un onda quadra sul pin PWM che però ha una frequenza fissa di 490HZ, quindi T = 1/f = 1/490 = 0,002040816 secondi. T è il periodo della onda quadra che espresso in ms è 0,002040816 * 1000 = 2,040816327, che più o meno equivale ad usare delay(1) (1ms) al posto di delayMicroseconds(100).

Grazie ai timer è possibile generare altre frequenza indipendentemente dal codice che il micro deve eseguire. L'unico problema è che i timer sono ostici da comprendere e sono spiegati nel datasheet del microcontroller montato sul tuo Arduino. Ti consiglio di continuare a prendere confidenza con questi attuatori e con il codice necessario per farli lavorare, ma poi se devi fare funzionare una macchina con più assi conviene fare riferimento a progetti già pronti.

Ciao.

Non avevo visto che era un passo passo. In tal caso come ti è stato detto l'encoder non ha molto senso. In caso fosse stato un normale motore a spazzole invece per me ci sarebbe stato a pennello.
Però il punto zero lo devi fare altrimenti come diavolo fa a sapere dove si trova sull'asse???
Io metterei due proximity all'inizio della guida, uno a fare da fondo corsa che arresta il motore in caso di errore (invece di spaccare tutto) e uno appena prima per fare il punto zero.
Io farei così. Nel setup farei scorrere la piastra sino a incontrare il proximity, una volta incontrato si porta al centro della guida (che definirai tu) e gli fai fare quello che tu vuoi. Anche se potresti fare una funzione di punto zero che richiami chessò con un pulsante nel loop, in caso per qualsiasi motivo questo venga perso, chessò, si incastra la guida, prende un colpo, ci metti la mano in mezzo e salta un dente. Possono essere mille motivi. Altrimenti per fare lo zero dovresti sempre fare il reset.
Per come farei io assegnerei una variabile per capire se va verso destra o verso sinistra. Se va verso destra incrementi il valore di posizione, quando arriva alla posizione e deve tornare indietro cambi la variabile e il verso e invece di incrementare la posizione la decrementa. Sino a portarsi nella posizione desiderata. Insomma una cosa del genere. E se incontra uno dei due proximity di finecorsa arresta il motore e chessò ti si accende un led di allarme e richiesta del punto zero.
Addirittura volendo puoi buttarci un lcd per impostare il punto zero e i valori di corsa senza dover tutte le volte ricaricare lo sketch.
Spero di averti dato qualche spunto. E soprattutto di non aver detto castronerie, ma i motori passo passo proprio non li ho mai usati, quindi ti ho detto quello che farei in via teorica, per buttare giu lo sketch devi pensarci tu. Ed è anche la cosa più divertente. :grin: :grin: :grin:

ok ...per il momento un grazie veloce ad entrambi....ma mi ci vuole un bel pò per assimilare, prima di rispondervi...

x MauroTec....non ho le fatture sottomano , ma se non ricordo male il tutto mi è venuto a costare 150/160 euro....senza motore e driver ovviamente

se la dovessi fare tu che cosa useresti...avrei bisogno di un movimento veloce..è la unica mia necessità.....un solo asse.

p.s. il materiale è molto solido e robusto, le spese di spedizione visto le dimensioni dell'asta sono state di 16 euro

se la dovessi fare tu che cosa useresti...avrei bisogno di un movimento veloce..è la unica mia necessità.....un solo asse.

mmm...se la dovessi fare io... troppo complesso da spiegare. Continuando a leggere il tutorial ho notato che hanno sviluppato una libreria AccelStepper: AccelStepper library for Arduino, proprio per evitare il problema che è emerso con quel codice di esempio. Questa libreria molto probabilmente fa ricorso ad uno dei tre timer presenti in Arduino uno (la mega non ricordo quanti timer ha) al fine di ottenere una velocità di movimento costante, che è un Must in questo settore di applicazione (Meccatronica).

Ciao.

Con una vite non riesci a raggiungere alte velocità e lo stepper perde coppia più vai veloce. Dovresti cambiare proprio tipo di meccanica e trasformare tutto girando lo stepper di 90 gradi e usando una cinghia.
Però se le velocità non devono essere impossibili ma sicuramente non le raggiungi con l easy driver evi prendere qualcosa di più calzato (sulla corrente di utilizzo ddl lo stepper) tipo un a4988 o simili .

Con una vite non riesci a raggiungere alte velocità e lo stepper perde coppia più vai veloce. Dovresti cambiare proprio tipo di meccanica e trasformare tutto girando lo stepper di 90 gradi e usando una cinghia.
Però se le velocità non devono essere impossibili ma sicuramente non le raggiungi con l easy driver evi prendere qualcosa di più calzato (sulla corrente di utilizzo ddl lo stepper) tipo un a4988 o simili .

A quale vite ti riferisci?
Io vedo una cinghia montata sull'attuatore in questione.
L'easy driver è ottimo è va anche veloce se in full-step, ma in ogni caso il limite di velocità/coppia dipende in prima istanza dal motore. Se ovviamente il motore è accoppiato ad un drive che non sfrutta pienamente le caratteristiche del motore e l'applicazione lo richiede si deve scegliere un altro driver.

Ciao.

Credo si riferisse ad un'attuatore mosso da una vite senza fine :wink:

Io continuo a preferire le guide a V con i doppi cuscinetti ... Leggermente piu complesse da costruire, se le si vuole fatte bene, ma piu robuste alla fine (se costruite come si deve, ovviamente) :stuck_out_tongue: :smiley:

non so che foto mi ricordassi scusate ragazzi hahaha :grinning:
in ogni caso non è che l easy driver ha le ruote e va volece da solo u.u
Il punto è che fornendo una corrente massima più bassas rispetto a degli altri driver (ricordiamo che ne eroga al amssimo 700 mA sono un po' pochini ) ha di conseguenza una coppia più bassa.
Poi se parliamo di velocità elevate allora ci deve essere una bella coppia per avere delle alte accelerazioni in piccoli spazi.Non so che utilizzo ne deve trarre da quel sistema lineare.
ma etemenanki per piccoli carichi sono migliori i cuscinetti lineari o questi sistemi con tanti cuscinetti roteanti ? :fearful:

E' una domanda difficile ... perche' la risposta non dipende dal carico, ma dalla capienza del portafoglio :stuck_out_tongue: :smiley:

Seriamente, se trovi delle barre rettificate con delle boccole a ricircolo di sfere, sono una delle soluzioni migliori per qualsiasi tipo di carico "standard" (per carichi molto pesanti fabbricano degli speciali cuscinetti lineari a sfere, ma costano un polmone e mezzo l'uno :P) ... per carichi leggeri o medi, puoi usare guide a V, guide a sfere, guide a T, guide ad H, barre a V invertita, barre a bronzine, barre filettate sia con profilo standard che quadrato, barre filettate con boccole a sfere, ed una serie di altri sistemi, anche qui dipende dal "budget", perche' quelle piu "professionali" ovviamente costano di piu ...