Aller au contenu


Photo
- - - - -

tressage avec 2 moteurs pas à pas


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 129 messages

Posté 13 janvier 2026 - 06:16

Bonjour à tous , en quelques lignes je vais vous présenter mon projet . Le but étant de tresser la corde placé entre les 2 moteurs . Pour cela, je vais avoir besoin de réaliser des mouvements précis sur mes moteurs . Je vais compléter mon code avec des boutons , un écran LCD et un potentiomètre .
 
 Voici l'explication pour le code que je cherche à réaliser pour faire fonctionner 2 moteurs pas à pas, face à face .
Ce qui est important c'est d'utiliser la librairie Accel stepper pour un démarrage progressif .
 
 
 
* Dans n'importe quel cas d'utilisation des moteurs il me faut faire varier la vitesse à l'aide d'un potentiomètre de toute les vitesses moteur ,(qu'un seul potentiomètre) .
* Rajouter un bouton arrêt , pour stopper le programme (bouton unique si possible ) .
 
 
             1)  LA MARCHE AVANT 
 a) Sur un écran LCD ( ligne 2 ), régler le nombre de tour de la bobine à effectuer par le bouton réglage bobine (100,200 jusqu'à 1000 )puis retour à 100  en boucle .
 B) J'appuis sur le bouton marche avant de la bobine , les 2 moteurs tournent en même temps mais en sens contraire .
 
             2) LA MARCHE ARRIERE
 c) Sur un écran LCD ( ligne 2 ) régler le nombre de tour de la bobine à effectuer  (100,200 jusqu'à 1000 )puis retour à 100 en boucle .
 d) J'appuis sur le bouton marche arrière de la bobine , les 2 moteurs tournent en même temps mais en sens contraire . Mais dans la direction opposé de la marche avant.
 
            3) TORSADE HORAIRE
 e)   Sur un écran LCD ( ligne 1 ) régler le nombre de tour de la torsade à effectuer par un bouton réglage torsade (de 1 à 20 ) puis retour à 1 en boucle .
 f)   J'appuis sur le bouton torsade horaire , les 2 moteurs tournent en même temps dans le même sens .
 
            4) TORSADE ANTI HORAIRE
 g)   Sur un écran LCD ( ligne 1 ) régler le nombre de tour de la torsade à effectuer  (de 1 à 20 ) puis retour à 1 en boucle .
 h)   J'appuis sur le bouton torsade anti horaire , les 2 moteurs tournent en même temps dans le même sens  . Mais dans la direction opposé du sens horaire.
 
 
 
J'ai déjà effectué un code avec vous . C'est pas si simple et cela fait quelques temps . Toute aide sera apprécié . Je vais rajouter quelques lignes de variables pour le code . 
 
En vous remerciant 
cook
 

Image(s) jointe(s)

  • 2 moteur pas a pas.jpg


#2 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 129 messages

Posté 13 janvier 2026 - 06:20

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

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

AccelStepper stepper1 (1, 4, 5); // 1 pour dire DRIVER. 4 c'est le pul + sur l’arduino et 5 le dir +
AccelStepper stepper2 (1, 7, 8); // 1 pour dire DRIVER. 7 c'est le pul + sur l’arduino et 8 le dir +


const int BoutonArret = 29; 
const int BoutonReglageTourBobine = 34;
const int BoutonMarcheAvantBobine = 38;
const int BoutonMarcheArriereBobine = 42;
const int BoutonReglageTorsade = 32;
const int BoutonMarcheTorsadeHoraire = 36;
const int BoutonMarcheTorsadeAntiHoraire = 40;

const int PotVitesseMot = A0;







#3 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 129 messages

Posté 13 janvier 2026 - 06:46


#include <AccelStepper.h>
AccelStepper stepper1 (1, 4, 5); // 1 pour dire driver. 4 c'est le pul + sur l’arduino et 5 le dir +
AccelStepper stepper2 (1, 7, 8); // 1 pour dire driver. 7 c'est le pul + sur l’arduino et 8 le dir +

#include <LiquidCrystal.h>
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);



const int Boutonarret = 29; //arret de tout mouvement
const int BoutonReglageTourBobine = 34;//bonton de reglage qui donne le nombre de tour de la bobine sur le LCD (de 100,200 à 1000)puis retour à 100 en boucle .
const int Boutonmarcheavantbobine = 38;//Bouton de marche avant de la bobine
const int Boutonmarchearrierebobine = 42;//Bouton de marche arrière de la bobine
const int BoutonReglagetorsade = 32;// bonton de reglage qui donne le nombre de tour de la torsade sur le LCD (de 1,2 à 20)puis retour à 1 en boucle .
const int BoutonMarchetorsadeHoraire = 36;//Bouton marche torsade sens horaire
const int BoutonMarchetorsadeAntiHoraire = 40;//Bouton marche torsade sens anti-horaire

const int PotVitesseMot = A0;// Modifie la vitesse du moteur



void setup() {
  Serial.begin(9600);
  
  pinMode(Boutonarret, INPUT_PULLUP); 
  pinMode(BoutonReglageTourBobine, INPUT_PULLUP);
  pinMode(Boutonmarchearrierebobine, INPUT_PULLUP); 
  pinMode(Boutonmarcheavantbobine, INPUT_PULLUP); 
  pinMode(BoutonReglagetorsade, INPUT_PULLUP);
  pinMode(BoutonMarchetorsadeHoraire, INPUT_PULLUP); 
  pinMode(BoutonMarchetorsadeAntiHoraire, INPUT_PULLUP); 
  
  lcd.begin(16, 2);
  lcd.print("START PRESS INIT");



}


void loop() {
  // put your main code here, to run repeatedly:

}


#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 281 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 19 janvier 2026 - 03:46

Est ce que ce code correspondrait à ton besoin ?  : 

 

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

// ----- Initialisation des moteurs -----
AccelStepper stepper1(1, 4, 5); // DRIVER : pin Puls +, Dir +
AccelStepper stepper2(1, 7, 8); // 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 = 32;
const int BoutonMarcheTorsadeHoraire = 36;
const int BoutonMarcheTorsadeAntiHoraire = 40;

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

// ----- Variables -----
int toursBobine = 100;       // de 100 à 1000
int toursTorsade = 1;        // de 1 à 20
int vitesseMax = 500;        // 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);

  // ----- 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, 800); // 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(300); // Anti-rebond
  }

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

  // ----- 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 * 200; // 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 * 200;
  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;
  }
}


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 cook

cook

    Membre occasionnel

  • Membres
  • Pip
  • 129 messages

Posté hier, 19:44

Eh bien je vais essayé tout ca ..........






1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users