Moteur Pas à Pas Arduino (avancer-reculer)

Bonjour, je voudrais faire avancer et reculer un moteur grâce à arduino.
Mais il ne fait que avancer... je suis vraiment débutante en programmation
Voici ce que j'ai mis dans mon code :

#include "Stepper.h"

const int stepsPerRevolution = 200;
unsigned long lastTime3 = 0;
unsigned long thisTime = 0

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

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

void loop() {
	thisTime = millis(); // qu'elle heure est-il?
	if((thisTime - lastTime3) < 3000){
	  myStepper.step(200);  // nombre de pas
	  delay(2000);
	}
	else{
	  myStepper.step(-300); // nombre de pas
	  delay(2000);
	  lastTime3 = thisTime;
	}
}

Qu'en pensez vous ?
Merci de votre aide

testez déjà si votre moteur est fonctionnel

#include "Stepper.h"
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

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

void loop() {
  myStepper.step(200);  // nombre de pas
  delay(3000);
  myStepper.step(-200); // nombre de pas
  delay(3000);
}

➜ est-ce que le moteur tourne dans les 2 sens ?

Merci de votre réponse.
Non avec votre code il ne tourne que dans un sens...
Mais j'ai utilisé ce tuto : [TUTO] Arduino Utiliser moteur pas à pas 28BYJ-48 + code, câblage
Et lorsque j'utilise ce code :

#define in1 8
#define in2 9
#define in3 10
#define in4 11

int dl = 20; // temps entre les pas, minimum 10 ms

void setup() {
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
}

void loop() {
    digitalWrite(in1, HIGH); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, HIGH);
    delay(dl);

    digitalWrite(in1, HIGH); 
    digitalWrite(in2, HIGH); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW);
    delay(dl);

    digitalWrite(in1, LOW); 
    digitalWrite(in2, HIGH); 
    digitalWrite(in3, HIGH); 
    digitalWrite(in4, LOW);
    delay(dl);

    digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, HIGH); 
    digitalWrite(in4, HIGH);
    delay(dl);
}

Le moteur tourne dans l'autre sens... mais toujours que dans un sens...
Donc mon moteur à bien la possibilité de tourner dans les 2 sens...
Merci de votre aide

Remplacer l'ordre des pin's. Au lieu de 8,9,10,11 mettre 8,10,9,11

ahhhh ça progresse merci :slight_smile:
alors 8,10,9,11 ça ne faisait rien de plus donc j'ai essayé 8,11,9,10
mais par contre je vais 2 fois à gauche et après toujours à droite...
comment je peux faire pour aller à gauche un certain temps puis à droite un certain temps ?
Voici mon code modifier :

#include "Stepper.h"

const int stepsPerRevolution = 200;
unsigned long lastTime3 = 0;
unsigned long thisTime = 0;

Stepper myStepper(stepsPerRevolution, 8, 11, 9, 10);

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

void loop() {
  thisTime = millis(); // qu'elle heure est-il?
  if((thisTime - lastTime3) < 3000){
    myStepper.step(200);  // nombre de pas
    delay(2000);
  }
  else{
    myStepper.step(-300); // nombre de pas
    delay(2000);
    lastTime3 = thisTime;
  }
}

Merci de votre aide

J'en pense que tu nous disais en quelle classe tu es, nous gagnerons du temps.
J'en pense que le programme est une recopie d'un programme trouvé sur la toile.

Donnes nous le lien vers l'article où tu as trouvé ce programme.
Quel organe de puissance (certains parlent de driver) utilises-tu pour commander les bobinages du moteur ? Un ULNxyz ? Si oui lequel ?

Dans la bibliothèque stepper fournie avec l'IDE Arduino il y a un répertoire nommé "Examples".
Les programmes sont garantis fonctionnels, fais un exemple très simple, il doit fonctionner.
S'il ne fonctionne pas c'est probablement du a une erreur de câblage, beaucoup plus rarement à un composant détruit. Mais là comme le moteur tourne dans un sens il n'y a pas de composant détruit.
Il est préférable de remonter aux sources plutôt que de jouer aux devinettes en permutant les fils au hasard.

Attention (je deviens prudent) ce n'est pas une critique de la réponse de villeroi, simplement si la solution proposée ne fonctionne pas, c'est que probablement, il y a d'autres erreurs.
Pour un montage aussi simple, AMHA, le plus simple est de reprendre les bases et refaire un câblage "maitrisé".

Ce sont mes 5 cts, tu fais comme tu veux.

ok ok merci pour cet intérêt... alors non les études sont loin derrière moi et ce n'est pas un projet étudiant... c'est juste une envie de découvrir arduino...
donc comme je l'ai expliqué un peu plus haut je me suis servi de ce tuto (chose que je n'ai pas voulu cacher):
https://arduino-france.site/moteur-pas-a-pas/
j'ai le même matériel et j'avais utiliser le même code...
sauf que comme expliqué.... mon moteur ne tourne que dans un sens...

Malgré mon peu de connaissance dans les circuits et dans la programmation j'ai essayé de trouver une solution en ajoutant une variable de temps mais rien n'a changé....
donc me voici bien déterminé à trouver une solution à mon problème...et je me suis dit que la communauté pourrait m'aider !!!!
Alors la réponse de Villeroi permet de faire avancer le problème...
Une simple réponse de votre part m'expliquant qu'il s'agissait plutôt d'une erreur de câblage plutôt que de me prendre de haut aurait surement été plus adapté je pense...
sur ce merci de votre intervention... et n'hésitez pas si vous avez des réponses plus constructive !!!!

@bibimoi Je pense que malheureusement la prochaine fois, il gardera ses conseilles avisés pour lui et te laissera chercher une solution constructive toutes seules :slight_smile:

En même temps ce genre de réponse avec si peu de compréhension je m'en passe...
Il y a quand même bien d'autres façons de dire les choses.

Je me présente : retraité après 40 ans d'électronique professionnelle en développement.

J'ai donc une certaine expérience et j'ai pu constater que les erreurs les plus bêtes arrivent à tout le monde, même aux plus forts, et sont souvent les plus difficiles à trouver parce qu'on n'imagine pas qu'on ait pu les faire.

Donc ce n'était de la condescendance, mais des conseils avisés basés sur une longue expérience.

Dans ma longue carrière de développeur j'ai pu constater que tous ceux qui refusent l'idée qu'ils puissent faire des erreurs ne font pas de vieux os en développement : le doute est une qualité dans ce métier.

Effectivement, je vais en resté là, vous mettre en mode sourdine, et je vous souhaite, très sincèrement, de réussir dans votre projet.

PS : petit rappel, les exemples fournis avec les bibliothèques fonctionnent tous, ils n'ont pas de bug.

Bonsoir.

Bonsoir bibimoi

Oui, bien sûre, la compréhension et la tolérance :wink:

Ca prouve que ton câblage, maintenant, est OK.

Tu as maintenant un petit souci d'organisation, j'ai corrigé ton programme en conséquence. Il est possible que les sens CW (sens des aiguilles d'une montre) et CCW soient inversés.
Je te laisses jouer au jeux des 7 différences pour découvrir les modifications :wink:.
Il y a des indications quand au fonctionnement, dans la console à 115200.

Le programme modifié:

#include "Stepper.h"

const int stepsPerRevolution = 200;
//unsigned long lastTime3 = 0;
//unsigned long thisTime = 0;

unsigned long timerTempo = 3000;     // Rythme avant/arrière
unsigned long timerMilli = millis();     // Rythme chrono

const int stepperMove = 1 * stepsPerRevolution;     // Nombre de pas
boolean stepperSensCW = true;     // Sens des aiguilles d'une montre

Stepper myStepper(stepsPerRevolution, 8, 11, 9, 10);

void setup() {
	Serial.begin(115200);
	myStepper.setSpeed(60);
	//myStepper.step(stepperMove);
}

void loop() {
	if (millis() - timerMilli >= timerTempo)
	{
		
		if (stepperSensCW == true)     // Si sens des aiguilles d'une montre
		{
			Serial.println("CCW");
			myStepper.step(-stepperMove);  // nombre de pas
			stepperSensCW = false;     // Inverser le sens
		} 
		else
		{
			Serial.println("CW");
			stepperSensCW = stepperSensCW;
			myStepper.step(stepperMove);  // nombre de pas
			stepperSensCW = true;     // Inverser le sens
		}		
	timerMilli = millis();     // On recharge le chrono
	}
}

Cordialement
jpbbricole

Si tu t'en passe, il ne faut pas hésiter à aller jusqu'au bout de ton raisonnement et ne pas suivre ses conseilles qui t'on permis de résoudre ton problème.

Tu parle de compréhension, mais as tu essayé de comprendre sa réaction et ta réponse est-elle un exemple de compréhension?
Après on est surement tous d'accord, qu'il n'y a jamais excès de compréhension ou de tolérance :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.