Mon moteur pas a pas ne tourne que dans un sens

Bonjour,
Je débute avec arduino et j’ai voulu essayer les moteurs pas à pas. je me suis aidé de ce tuto : http://eskimon.fr/tuto-arduino-603-a-petits-pas-le-moteur-pas-à-pas
et de cette vidéo : U=RI | Arduino Ep.18 - Comment utiliser un moteur pas à pas? - YouTube

Mon moteur est un 28byj-48, et le controlleur et une carte avec un ULN2003APG. Je les ai acheté ici : https://www.amazon.fr/Elegoo-Moteurs-28BYJ-48-ULN2003-Arduino/dp/B06XKRM1P1/ref=sr_1_4?ie=UTF8&qid=1524820731&sr=8-4&keywords=moteur+pas+a+pas

Donc j’ai fait les branchement tout simple comme indiqué sans utiliser la breadboard et voici mon code :

#include<Stepper.h>

int nbPas=200;

Stepper moteurDplcmt(nbPas,8,9,10,11);

void setup() 
{
  moteurDplcmt.setSpeed(60);
}

void loop() 
{
  moteurDplcmt.step(500);
  moteurDplcmt.step(-500);
  delay(500);
}

Voila donc c’est sensé être un truc tout simple pour tester sauf que le moteur ne veux pas tourner dans l’autre sens… Il tourne toujours dans le même sens même quand j’indique un nombre de pas négatif.
Quelqu’un a une explication ?
Merci

Bonjour

  moteurDplcmt.step(500);
  moteurDplcmt.step(-500);
  delay(500);

Essaie

  moteurDplcmt.step(500);
delay(500);
  moteurDplcmt.step(-500);
  delay(500);

Il se lance et immédiatement tu lui dis de tourner dans le sens opposé. Laisse lui un peu de temps ^^

Ça n’a pas maché…
Du coup j’ai essayé d’autres trucs, j’ai essayé de le branché sur le ports CAN, d’inversé le plus et le moins (on ne se moque pas je débute ^^), de remplacé le moins par un tiré du 6, de tester avec un autre moteur, mais ya rien a faire il tourne toujours dans le même sens peut importe ce que je lui indique.
Pourtant j’ai le même moteur et le même contrôleur et lui ça marche niquel.

Il change quand même de sens si tu permutes les fils?

Non Si je permute les fils il ne tourne plus.

C'est pas normal; vérifie le câblage.

Un pàp c'est plein de fils.
Autant que de façons de se tromper.
Revois tout ton câblage, ça ne eut venir que de là, surtout si tu as suivi le tuto d'Eskimon, j'avais fait marcher le mien comme ça.
C'est un moteur que tu as acheté? Si tu as un autre module, monte-le dessus, et fais un test, il peut aussi y avoir un cavalier genre Enable quelque part, je n'ai pas vérifié ta datasheet.
Enfin, si c'est une récup, vérifie qu'il n'y a pas de pont de diodes ou un truc du genre.

Bon, je n’ai pas réussi a régler mon problème mais j’ai trouvé une solution plus ou moins alternative…
J’ai récupéré un code pour faire tourner mon moteur sans utiliser la bibliothèque stepper, et celle-ci quand je l’utilise le moteur tourne bien dans les deux sens quand je le lui demande.
Voici le code :

int Pin0 = 10; 
int Pin1 = 11; 
int Pin2 = 12; 
int Pin3 = 13; 
int _step = 0; 
boolean dir = 0;// gre
void setup() 
{ 
 pinMode(Pin0, OUTPUT);  
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
} 
 void loop() 
{ 
 switch(_step){ 
   case 0: 
     digitalWrite(Pin0, LOW);  
     digitalWrite(Pin1, LOW); 
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
   break;  
   case 1: 
     digitalWrite(Pin0, LOW);  
     digitalWrite(Pin1, LOW); 
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, HIGH); 
   break;  
   case 2: 
     digitalWrite(Pin0, LOW);  
     digitalWrite(Pin1, LOW); 
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
   break;  
   case 3: 
     digitalWrite(Pin0, LOW);  
     digitalWrite(Pin1, HIGH); 
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
   break;  
   case 4: 
     digitalWrite(Pin0, LOW);  
     digitalWrite(Pin1, HIGH); 
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
   break;  
   case 5: 
     digitalWrite(Pin0, HIGH);  
     digitalWrite(Pin1, HIGH); 
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
   break;  
     case 6: 
     digitalWrite(Pin0, HIGH);  
     digitalWrite(Pin1, LOW); 
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
   break;  
   case 7: 
     digitalWrite(Pin0, HIGH);  
     digitalWrite(Pin1, LOW); 
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
   break;  
   default: 
     digitalWrite(Pin0, LOW);  
     digitalWrite(Pin1, LOW); 
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
   break;  
 } 
 if(dir){ 
   _step++; 
 }else{ 
   _step--; 
 } 
 if(_step>7){ 
   _step=0; 
 } 
 if(_step<0){ 
   _step=7; 
 } 
 delay(1); 
}

(Donc si dir et positif il tourne dans un sens et si il est égal a 0 il tourne dans l’autre sens)
Du coup c’est bien la preuve que mon montage est correct (si vous voulez une photo je peux essayer d’en poster une mais il n’y a vraiment rien de plus simple donc je vois pas trop où j’aurais pus faire une erreur) ça sera un peu plus compliquer a utiliser précisément mais ça ira.
Après si quelqu’un a une idée je suis toujours preneur.

int nbPas=200;

Il ne ferait pas plutôt 64 pas ce moteur?

Désolé ça ne marche pas non plus...
Mais j'avoue que je n'ai jamais vraiment compris le système pour calculer les pas d'un moteur... j'ai essayer de comprendre la datasheet mais je n'ai pas compris où il fallait regarder.
Sinon pour ceux qui on le même problème en attendant de trouver une solution vous pouvez reprend le code au dessus, en faire une fonction et la mettre dans une boucle for pour avoir quelque chose de précis.
Merci beaucoup pour votre aide !
(du coup je sais pas trop si je met le topic en résolu ou pas...)

Bonjour à tous,
j'ai exactement le même problème, et cela fonctionne avec le code sans la librairie Stepper.h d'Acedyn (que je remercie) !
C'est, pour le moment, à n'y rien comprendre :slight_smile:

Edit: je viens de tester avec la librairie CheapStepper et cela fonctionne bien.
Je ne comprends pas ce qu'il se passe avec la librairie Stepper !

Sans le programme et sans le câblage, c'est pas forcément évident...

Si tu as repris le premier programme d'Avril, il n'est pas impossible que ce soit par excès de vitesse. Normalement si on essaie de faire tourner un moteur pas à pas trop vite, il vibre et ne tourne pas.

Si j'en crois CheapStepper, le 28byj-48 aurait une vitesse limite de 24tr/mn. Dans le premier programme, il est demandé une vitesse de 60tr/mn. En plus est annoncé 200 pas par tours au lieu de 64, ce qui fait que le moteur doit tourner 3 fois plus vite. On lui demande de tourner à 180tr/mn, ce qu'il ne peut pas faire.

A priori cela ne viendrait pas du câblage j'ai l'impression que CheapStepper et Stepper ont le même besoin, mas ne sait-on jamais...

Bonjour Vileroi,
Effectivement pour le schéma. Je suis cependant sur du cablage, il fonctionne bien avec l second librairie, et j'ai bien checké plusieurs fois.
Pour le code, je me suis dit mon propre code tout simple (2 boucles, une dans un sens et l'autre dans l'autre sens, avec des délais). Cela tourne bien, donc je me dit je que ce n'est pas un problème de nbre de pas ni de vitesse.
J'avais été sur le net pour trouver les caractéristiques du moteur et les ai intégrées.
Je referai des essais plus tard, cela ne peux provenir de de moi de toute façon, il faut que je trouve mon erreur

Je suis cependant sur du cablage, il fonctionne bien avec l second librairie

Encore faut-il que les librairies aient besoin du même câblage (que la succession des pins soient dans le même ordre). Il me semble que c'est le cas, mais je ne peux le certifier.

ce n'est pas un problème de nbre de pas ni de vitesse.

Sauf qu'avec l'exemple du post #1, on est, je pense, bien au delà de ce qui est possible. Ce qui peut expliquer que le premier ne fonctionne pas, mais les autres oui.

Oui, pour le premier exemple, cela ne fonctionne pas car le moteur vibre et ne tourne pas, comme tu l'as expliqué dans ton post précédent. Mais en mettant les bonnes valeurs STEPS et speed, cela tourne que dans un sens, que le pas soit positif ou négatif.
Pour le positionnement des pins, je suis parti des exemples fournies dans la librairie pour leur positionnement, mais cela dit, j'ai peut être fait ça trop rapidement. Je vais ressayer en repartant de zéro :slight_smile: quand j'aurais un peu de temps, l’erreur vient forcément de moi !