Aller au contenu


cook

Inscrit(e) (le) 25 mars 2020
Déconnecté Dernière activité janv. 31 2026 02:46
-----

Messages que j'ai postés

Dans le sujet : tressage avec 2 moteurs pas à pas

29 janvier 2026 - 07:30

Le code complet 

#include <AccelStepper.h>
#include <LiquidCrystal.h>

// ----- Initialisation des moteurs -----
AccelStepper stepper1(1, 5, 6);
AccelStepper stepper2(1, 8, 9);

LiquidCrystal lcd(22, 23, 24, 25, 26, 27);

// ----- Pins des boutons -----
const int BoutonArret = 29;
const int BoutonReglageTourBobine = 34;
const int BoutonMarcheAvantBobine = 38;
const int BoutonMarcheArriereBobine = 42;
const int BoutonReglageTorsade = 33;
const int BoutonMarcheTorsadeHoraire = 36;
const int BoutonMarcheTorsadeAntiHoraire = 40;

// ----- Potentiomètre -----
const int PotVitesseMot = A6;

// ----- Variables -----
int toursBobine = 100;  
int toursTorsade = 1;  // de 1 à 20
int vitesseMax = 5000; // vitesse maximale par défaut


// -------------------------------------------------

void setup() {
  Serial.begin(9600);

  pinMode(BoutonArret, INPUT_PULLUP); 
  pinMode(BoutonReglageTourBobine, INPUT_PULLUP);
  pinMode(BoutonMarcheAvantBobine, INPUT_PULLUP);
  pinMode(BoutonMarcheArriereBobine, INPUT_PULLUP);
  pinMode(BoutonReglageTorsade, INPUT_PULLUP);
  pinMode(BoutonMarcheTorsadeHoraire, INPUT_PULLUP);
  pinMode(BoutonMarcheTorsadeAntiHoraire, INPUT_PULLUP);

  stepper1.setMaxSpeed(vitesseMax);
  stepper2.setMaxSpeed(vitesseMax);

  stepper1.setAcceleration(500);
  stepper2.setAcceleration(500);

  lcd.begin(16, 2);
  afficherInformations();
}

// -------------------------------------------------

void afficherInformations() {
  lcd.setCursor(0, 0);
  lcd.print("Torsade: ");
  lcd.print(toursTorsade);
  lcd.print("    ");  // efface les restes si le chiffre précédent était plus grand

  lcd.setCursor(0, 1);
  lcd.print("Bobine: ");
  lcd.print(toursBobine);
  lcd.print("    ");  // efface les restes si le chiffre précédent était plus grand
}

// -------------------------------------------------

void loop() {
  int potValue = analogRead(PotVitesseMot);  // 0 à 1023
  vitesseMax = map(potValue, 0, 1023, 50, 5000); // Ajuster min (50) et max (5000)si besoin
  stepper1.setMaxSpeed(vitesseMax);
  stepper2.setMaxSpeed(vitesseMax);

  if (digitalRead(BoutonReglageTourBobine) == LOW) {
    toursBobine += 100;
    if (toursBobine > 1000) toursBobine = 100;
    afficherInformations();
    delay(200);
  }

  if (digitalRead(BoutonReglageTorsade) == LOW) {
    toursTorsade++;
    if (toursTorsade > 20) toursTorsade = 1;
    afficherInformations();
    delay(200);
  }

  if (digitalRead(BoutonMarcheAvantBobine) == LOW) {
    lcd.clear();
    lcd.print("Bobine Avant");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerBobine(true);  // true = marche avant
    afficherInformations();
  }

  if (digitalRead(BoutonMarcheArriereBobine) == LOW) {
    lcd.clear();
    lcd.print("Bobine Arriere");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerBobine(false);   // false = marche arrière
    afficherInformations();
  }

  if (digitalRead(BoutonMarcheTorsadeHoraire) == LOW) {
    lcd.clear();
    lcd.print("Torsade H");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerTorsade(true);  // true = horaire
    afficherInformations();
  }

  if (digitalRead(BoutonMarcheTorsadeAntiHoraire) == LOW) {
    lcd.clear();
    lcd.print("Torsade AH");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerTorsade(false); // false = anti-horaire
    afficherInformations();
  }
}

// ----- Fonctions de mouvement  -----

void tournerBobine(bool avant) {
  long steps = (long)toursBobine * 800;  // info 200 pas par tour pour un moteur 1.8°  
  if (!avant) steps = -steps;

  stepper1.move(steps);
  stepper2.move(-steps);  // Sens opposé pour le deuxième moteur

  while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
    stepper1.run();
    stepper2.run();

    if (digitalRead(BoutonArret) == LOW) { // Modification pour arrêter proprement le système en cas d'appuis sur le bouton stop
      stepper1.stop();
      stepper2.stop();
      stepper1.setCurrentPosition(stepper1.currentPosition());
      stepper2.setCurrentPosition(stepper2.currentPosition());
      break;
    }
  }
}

// ----- Fonctions de mouvement  -----

void tournerTorsade(bool horaire) {
  long steps = toursTorsade * 800;  // info 200 pas par tour pour un moteur 1.8°  
  if (!horaire) steps = -steps;

  stepper1.move(steps);
  stepper2.move(steps);

  while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
    stepper1.run();
    stepper2.run();

    if (digitalRead(BoutonArret) == LOW) {  // Modification pour arrêter proprement le système en cas d'appuis sur le bouton stop
      stepper1.stop();
      stepper2.stop();
      stepper1.setCurrentPosition(stepper1.currentPosition());
      stepper2.setCurrentPosition(stepper2.currentPosition());
      break;
    }
  }
}



Dans le sujet : tressage avec 2 moteurs pas à pas

28 janvier 2026 - 07:37

Alors  , oui  ,le code au dessus , règle le problème . Que ce soit 100 , 400 ou 1000 ,  les moteurs font tous les tours demandés . Nickel !! 

Merci pour ce code .

 

 

 

 

Pour faire le retour sur cette modif là : 

void tournerBobine(bool avant) {

  const int TOURS_PAR_BLOC = 10;
  const long PAS_PAR_TOUR = 800;
  const long PAS_PAR_BLOC = TOURS_PAR_BLOC * PAS_PAR_TOUR;

Si je demande 100 tours , il y a un temps d'arrêt  tous les 10 tours , pour arriver à 100 . Bon voila c'est pour l'info .


Dans le sujet : tressage avec 2 moteurs pas à pas

27 janvier 2026 - 05:31

a  )  le bouton arrêt fait bien son travail maintenant . A l'appuis , ils s'arrêtent net et repartent bien dans le sens désiré si je donne un ordre de mouvement  . C'est top !

 

 

b ) Pour le nombre de tour que les moteurs devrai faire , y'a un soucis bizarre . Pour la torsade , si je règle sur 3 ou 4 tours , ils le font . Ok pour la torsade .

     Mais pour la marche avant bobine , si  je règle sur 100 tours à l'écran , les moteurs en font 18 alors qu'il devrai en faire cent . Si je règle sur 200 tours ils en font 36 . Toujours ce même multiple de 18.  C'est pas logique ? 


Dans le sujet : tressage avec 2 moteurs pas à pas

24 janvier 2026 - 09:41

#include <AccelStepper.h>
#include <LiquidCrystal.h>

// ----- Initialisation des moteurs -----
AccelStepper stepper1(1, 5, 6); // DRIVER : pin Puls +, Dir +
AccelStepper stepper2(1, 8, 9); // DRIVER : pin Puls +, Dir +

LiquidCrystal lcd(22, 23, 24, 25, 26, 27);

// ----- Pins des boutons d'un côté connecté à la broche, de l'autre à la masse -----
const int BoutonArret = 29;
const int BoutonReglageTourBobine = 34;
const int BoutonMarcheAvantBobine = 38;
const int BoutonMarcheArriereBobine = 42;
const int BoutonReglageTorsade = 33;
const int BoutonMarcheTorsadeHoraire = 36;
const int BoutonMarcheTorsadeAntiHoraire = 40;

// ----- Potentiomètre pour la vitesse -----
const int PotVitesseMot = A6;

// ----- Variables -----
int toursBobine = 100;       // de 100 à 1000
int toursTorsade = 1;        // de 1 à 20
int vitesseMax = 5000;        // vitesse maximale par défaut

void setup() {
  Serial.begin(9600);

  // ----- Config des boutons -----
  pinMode(BoutonArret, INPUT_PULLUP); 
  pinMode(BoutonReglageTourBobine, INPUT_PULLUP);
  pinMode(BoutonMarcheAvantBobine, INPUT_PULLUP);
  pinMode(BoutonMarcheArriereBobine, INPUT_PULLUP);
  pinMode(BoutonReglageTorsade, INPUT_PULLUP);
  pinMode(BoutonMarcheTorsadeHoraire, INPUT_PULLUP);
  pinMode(BoutonMarcheTorsadeAntiHoraire, INPUT_PULLUP);

    // ----- Config moteurs -----
  stepper1.setMaxSpeed(vitesseMax);
  stepper2.setMaxSpeed(vitesseMax);

  
   stepper1. setAcceleration (500 ) ;
   stepper2. setAcceleration (500 ) ;



  // ----- Config LCD -----
  lcd.begin(16, 2);

  // ----- Affichage des valeurs de départ ----- 
  afficherInformations();


}

void afficherInformations() {
  // Affichage ligne 1 
  lcd.setCursor(0, 0);
  lcd.print("Torsade: ");
  lcd.print(toursTorsade);
  lcd.print("    ");             // efface les restes si le chiffre précédent était plus grand
  // Affichage ligne 2
  lcd.setCursor(0, 1);
  lcd.print("Bobine: ");
  lcd.print(toursBobine);
  lcd.print("    ");             // efface les restes si le chiffre précédent était plus grand
}

void loop() {
  // ----- Lecture du potentiomètre -----
  int potValue = analogRead(PotVitesseMot); // 0 à 1023
  vitesseMax = map(potValue, 0, 1023, 50, 5000); // Ajuster min et max si besoin
  stepper1.setMaxSpeed(vitesseMax);
  stepper2.setMaxSpeed(vitesseMax);

  // ----- Réglage tours bobine -----
  if (digitalRead(BoutonReglageTourBobine) == LOW) {
    toursBobine += 100;
    if (toursBobine > 1000) toursBobine = 100;
    afficherInformations();
    delay(100); // Anti-rebond
  }

  // ----- Réglage tours torsade -----
  if (digitalRead(BoutonReglageTorsade) == LOW) {
    toursTorsade++;
    if (toursTorsade > 20) toursTorsade = 1;
    afficherInformations();
    delay(100);
  }

  // ----- Marche avant bobine -----
  if (digitalRead(BoutonMarcheAvantBobine) == LOW) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Bobine Avant");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerBobine(true); // true = marche avant
    afficherInformations();
  }

  // ----- Marche arrière bobine -----
  if (digitalRead(BoutonMarcheArriereBobine) == LOW) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Bobine Arriere");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerBobine(false); // false = marche arrière
    afficherInformations();
  }

  // ----- Torsade horaire -----
  if (digitalRead(BoutonMarcheTorsadeHoraire) == LOW) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Torsade H ");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerTorsade(true); // true = horaire
    afficherInformations();
  }

  // ----- Torsade anti-horaire -----
  if (digitalRead(BoutonMarcheTorsadeAntiHoraire) == LOW) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Torsade AH");
    lcd.setCursor(0, 1);
    lcd.print("en cours...");
    tournerTorsade(false); // false = anti-horaire
    afficherInformations();
  }
}

// ----- Fonctions de mouvement -----
void tournerBobine(bool avant) {
  long steps = toursBobine * 800; // info 200 pas par tour pour un moteur 1.8°          
  if (!avant) steps = -steps;

  stepper1.move(steps);
  stepper2.move(-steps); // Sens opposé pour le deuxième moteur

  while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
    stepper1.run();
    stepper2.run();
    if (digitalRead(BoutonArret) == LOW) break; // arrêt d'urgence
  }
}

void tournerTorsade(bool horaire) {
  long steps = toursTorsade * 800;
  if (!horaire) steps = -steps;

  stepper1.move(steps);
  stepper2.move(steps); // Même sens pour torsade

  while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
    stepper1.run();
    stepper2.run();
    if (digitalRead(BoutonArret) == LOW) break;
  }
}

Dans le sujet : tressage avec 2 moteurs pas à pas

24 janvier 2026 - 09:35

Il y a deux endroit ou cela fonctionne pas bien .

 

a) Disons que j'appuis sur marche avant bobine suivi d' un arrêt par le bouton  . Les moteurs s'arrêtent bien . Mais si je décide de changer de sens , dans un premier temps les moteurs continuent dans le même sens quelques tours avant de faire marche arrière . Quelque soit le choix du bouton si je fait un arrêt puis que je veux repartir dans l'autre sens il repart pas directement .

 

b )  j'ai réglé sur 800 le nombre de pas par tour . C'est mon driver qui est réglé comme ça .  Pour la torsade les moteurs font bien 1 tour ou 15 selon le choix que je règle sur le Lcd . Mais pour la marche avant bobine , si  je règle sur 100 tour à l'écran , les moteurs en font 18 . Ou 36 si je règle sur 200  . Pourquoi ?