Aiuto novellino

Salve a tutti ,
Sono nuovo del forum ed ancora non so bene districarmi bene al suo interno,sono un fabbro con la passione per l'elettronica ,desidero imparare ad usare la versatilità di Arduino ed ho bisogno di imparare a scrivere gli sketch , cercando in rete ho trovato diversi esempi di cui ne ho provato alcuni per azionare motori passo passo con driver tb656, ma tutti gli esempi trovati permettono l'uso di un solo motore , ed io ne vorrei programmare più di uno nello stesso sketch .
Potete aiutarmi a trovare il giusto inizio al fine di imparare la creazione di sketch autonomamente ?
Qualcuno si renderebbe disponibile ad aiutarmi alla compilazione di un disegno per due o più motori ?
Grazie anticipatamente, saluti Maurizio

dovresti essere più specifico, quando dici più di uno intendi due, tre, 10? Devono girare contemporanemante facendo giri diversi a velocità diverse o in sequenza? Intanto per farti un idea puoi vedere qua che ci sono degli esempi

Grazie per la risposta
Inizio dagli assi : al momento voglio iniziare ad usare due assi ma vorrei uno sketch che mi permette di aggiungere altri assi (terzo e quarto),dai tentativi che sto facendo con uno sketch trovato in rete sono riuscito a modificarlo per due tb6560 ma sto riscontrando difficoltà nella sincronizzazione , movimento simultaneo o alternato dei motori con verso di rotazione e numero di giri differenti o uguali, insomma per farla breve vorrei capire alcuni passaggi per rendere queste opzioni possibili ,al momento non ho necessità precisa , ho appena visto il link consigliato ma è per un solo driver il che mi riporta al mio bisogno , un solo asse già lo risolto .
Non so come poter postare foto per mostrare gli sketch che ho modificato , il PC non è in rete ,
Vorrei costruire un pantografo senza CNC , utilizzando la stessa memorizzazione (da modificare a piacimento) all'infinito con una sola scheda per non avere problemi di sincronizzazione con diverse schede.

Come posso inserire foto nel post ?

... come inserire allegati (foto e quant'altro) è descritto nel REGOLAMENTO (... che dovresti aver letto) come è altresì descritto come inserire correttamente il codice.

Guglielmo

Confesso:
Ho letto il regolamento ma non fino in fondo , ma ritorno a leggere .

Inferro2004:
Ho letto il regolamento ma non fino in fondo , ma ritorno a leggere .

… quelle sono cose che stanno in testa non in fondo … punti 7, 8 e 9 … :smiley:

Guglielmo

P.S.: Il bottone per il codice è cambiato rispetto a quanto li scritto, ora è quello con il simbolo </> … primo a sinistra

Il codice che ho modificato , vorrei mettere foto delle modifiche da me effettuato , ma sono più di una , se non è sgradita la cosa .

Inferro2004:
Il codice che ho modificato , vorrei mettere foto delle modifiche da me effettuato , ma sono più di una , se non è sgradita la cosa .

Foto del codice NON servono a nulla e non permettono, a chi ti vuole aiutare, di fare prove; metti direttamente il codice (… mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra) o, se oltre i 9KB, mettilo come allegato.

Guglielmo

Allora non le metto, il PC non è più connesso in rete e scrivo da Cell , domani vedo se riesco a trascrivere tutto su arduidroid e provo a postare .
Buona serata ,
Grazie

Maurizio

Quello che vuoi fare non è proprio semplice, per interpolare tre assi senza perdita di passi penso che devi usare la funzione millis in modo da poter gestire temporizzazioni diverse contemporaneamente, altro di preciso non saprei dirti :slightly_frowning_face:

Int dirPin=2;
Int DirezionePin=8;
Int stepperPin=3;
Int stepperPin2=9;
Int buttOrario=5;
Int buttAntior=4;
Int buttPiu=6;
Int buttMeno=7;
Int stepNumber=200;
Int stepNumber2=200;
Int direzione=true;
Int direzione 2=true;

Void setup (){
         pinMode(dirPin, Output);
         pinMode (DirezionePin2, Output);
         pinMode (stepperPin2, Output);
         pinMode (stepperPin, Output);

         pinMode (buttOrario, Output);
         pinMode (buttAntior, Output);
         pinMode (buttMeno, Output);
         pinMode (buttPiu, Output);
         }

Void stepperPin2(booleane dir,int stepperPin2){
         digitalWrite(dirPin, dir);
         delay(50);
         digitalWrite (DirezionePin2, dir);
         delay (50);
         for (int i=0;i<steps;i++){
         digitalWrite (stepperPin,HIGH);
         delay (5);
         digitalWrite (stepperPin,LOW);
         delay (5);
         digitalWrite (stepperPin2,HIGH);
         delay(5);
         digitalWrite (stepperPin2,LOW);
         delay (5);
         Serial.begin(9600);
         }
     }

Void loop(){
         step(direzione=true, stepNumber*2);
               (direzione 2=false, stepNumber*1);
         delay (500);
         step(direzione=false, stepNumber*2);
         step(direzione2=true, stepNumber*1);
         delay (500);
}

Con questo codice ottengo giri motori simultanei
come se direzione 2 non esistesse.
Stasera inserisco l’altro codice che è scritto uguale ma con una parentesi graffe in più che farà girare i motori in sequenza.
Saluti Maurizio.

void step(booleane dir, int stepperPin2){
     digitalWrite (dirPin, dir);
     delay(50);
     for(int i =0; i< steps ; i++){
     digitalWrite (stepperPin, HIGH);
     delay(5);
     digitalWrite (stepperPin, LOW);
      delay(5);
     Serial.begin(9600);
   }
     digitalWrite(DirezionePin2, dir);
     delay (50);
      for (int i =0; i<steps; i++){
      digitalWrite (stepperPin2​, HIGH);
      delay (5);
      digitalWrite (stepperPin2, LOW);
      delay(5);
      Serial.begin(9600);
    }
 }

. Cambiando void step lasciando tutto il resto identico ottengo un movimento a sequenza , prima gira direzione e poi direzione 2 .
Che gira va bene ma il verso di marcia è quello di direzione , mentre direzione 2 non esistesse .

Ho notato adesso di aver commesso un errore dovuto al correttore , nello sketch precedente void stepperPin2 non esistesse è void step (booleane…) .
Ringraziando per l’attenzione GRAZIE.

non ho l'epserienza necessaria per capire tutto il tuo listato, vedo però delle cose che mi sembrano un po' strane, tipo:

Int direzione 2=true;
intanto il 2 dovrebbe essere attaccato al nome della variabile direzione, inoltre dovresti dichiarare la variabile come booleana e non int se vuoi associargli solo i due stati true e false

Nei cicli for fai riferimento a steps, ma non lo vedo da nessuna parte dichiarato

poi dichiari per tre volte Serial.begin(9600); non andrebbe messo solo in setup, non contando che la seriale nemmeno viene usata?

ultima cosa che noto di strano (almeno per me) dichiari delle varibili come butt.... che presumo siano pulsanti, ma poi in setup li imposti come output e non come input, anche se nel resto del listato non li usi non sarebbe meglio impostarli subito in modo corretto?

per il resto non ho neuroni a sufficienza per capire la logica di funzionamento, magari qualche commento nel listato aiuta chi meglio di me ti potrebbe aiutare :wink:

Ciao Zef ,
Si hai ragione direzione2 è attaccato , lo trascritto male ,
I pulsanti anche li hai ragione , copiare è stancante ed ho sbagliato ma non usandoli no ho nemmeno notato che non funziona , li correggero ,
Int direzione = true è presente nello sketch citato sopra nel link perché​ era previsto che venisse pilotato con i pulsanti , io ho aggiunto un secondo asse e step finali , praticamente i pulsanti non mi servono per il momento.

Per la booleane non so dirti molto , non ho mai programmato e non conosco il linguaggio , mi piacerebbe approfondire .

Non so se si può risolvere il problema di ottenere direzioni e n.Giri differenti altrimenti dovrò passare al CNC x il pantografo , ma voglio approfondire Arduino anche per altri usi , i due stepper sono solo il mio primo passo a passo .

se vuoi farti un pantografo, dovresti provare a vedere come fanno quelli che fanno stampanti 3D.
usano anche loro arduino, il mega , mi pare, poi pero' hanno anche dei programmi per gli assi.
con arduino trattano solo i segnali di step e dir ed enable per comandare i ponti e di conseguenza i motori.
chi dice ai motori cosa devono fare, da quale parte girare e con quale velocita' è un apposito programma.
senza quello, penso che non si riesca a far fare ai motori il lavoro per costruire un disegno, oppure visto il tuo lavoro, tagliare/disegnare su delle lamiere, poi magari mi sbaglio.

non ne so molto, ma ho visto lavorare dette stampanti e anche un pantografo laser e mi hanno detto che appunto serve un programma specifico il quale genera delle coordinate per far muovere i motori da un punto ad un altro con movimenti interlacciati che non risiede in arduino ma sul pc.
tra pantografo, cnc, stampante 3d, c'è poca differenza , lavorano piu' o meno allo stesso modo, cambia solo l'utensile che fisicamente fa il lavoro.
nel plotter, magari è una penna, nella cnc o su un pantografo, una fresa, un cannello da taglio, oppure un laser, nella stampante 3d un estrusore ecc. ecc.
questo è tutto quello che so, spero ti sia utile.
ciao.

Ti ringrazio Truce per tutto quello che dici ,
Tutto esatto , e gia consapevole ne sono , il fattore è che il pantografo è solo una scusa veritiera , anni fa x caso ho comprato dei motori che mi furono spacciati x occasione , erano i tempi in cui iniziavo a giocare con l'elettronica , i motori li misi da parte in quanto mi dedicavo ad imparare a costruire le mie schede elettroniche , tra cui ne montai pure una per i passo passo .
La cosa bella dei stepper è che chiamarli motori è quasi un offesa , ci puoi fare di tutto , pantografo ad esempio, so bene che il tipo di servizio offrono i programmi CNC , ma io prima di tutto voglio capire Arduino se in una settimana sono in grado di modificare uno sketch da ignorante con l'aiuto di chi mi dirà che ad un tratto del testo ho connesso errore x ,in quel momento mi si aprirà una nuova consapevolezza di aver appreso qualcosa in più .

ok capito, come non detto. :slight_smile:
ciao.

… in quel momento mi si aprirà una nuova consapevolezza di aver appreso qualcosa in più

Questo è lo sketch, rivisto e corretto, prova a capire cosa sbagliavi

int dirPin = 2;
int DirPin2 = 8;
int stepperPin = 3;
int stepperPin2 = 9;
int buttOrario = 5;
int buttAntior = 4;
int buttPiu = 6;
int buttMeno = 7;
int stepNumber = 200;
int stepNumber2 = 200;
boolean direzione = true;
boolean direzione2 = true;

void setup () {
  pinMode (dirPin, OUTPUT);
  pinMode (DirPin2, OUTPUT);
  pinMode (stepperPin2, OUTPUT);
  pinMode (stepperPin, OUTPUT);
}

void loop() {
  step(direzione = true, stepNumber * 2, direzione2 = false, stepNumber2 * 1 );
  delay (500);
  step(direzione = false, stepNumber * 2, direzione2 = true, stepNumber2 * 1);
  delay (500);
}

void step(boolean dir, int steps, boolean dir2, int steps2) {
  digitalWrite (dirPin, dir);
  delay(5);
  for (int i = 0; i < steps ; i++) {
    digitalWrite (stepperPin, HIGH);
    delay(5);
    digitalWrite (stepperPin, LOW);
    delay(5);
  }
  digitalWrite(DirPin2, dir2);
  delay (5);
  for (int i = 0; i < steps2; i++) {
    digitalWrite (stepperPin2, HIGH);;
    delay (5);
    digitalWrite (stepperPin2, LOW);
    delay(5);
  }
}

Ciao Brunello
Ho fatto un tentativo ed ha funzionato subito , non lo salvato subito e non so cosa ho fatto e mi ha dato errore di compilazione per Arduino , ho riprovato a rivedere il tutto ma niente , domani lo riscrivo su un nuovo foglio chissà ... Curiosità , la spaziatura tra digitalWrite e la parentesi è necessaria o va attaccata?
Al penultimo digitalWrite ci sono 2 ; è giusto?

In questa impostazione girano in sequenza .

Grazie per l'interessamento