tressage avec 2 moteurs pas à pas
#1
Posté 13 janvier 2026 - 06:16
#2
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
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
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 ! ![]()
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!
#5
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













