Problema con driver passo passo hy-div268n-5a

La accelstepper è molto ben documentata, guarda meglio.
http://www.airspayce.com/mikem/arduino/AccelStepper/

Se non vuoi usare una libreria il modo più semplice per provare è con due cicli for per inviare gli step necessari, una volta che vedi che funziona come dovrebbe puoi utilizzare millis() per non bloccare il resto del programma mentre il motore gira.

#include <AccelStepper.h>

#define STEP_step 9 // pin impulsi
#define STEP_dir 8   // pin direzione 
#define STEP_en 10   // pin per enable (opzionale)

AccelStepper stepper1(1,STEP_step,STEP_dir);

void setup() {
  // imposta velocità massima e accelerazione in step/sec
  stepper1.setMaxSpeed(5000.0);
  stepper1.setAcceleration(5000.0);
  }

void loop() { 
  
  stepper1.moveTo(1000);
  stepper1.run();
  stepper1.stop(); 
  stepper1.runToPosition();
  
  stepper1.moveTo(-500);
  stepper1.run();
  stepper1.stop(); 
  stepper1.runToPosition();
  
}

Il motore è alimentato, ma non si muove.

-zef-:
Se non vuoi usare una libreria il modo più semplice per provare è con due cicli for per inviare gli step necessari, una volta che vedi che funziona come dovrebbe puoi utilizzare millis() per non bloccare il resto del programma mentre il motore gira.

proverò anche questo.

giannimesse:
Il motore è alimentato, ma non si muove.

Certo che non si muove, ma almeno li hai guardati gli esempi forniti con la libreria ?

si guardati tutti infatti è da quelli che ho preso spunto, ho provato anche a modificare gli sketch con gli output che uso io ma niente da fare, cosa sbaglio? p.s. la cosa che mi preme di più è far muovere il motore del numero di step che gli dico io.

Tutto visto come hai scritto il codice, metti uno stepper.run() subito seguito da una stepper.stop(), in questo modo il motore non si muoverà mai.
Devi mettere solo il comando per lo spostamento e poi eseguire ad ogni ciclo della loop la stepper.run(), è la funzione che si occupa di gestire i singoli step quando necessario.

#include <AccelStepper.h>

#define STEP_step 9 // pin impulsi
#define STEP_dir 8   // pin direzione 
#define STEP_en 10   // pin per enable (opzionale)

AccelStepper stepper1(1,STEP_step,STEP_dir);

void setup() {
  // imposta velocità massima e accelerazione in step/sec
  stepper1.setMaxSpeed(5000.0);
  stepper1.setAcceleration(5000.0);
  }

void loop() { 
  
  stepper1.moveTo(-100);
  stepper1.run();
  stepper1.runToPosition();

  delay(1000);

  stepper1.moveTo(50);
  stepper1.run(); 
  stepper1.runToPosition();

  delay(1000);
  
 }

Adesso volevo ripetere (e fare bene stavolta) il movimento di prima, 100 step in senso antiorario, e 50 step in senso orario. Nonostante ci siano due pause a dividere i due movimenti, il motore fa si due movimenti uno opposto all'altro ma tutti e due di 150 step, dovrebbero essere diversi ma non lo sono.

Certo, all'inizio lo stepper è in posizione 0.
Tu gli fai fare prima 100 passi in un senso, portandolo in posizione -100.
Poi lo porti alla posizione +50, quindi gli fai fare 150 passi, 100 per andare da -100 a 0 + altri 50 per andare da 0 a + 50.
Poi riprende il loop, sei in posizione + 50 e vai in posizione -100 quindi gli fai fare 150 passi, 100 per andare da 100 a 0 + 50 per andare da 0 a -50.
E così via.

Per fare come dici tu hai diversi modi fra i quali:
1 - usi i movimenti relativi invece di quelli assoluti
2 - usi i movimenti assoluti ma all'arrivo imposti la nuova posizione come zero

P.S. il run() prima di runToPosition() è inutile

Adesso il programma funziona ma c'è un problema, funziona solamente fino a 200 step, se gli chiedo di più, incomincia ad andare a scatti e non completa neanche un giro (200 step).

#include <AccelStepper.h>

#define STEP_step 9 // pin impulsi
#define STEP_dir 8   // pin direzione 
#define STEP_en 10   // pin per enable (opzionale)

AccelStepper stepper1(1,STEP_step,STEP_dir);

void setup() {
  // imposta velocità massima e accelerazione in step/sec
  stepper1.setMaxSpeed(5000.0);
  stepper1.setAcceleration(5000.0);
  }

void loop() { 
  
  stepper1.moveTo(-300);
  stepper1.runToPosition();
  stepper1.setCurrentPosition(0);

  delay(1000);
  
  stepper1.moveTo(+300);
  stepper1.runToPosition();
  stepper1.setCurrentPosition(0);
  
  delay(1000);
  
 }

Riduci questi due valori

stepper1.setMaxSpeed(5000.0);
stepper1.setAcceleration(5000.0);

Ho cambiato il valore da 5000 a 1000 e adesso funziona (ma vibra di più), come mai ? Colpa del driver o del motore ?

Io adesso vorrei provare a variare la velocità del motore mediante un potenziometro da 10 kohm, l'ho collegato al pin A0. Adesso il motore si muove con gli step giusti ma molto lentamente e girando il potenziometro la velocità non varia.

#define STEP_step 9 // pin impulsi
#define STEP_dir 8  // pin direzione 
#define STEP_en 10  // pin per enable (opzionale)
#define STEP_potenz A0 // pin collegato al potenziometro

AccelStepper stepper1(1,STEP_step,STEP_dir);

void setup() {
  // imposta velocità massima e accelerazione in step/sec
  stepper1.setMaxSpeed(STEP_potenz);
  stepper1.setAcceleration(STEP_potenz);
  }

void loop() { 
  
  stepper1.moveTo(-300);
  stepper1.runToPosition();
  stepper1.setCurrentPosition(0);

  delay(1000);
  
  stepper1.moveTo(+300);
  stepper1.runToPosition();
  stepper1.setCurrentPosition(0);
  
  delay(1000);
  
 }

non ho mai usato qulla libreria ma dubito che basta indicargli il pin e legga da li il valore analogico, dovresti fare analogRead(STEP_potenz), inoltre calcola che la lettura del potenziometro ti fornisce valori che vanno da 0 a 1023, sicuramente non sono i valori minimi e massimi a cui vuoi far ruotare il motore. Altra cosa, se leggi il valore del potenziometro nel setup verrà eseguita solo una volta poi il motore gira sempre a quella velocità anche se ruoti il potenziometro, e dubito anche che la libreria ti permetta di cambiare velocità mentre sta eseguendo i +-300 passi

In pratica hai impostato velocità A0 ed accelerazione A0

A0 è solo il numero dell'ingresso analogico.
Devi leggerlo.

A proposito....
COME LO HAI COLLEGATO QUESTO POTENZIOMETRO????

risolto questo,
ammesso che sia collegato correttamente,

Metti una formula del genere

float velocita = 1000.0 + 2.0 * analogRead(STEP_potenz);
float accelerazione = velocita * 1.8;

mettila all'inizio del loop, vedrai le variazioni solo dopo che avrà fatto i due run avanti ed indietro.
C'è un sistema per fargli fare uno step alla volta e fargli leggere qualcosa nel frattempo, ma è più complicato e magari lo vedrai successivamente.

Il potenziometro ha il pin centrale collegato a A0 e gli altri due a +5V e GND, lo sketch è stato modificato come descritto e si comporta come se non fosse cambiato nulla.

#include <AccelStepper.h>

#define STEP_step 9 // pin impulsi
#define STEP_dir 8  // pin direzione 
#define STEP_en 10  // pin per enable (opzionale)
#define STEP_potenz A0 // pin collegato al potenziometro

AccelStepper stepper1(1,STEP_step,STEP_dir);

void setup() {
  // imposta velocità massima e accelerazione in step/sec
  stepper1.setMaxSpeed(STEP_potenz);
  stepper1.setAcceleration(STEP_potenz);
  }

void loop() { 

  float velocita = 1000.0 + 2.0 * analogRead(STEP_potenz);
  float accelerazione = velocita * 1.8;

  stepper1.moveTo(-300);
  stepper1.runToPosition();
  stepper1.setCurrentPosition(0);

  delay(1000);
  
  stepper1.moveTo(+300);
  stepper1.runToPosition();
  stepper1.setCurrentPosition(0);
  
  delay(1000);
  
 }

devi mettere nella loop anche:

  stepper1.setMaxSpeed(STEP_potenz);
  stepper1.setAcceleration(STEP_potenz);

e cambiarli in:

  stepper1.setMaxSpeed(velocita);
  stepper1.setAcceleration(accelerazione);