EasyDriver et moteur bipolaire + Laser (Harpe)

Bon, visiblement le laser fonctionne, le BC547 chauffe mais sans plus (a mon avis je pourrais pas l'utiliser plus de 20 minutes d'affilées XD) disons que même au bout de 5 minutes il est tout a fait possible de le tenir a main nu, on sent la chaleur, mais leger !

Bref, sinon j'ai un souci avec le stepper ! Quand j'essais le code d'exemple, ça fonctionne, le moteur tourne ! Par contre que j'utilise le code du gars qui a fabriquer une harpe, tout par en vrille XD, c'est du au fait qu'il soit sur un ULN2003 et moi un L293D ou ça change rien ?

Voilà le premier essais ! https://www.youtube.com/watch?v=uuZZsI-Ie-g&feature=youtu.be

“Cette vidéo est privée”

A priori c’est résolu pour la vidéo 8)

Bon ça avance 8)

existe t’il un moyen de faire des demi pas avec l’arduino ?
Mon moteur fait 20 pas visiblement, j’en demande 9 d’un coté, et 9 de l’autre, ce qui est relativement large pour un moteur de 20 pas, y a t’il un moyen de diviser par 2 l’angle sans réduire le nombre de rayon ?

Bizounours: Bon ça avance 8)

existe t'il un moyen de faire des demi pas avec l'arduino ? Mon moteur fait 20 pas visiblement, j'en demande 9 d'un coté, et 9 de l'autre, ce qui est relativement large pour un moteur de 20 pas, y a t'il un moyen de diviser par 2 l'angle sans réduire le nombre de rayon ?

bonjour Ce n'est pas l'arduino qui gere le micros-pas , mais le driver (A3967 Allegro) il semble que ton easy driver soit par defaut en 1/8 microspas apres le microstepping c'est de la gestion de courant "fine" entre enroulements encore faut il que le moteur sache gerer/encaisser ça

A3967 microstepping driver MS1 and MS2 pins broken out to change microstepping resolution to full, half, quarter and eighth steps (defaults to eighth) Compatible with 4, 6, and 8 wire stepper motors of any voltage Adjustable current control from 150mA/phase to 750mA/phase Power supply range from 7V to 20V. The higher the voltage, the higher the torque at high speeds

Artouste:

Bizounours:
Bon ça avance 8)

existe t’il un moyen de faire des demi pas avec l’arduino ?
Mon moteur fait 20 pas visiblement, j’en demande 9 d’un coté, et 9 de l’autre, ce qui est relativement large pour un moteur de 20 pas, y a t’il un moyen de diviser par 2 l’angle sans réduire le nombre de rayon ?

bonjour
Ce n’est pas l’arduino qui gere le micros-pas , mais le driver (A3967 Allegro)
il semble que ton easy driver soit par defaut en 1/8 microspas
apres le microstepping c’est de la gestion de courant “fine” entre enroulements
encore faut il que le moteur sache gerer/encaisser ça

A3967 microstepping driver
MS1 and MS2 pins broken out to change microstepping resolution to full, half, quarter and eighth steps (defaults to eighth)
Compatible with 4, 6, and 8 wire stepper motors of any voltage
Adjustable current control from 150mA/phase to 750mA/phase
Power supply range from 7V to 20V. The higher the voltage, the higher the torque at high speeds

En faite je suis passer sur le L293D, j’arrive pas a coder l’EasyDrive :confused:

Bizounours: En faite je suis passer sur le L293D, j'arrive pas a coder l'EasyDrive :/

Alors pas de microstepping

Artouste:

Bizounours:
En faite je suis passer sur le L293D, j’arrive pas a coder l’EasyDrive :confused:

Alors pas de microstepping

Bon bah je devoir me faire violence alors :drooling_face:

Artouste:

Bizounours: En faite je suis passer sur le L293D, j'arrive pas a coder l'EasyDrive :/

Alors pas de microstepping

si tu peux en faire, mais il faut utiliser la lib AFMotor

  Serial.println("Micrsostep steps");
  motor.step(100, FORWARD, MICROSTEP); 
  motor.step(100, BACKWARD, MICROSTEP);

infobarquee:

Artouste:

Bizounours: En faite je suis passer sur le L293D, j'arrive pas a coder l'EasyDrive :/

Alors pas de microstepping

si tu peux en faire, mais il faut utiliser la lib AFMotor

  Serial.println("Micrsostep steps");
  motor.step(100, FORWARD, MICROSTEP); 
  motor.step(100, BACKWARD, MICROSTEP);

Bon là , il faut que je regarde cette lib, je ne vois pas bien comment cette librairie gererait du micropas sans driver prevu pour. Mais si il y a une astuce soft pourquoi pas

je 'utilise avec le shield 293 pour mon projet de motorisation d'une lunette astro pour un pote

infobarquee: je 'utilise avec le shield 293 pour mon projet de motorisation d'une lunette astro pour un pote

ok lu ça sur la lib

"Microstepping" is a method where the coils are PWM'd to create smooth motion between steps

A voir ce que ça donne en realité , mais si tu en est satisfait

oui ca va avec un nema17

Arf, j’ai rebranché le v4.4 et j’ai trouver pas mal de truc, reste a les comprendre.

Dans l’ordre :
Pour le changement de pas, il suffit d’attribuer un pin a MS1/2 et de les mettres HIGH / LOW selon ce que je veux ?
“The Easy Driver is able to operate in 1/8th, 1/4, half, and full step (2 phase) modes. These four modes are selected by the logic levels on the MS1 and MS2 input pins. Normally, the pull-up resistors on the Easy Driver hold MS1 and MS2 high, which results in a default setting of 1/8th microstep mode. You can pull either or both to ground to select the other 3 modes if you want. See the table below:”

Puis niveau code j’ai trouver ça :

void loop()
{ 
  //rotate a specific number of degrees 
  rotateDeg(360, 1); 
  delay(1000);

  rotateDeg(-360, .1);  //reverse
  delay(1000);

"rotateDeg(360, 1); " Ici par exemple, je rentre → rotateDeg(4, 9); et le moteur va me faire 9 angles de 4° ?

Si oui c’est au top :grin:

Franchement, pour ce genre d'application je doute que le moteur pas-à-pas soit l'actionneur le plus adapté. Je pense qu'un galvanomètre serait bien plus pratique, plus véloce et bien plus silencieux. Puisque tu as l'air d'utiliser du matériel de récup (moteur pas-à-pas de lecteur de disquette ou de cd) tu devrais regarder du coté des moteurs de déplacement des têtes de disques durs.

Ca ce contrôle avec l'Arduino sans Driver ?

Parce que j'en ai une chier qui servent pas de DD 8) mais pas envie de devoir recommander un driver / shield encore XD

Bon j’ai plus ou moins réussis ce que je voulais, je dit plus ou moins parce que ça s’en approche, mais c’est pas ça XD

J’ai donc fait ça:

# define DIR_PIN 2
# define STEP_PIN 3

int laser = 8;
int delaylaser = 5;

void setup() 

{ 
  pinMode(DIR_PIN, OUTPUT); 
  pinMode(STEP_PIN, OUTPUT); 
  pinMode(laser, OUTPUT);
} 

void loop(){ 

  //rotate a specific number of degrees 
    
  rotateDeg(1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(1, 1);
  delay(5);

  digitalWrite(laser, HIGH);             
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(-1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(-1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(-1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(-1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(-1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);
  rotateDeg(-1, 1);
  delay(5);
  digitalWrite(laser, HIGH);               // Turn on the laser for the 1st beam.
  delay(delaylaser);
  digitalWrite(laser, LOW);

}

void rotateDeg(float deg, float speed)
{ 
  //rotate a specific number of degrees (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (deg > 0)? HIGH:LOW;
  digitalWrite(DIR_PIN,dir); 

  int steps = abs(deg)*(1/0.225);
  float usDelay = (1/speed) * 70;

  for(int i=0; i < steps; i++){ 
    digitalWrite(STEP_PIN, HIGH); 
    delayMicroseconds(usDelay); 

    digitalWrite(STEP_PIN, LOW); 
    delayMicroseconds(usDelay); 
  } 
}

Le truc c’est que c’est pas très stable, ça fait des points qui bavent, mais surtout, si j’en suis l’explication du code, mon arc devrais faire 5 ou 6° maxi, alors que là il en fait presque 160° ]:smiley:

c'est juste une quetion de réglage du nombre de pas du moteur.

Bizounours: Ca ce contrôle avec l'Arduino sans Driver ?

Parce que j'en ai une chier qui servent pas de DD 8) mais pas envie de devoir recommander un driver / shield encore XD

bonjour ça se controle avec les drivers que tu a déjà voir par exemple http://www.youtube.com/watch?v=6r7dntaRDwo http://www.youtube.com/watch?v=uM63nUaGgao

et ça avec un principe different mais efficace aussi http://www.youtube.com/watch?v=qPX6Sfj8YKw

Artouste:

Bizounours: Ca ce contrôle avec l'Arduino sans Driver ?

Parce que j'en ai une chier qui servent pas de DD 8) mais pas envie de devoir recommander un driver / shield encore XD

bonjour ça se controle avec les drivers que tu a déjà voir par exemple www.youtube.com/watch?v=6r7dntaRDwo www.youtube.com/watch?v=uM63nUaGgao

et ça avec un principe different mais efficace aussi www.youtube.com/watch?v=qPX6Sfj8YKw

J'arrive pas a voir les vidéos a cause de ma connection, mais ça me semble pas mal :D

Sinon j'aimerais déjà m'en sortir avec ce que j'ai là déjà XD

infobarquee: c'est juste une quetion de réglage du nombre de pas du moteur.

Je suppose que c'est vers là que je doit me concentré ? :

void rotateDeg(float deg, float speed)
{ 
  //rotate a specific number of degrees (negitive for reverse movement)
  //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  int dir = (deg > 0)? HIGH:LOW;
  digitalWrite(DIR_PIN,dir); 

  int steps = abs(deg)*(1/0.225);
  float usDelay = (1/speed) * 70;

Malheureusement je ne comprend pas du tout ce passage (tout le void rotateDeg)