IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Besoin d'aide pour un projet de détection de passage avec Laser KY-008 et capteur LDR


Sujet :

Arduino

  1. #141
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Voici une vidéo du phénomène qui se passe lors de la mise en route de la première partie. si cela n'a pas trop d'importance sur le fonctionnement, je crains plus pour une défaillance prématurée du système, car ça fait vraiment vilain
    A tout hasard si vous avez une idée pour supprimer ce phénomène qui je le rappel n'intervient qu'au lancement de la première partie après mise sous tension.
    merci
    Fichiers attachés Fichiers attachés

  2. #142
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    est-ce que la mise sous tension alimente directement l'Arduino MEGA ou vous avez un autre bouton pour cela ?

    Pouvez vous tester avec ce code où je force tous les enable à LOW au tout début du setup. Un appui sur RAZ renvoie toujours le moteur 1 au départ et un appui sur commencer avance ce coup ci de 6000 pas vers l'arrivée au lieu de 600 pas. C'est pour voir si le facteur accélération joue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    #include <AccelStepper.h>
     
    class Button {
      public:
        Button(uint8_t pin) : pin(pin) {}
        void begin() {
          pinMode(pin, INPUT_PULLUP);
        }
        operator bool() {
          bool current = digitalRead(pin) == LOW;
          if (current != prevState && (millis() - prevMillis >= 20)) {
            prevState = current;
            prevMillis = millis();
            return current;
          }
          return false;
        }
     
      private:
        uint8_t pin;
        bool prevState = true;
        uint32_t prevMillis = 0;
    };
     
     
    const uint8_t pinCommencer = 44;
    const uint8_t pinRaz = A5;
     
    const uint8_t pinDir = 45;
    const uint8_t pinStep = 46;
    const uint8_t pinFdcArrivee = 35;
    const uint8_t pinFdcDepart = 36;
     
    const uint8_t pinEnable = A0;
     
    Button boutonCommencer(pinCommencer);
    Button boutonRaz(pinRaz);
    AccelStepper moteur(AccelStepper::DRIVER, pinStep, pinDir);
     
    void setup() {
      // spécialement pour votre machine on met tous les enable à LOW
      for (int p = A0; p < A4; p++) {
        digitalWrite(p, LOW);
        pinMode(p, OUTPUT);
      }
     
      moteur.stop();
      moteur.setMaxSpeed(1000);
      moteur.setAcceleration(1000);
      moteur.setCurrentPosition(0);
     
      boutonCommencer.begin();
      boutonRaz.begin();
     
      pinMode(pinFdcArrivee, INPUT_PULLUP);
      pinMode(pinFdcDepart, INPUT_PULLUP);
    }
     
    void loop() {
      if (boutonCommencer && digitalRead(pinFdcArrivee) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(-6000);
      }
     
      if (boutonRaz && digitalRead(pinFdcDepart) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(100000); // retour vers zéro
      }
     
      // arrêt automatique si on atteint une fin de course
      if (digitalRead(pinFdcArrivee) == LOW && moteur.distanceToGo() < 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      if (digitalRead(pinFdcDepart) == LOW && moteur.distanceToGo() > 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      moteur.run();
    }




    Voici les photos du driver TB6600 reglé sur 101110 (de 1 à 6)
    concernant le driver, si je comprends bien les réglages choisis sont

    Nom : IMG_7864.jpeg
Affichages : 48
Taille : 143,8 Ko

    • Microstep 2/A signifie que le driver est réglé en demi-pas, soit un facteur 2 par rapport au pas entier.
    • Pulse per rev 400 indique qu’il faut 400 impulsions STEP pour effectuer un tour complet du moteur, ce qui correspond à un moteur 200 pas par tour utilisé en demi-pas.
    • Current 1.5A PK correspond au courant crête par phase appliqué par le driver pendant les micro-pas.
    • Current 1.7A correspond au courant maximal réglé ou au courant effectif équivalent selon la convention du fabricant, souvent une valeur RMS approchée à partir du courant crête.


    Avez vous les spec exactes des moteurs ?


    à noter que sur certains modèles 2/A et 2/B correspondent à deux modes de demi-pas différents définis par le fabricant du driver.
    Dans les deux cas, la résolution est identique, avec 400 impulsions par tour pour un moteur 200 pas, donc aucun changement de précision angulaire mais la différence porte sur la table de courant interne, c’est-à-dire la manière dont le courant est réparti entre les deux phases pendant les micro-pas.
    ==> En mode 2/A, la séquence de courants privilégie un couple légèrement plus élevé mais avec plus de variation de couple entre les positions.
    ==> En mode 2/B, la répartition des courants est plus équilibrée, ce qui réduit l’ondulation de couple et les vibrations, au prix d’un couple maximal légèrement inférieur.

    Peut-être ça vaudrait le coup de tester en 2/B

    D'autre part, il me semble que si on laisse flotter la broche enable au boot, le driver risque d'alimenter le moteur. ce serait pas mal d'avoir une résistance de pull down (10kΩ) sur chaque enable. Comme ça lorsqu'on allume le système, les moteurs ne sont pas actifs tant que le code ne leur dit pas de l'être.

    ==> broche ENABLE du driver reliée directement à la sortie numérique de l’Arduino (comme c'est déjà) et une résistance d’environ 10 kΩ doit être câblée entre la broche ENABLE et GND afin de forcer l’état bas au démarrage. La masse du driver et la masse de l’Arduino doivent être reliées ensemble pour garantir une référence logique commune.

  3. #143
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Citation Envoyé par Jay M Voir le message
    est-ce que la mise sous tension alimente directement l'Arduino MEGA ou vous avez un autre bouton pour cela ?
    Non pas de bouton l'alimentation se fait directement en branchant la prise

    Citation Envoyé par Jay M Voir le message
    Pouvez vous tester avec ce code où je force tous les enable à LOW au tout début du setup. Un appui sur RAZ renvoie toujours le moteur 1 au départ et un appui sur commencer avance ce coup ci de 6000 pas vers l'arrivée au lieu de 600 pas. C'est pour voir si le facteur accélération joue.
    J'ai chargé votre code, les déplacements sont fluides et le moteur ne grogne plus. Par contre les déplacements ne sont pas très rapide à l'aller comme au retour et les rampes d’accélération et de décélération sont grandes ce qui ralonge encore plus le temps de déplacement. j'ai donc passé la vitesse à 2000 et l'accélération à 1500 et c'est pas mal. ça pourrait peut etre encore plus rapide surtout en retour, mais c'est beaucoup mieux


    Citation Envoyé par Jay M Voir le message
    concernant le driver, si je comprends bien les réglages choisis sont :
    Oui c'est exact

    Citation Envoyé par Jay M Voir le message
    Avez vous les spec exactes des moteurs ?
    Il n'y a aucune inscription sur les moteurs, tout ce que je peux vous dire, c'est que ce sont des NEMA17


    Citation Envoyé par Jay M Voir le message
    Peut-être ça vaudrait le coup de tester en 2/B
    Si vous souhaitez que je fasse le test, je peux le faire, mais je ne vous cache pas que cela m’embête un peu car je n'ai pas accès facilement au switch, il fait que je démonte et décâble tout pour y accéder. après, dites moi, si vous pensez que c'est impératif, je le fais.

    Citation Envoyé par Jay M Voir le message
    D'autre part, il me semble que si on laisse flotter la broche enable au boot, le driver risque d'alimenter le moteur. ce serait pas mal d'avoir une résistance de pull down (10kΩ) sur chaque enable. Comme ça lorsqu'on allume le système, les moteurs ne sont pas actifs tant que le code ne leur dit pas de l'être.
    J'ai trouvé dans mes reliques des résistances de 10kΩ 1/2W. si elles peuvent aller, je peux faire cette modification. Je joint une photo avec un câblage à blanc, pouvez vous me dire si c'est ok ? (le fil orange va sur la sortie numerique de l'arduino en -5V et le fil blanc de la résistance sur GND du 24V)
    merci
    Images attachées Images attachées  

  4. #144
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    Pas la peine de changer en 2B si c’est compliqué

    Pour le câblage c’est bien mais il faut aussi emmener le GND de l’arduino sur le GND du driver

  5. #145
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Citation Envoyé par Jay M Voir le message
    Pas la peine de changer en 2B si c’est compliqué

    Pour le câblage c’est bien mais il faut aussi emmener le GND de l’arduino sur le GND du driver
    Ok merci
    Pour les GND, c’est déjà fait, ils sont tous interconnectés.

  6. #146
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    OK

    je voudrais tester le fonctionnement sans accélération / décélération

    ce code implémente une vitesse constante qui est sans doute au de la du max que peut fournir accelStepper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    #include <AccelStepper.h>
     
    class Button {
      public:
        Button(uint8_t pin) : pin(pin) {}
        void begin() {
          pinMode(pin, INPUT_PULLUP);
        }
        operator bool() {
          bool current = digitalRead(pin) == LOW;
          if (current != prevState && (millis() - prevMillis >= 20)) {
            prevState = current;
            prevMillis = millis();
            return current;
          }
          return false;
        }
     
      private:
        uint8_t pin;
        bool prevState = true;
        uint32_t prevMillis = 0;
    };
     
     
    const uint8_t pinCommencer = 44;
    const uint8_t pinRaz = A5;
     
    const uint8_t pinDir = 45;
    const uint8_t pinStep = 46;
    const uint8_t pinFdcArrivee = 35;
    const uint8_t pinFdcDepart = 36;
     
    const uint8_t pinEnable = A0;
     
    Button boutonCommencer(pinCommencer);
    Button boutonRaz(pinRaz);
     
    AccelStepper moteur(AccelStepper::DRIVER, pinStep, pinDir);
     
    void setup() {
      // spécialement pour votre machine on met tous les enable à LOW
      for (int p = A0; p < A4; p++) {
        digitalWrite(p, LOW);
        pinMode(p, OUTPUT);
      }
     
      moteur.stop();
      moteur.setMaxSpeed(3000);
      moteur.setCurrentPosition(0);
     
      boutonCommencer.begin();
      boutonRaz.begin();
     
      pinMode(pinFdcArrivee, INPUT_PULLUP);
      pinMode(pinFdcDepart, INPUT_PULLUP);
    }
     
    void loop() {
      if (boutonCommencer && digitalRead(pinFdcArrivee) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(-6000);
      }
     
      if (boutonRaz && digitalRead(pinFdcDepart) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(100000); // retour vers zéro
      }
     
      // arrêt automatique si on atteint une fin de course
      if (digitalRead(pinFdcArrivee) == LOW && moteur.distanceToGo() < 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      if (digitalRead(pinFdcDepart) == LOW && moteur.distanceToGo() > 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      moteur.runSpeed();
    }

    pouvez vous me dire si

    - la vitesse est bonne ?
    - ça fait du bruit ?
    - si vous avez l'impression de voir des à coups sur le mécanisme au départ et au moment de s'arrêter ?

  7. #147
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Citation Envoyé par Jay M Voir le message
    OK

    je voudrais tester le fonctionnement sans accélération / décélération
    Ok pas de soucis, je regarde ça se soir. Par contre, je dois faire les modifications avec les résistances de 10k avant ou ça peut attendre ? Car ça risque de prendre un peu de temps.
    Merci

  8. #148
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    Citation Envoyé par jojodu71 Voir le message
    Ok pas de soucis, je regarde ça se soir. Par contre, je dois faire les modifications avec les résistances de 10k avant ou ça peut attendre ? Car ça risque de prendre un peu de temps.
    Merci
    ça peut attendre - le sketch débute en mettant les pins enable en sortie et à low comme première commande, donc le temps où le driver aura des pins plus ou moins flottantes ou activées est assez court, la MEGA boot assez vite.

    Si ça ne fait pas de bruit, on pourra peut-être même se passer de ces résistances (mais elles aideraient pour être sûr qu'il n'y aura pas de tentative de faire un pas au boot)

  9. #149
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Citation Envoyé par Jay M Voir le message
    OK

    je voudrais tester le fonctionnement sans accélération / décélération

    ce code implémente une vitesse constante qui est sans doute au de la du max que peut fournir accelStepper
    pouvez vous me dire si

    - la vitesse est bonne ?
    - ça fait du bruit ?
    - si vous avez l'impression de voir des à coups sur le mécanisme au départ et au moment de s'arrêter ?
    Je viens de faire le test, les moteurs se déplacent par de tout petits à-coups à peine perceptibles ce qui a pris un temps énorme pour faire les 6000 pas. Pour le retour idem.
    Si j’appuie plusieurs fois sur le bouton start ou RAZ, les à-coups sont plus rapprochés, et ça augmente un petit peu la vitesse, mais il faudrait peut-être appuyer 2000 fois sur le bouton pour arriver à avoir un déplacement correct, donc essai non concluant. Désolé

  10. #150
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    Citation Envoyé par jojodu71 Voir le message
    donc essai non concluant. Désolé
    Pff, je suis bête j'ai oublié d'appeler setSpeed() donc le avait une vitesse par défaut extrêmement petite

    pouvez vous retester avec


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    #include <AccelStepper.h>
     
    class Button {
      public:
        Button(uint8_t pin) : pin(pin) {}
        void begin() {
          pinMode(pin, INPUT_PULLUP);
        }
        operator bool() {
          bool current = digitalRead(pin) == LOW;
          if (current != prevState && (millis() - prevMillis >= 20)) {
            prevState = current;
            prevMillis = millis();
            return current;
          }
          return false;
        }
     
      private:
        uint8_t pin;
        bool prevState = true;
        uint32_t prevMillis = 0;
    };
     
     
    const uint8_t pinCommencer = 44;
    const uint8_t pinRaz = A5;
     
    const uint8_t pinDir = 45;
    const uint8_t pinStep = 46;
    const uint8_t pinFdcArrivee = 35;
    const uint8_t pinFdcDepart = 36;
     
    const uint8_t pinEnable = A0;
    const float SPEED = 1000;
     
    Button boutonCommencer(pinCommencer);
    Button boutonRaz(pinRaz);
     
    AccelStepper moteur(AccelStepper::DRIVER, pinStep, pinDir);
     
    void setup() {
      // spécialement pour votre machine on met tous les enable à LOW
      for (int p = A0; p < A4; p++) {
        digitalWrite(p, LOW);
        pinMode(p, OUTPUT);
      }
      pinMode(pinFdcArrivee, INPUT_PULLUP);
      pinMode(pinFdcDepart, INPUT_PULLUP);
      boutonCommencer.begin();
      boutonRaz.begin();
     
      moteur.stop();
      moteur.setCurrentPosition(0);
      moteur.setMaxSpeed(SPEED);
     
      Serial.begin(115200);
    }
     
    void loop() {
      if (boutonCommencer && digitalRead(pinFdcArrivee) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(-2000);
        moteur.setSpeed(-SPEED);
      }
     
      if (boutonRaz && digitalRead(pinFdcDepart) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(100000); // retour vers zéro
        moteur.setSpeed(+SPEED);
      }
     
      // arrêt automatique si on atteint une fin de course
      if (digitalRead(pinFdcArrivee) == LOW && moteur.distanceToGo() < 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      if (digitalRead(pinFdcDepart) == LOW && moteur.distanceToGo() > 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      moteur.runSpeed();
    }

  11. #151
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    J’ai essayé ce nouveau code, le déplacement se fait de façon très fluide sans aucun bruit. C’est parfait. La vitesse n’est pas très élevée.
    J’ai passé le paramètre de vitesse 1000 à 2000. Et là la vitesse est correcte. En revanche je ne sais pas si il y avait une distance de programmée mais le chariot a traversé toute la piste et ne s’est pas arrêté en fin de course d’arrivée. Il a fallu que je saute sur la prise de courant pour tout arrêter, Ouf, plus de peur que de mal😉

  12. #152
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    OK c'est bon signe

    Citation Envoyé par jojodu71 Voir le message
    En revanche je ne sais pas si il y avait une distance de programmée mais le chariot a traversé toute la piste et ne s’est pas arrêté en fin de course d’arrivée. Il a fallu que je saute sur la prise de courant pour tout arrêter, Ouf, plus de peur que de mal😉
    Oui je demande 2000 pas vers l'arrivée

    mais c'est bizarre car le code a bien le test de déclenchement des fins de course

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      // arrêt automatique si on atteint une fin de course
      if (digitalRead(pinFdcArrivee) == LOW && moteur.distanceToGo() < 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      if (digitalRead(pinFdcDepart) == LOW && moteur.distanceToGo() > 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
    est-ce que l'appui sur le fin de course est très court ou tout l'attelage va le tenir enfoncé ? (ie mécaniquement qu'est-ce qui appui sur le FdC ?)

  13. #153
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Oui, il le contact bien et même pendant le déplacement si je contact la butée, il ne s’arrête pas.
    J’ai passé le 2000 à 200, et c’est pareil, il ne s’arrête jamais. Après ce n’est pas trop important, le principal est d’avoir trouvé la solution pour déplacer les moteurs de façon optimale et de pouvoir modifier le code complet avec ces modifications.

  14. #154
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    Citation Envoyé par jojodu71 Voir le message
    Après ce n’est pas trop important
    Si parce que ça devrait fonctionner si je veux dupliquer exactement ce test dans le code général.

    Je pense que c'est parce que j'ai utiliser runSpeed() au lieu de runSpeedToPosition().

    pour vérifier que c'est bien cela, pouvez vous tester ce code ? si c'est bon je modifierai le code général.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #include <AccelStepper.h>
     
    class Button {
      public:
        Button(uint8_t pin) : pin(pin) {}
        void begin() {
          pinMode(pin, INPUT_PULLUP);
        }
        operator bool() {
          bool current = digitalRead(pin) == LOW;
          if (current != prevState && (millis() - prevMillis >= 20)) {
            prevState = current;
            prevMillis = millis();
            return current;
          }
          return false;
        }
     
      private:
        uint8_t pin;
        bool prevState = true;
        uint32_t prevMillis = 0;
    };
     
     
    const uint8_t pinCommencer = 44;
    const uint8_t pinRaz = A5;
     
    const uint8_t pinDir = 45;
    const uint8_t pinStep = 46;
    const uint8_t pinFdcArrivee = 35;
    const uint8_t pinFdcDepart = 36;
     
    const uint8_t pinEnable = A0;
    const float SPEED = 1000;
     
    Button boutonCommencer(pinCommencer);
    Button boutonRaz(pinRaz);
     
    AccelStepper moteur(AccelStepper::DRIVER, pinStep, pinDir);
     
    void setup() {
      // spécialement pour votre machine on met tous les enable à LOW
      for (int p = A0; p < A4; p++) {
        digitalWrite(p, LOW);
        pinMode(p, OUTPUT);
      }
      pinMode(pinFdcArrivee, INPUT_PULLUP);
      pinMode(pinFdcDepart, INPUT_PULLUP);
      boutonCommencer.begin();
      boutonRaz.begin();
     
      moteur.stop();
      moteur.setCurrentPosition(0);
      moteur.setMaxSpeed(SPEED);
     
      Serial.begin(115200);
    }
     
    void loop() {
      if (boutonCommencer && digitalRead(pinFdcArrivee) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(-800); // deux tours
        moteur.setSpeed(-SPEED);
      }
     
      if (boutonRaz && digitalRead(pinFdcDepart) != LOW) {
        digitalWrite(pinEnable, HIGH);
        moteur.move(100000); // retour vers zéro
        moteur.setSpeed(+SPEED);
      }
     
      // arrêt automatique si on atteint une fin de course
      if (digitalRead(pinFdcArrivee) == LOW && moteur.distanceToGo() != 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      if (digitalRead(pinFdcDepart) == LOW && moteur.distanceToGo()!= 0) {
        digitalWrite(pinEnable, LOW);
        moteur.setCurrentPosition(0);
        moteur.moveTo(0);
        moteur.stop();
      }
     
      moteur.runSpeedToPosition();
    }

  15. #155
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Pas de soucis, je teste tout cela ce soir, merci

  16. #156
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Je viens de faire le test, et lorsque j’appuie sur le bouton de départ, rien ne bouge. Si je décale manuellement le chariot de dessus, la butée de départ et que j’appuie sur le retour, le chariot recule bien et s’arrête lorsqu’il est sur sa butée.
    Désolé

  17. #157
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    3 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3 033
    Par défaut
    OK oui - ça c'est pas grave, j'ai pas codé tous les cas donc il s'arrête tout de suite dans ce cas là.

    Voici une version complète avec le même principe mais les tests sont normalement bons

    Escargot12.zip

    Dites moi si ça fonctionne

  18. #158
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Je viens de tester la version 12, avec les paramètres, tels que vous me les avez envoyés. Les moteurs grognent fortement aussi bien à l’aller qu’au retour. J’ai essayé de diminuer la vitesse en la passant à 500. Ça grogne moins mais les déplacements sont très longs. J’ai l’impression que c’est le phénomène inverse de ce qui arrivé sur les autres versions . Avant, il fallait que j’augmente la vitesse pour que ça grogne moins maintenant, c’est l’inverse.
    Je suis vraiment désolé de ne pas pouvoir vous aider plus et ça m’embête vraiment que vous vous acharniez là-dessus. Donc encore merci pour toute votre patience et votre persévérance.

  19. #159
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    J’ai oublié également de rajouter que le déplacement parasite qui se produisait à la mise sous tension, se fait maintenant à chaque cycle

  20. #160
    Invité de passage
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2026
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2026
    Messages : 101
    Par défaut
    Si cela peut vous aider, j’ai chargé la version six que vous m’aviez envoyé. Au-delà des déplacements saccadé du fait de la gestion des points un par un, le déplacement et la vitesse des moteurs étaient très bien. Peut-être pourriez-vous vous servir de ce modèle pour gérer les déplacements ou à l’inverse, utiliser ce code et ajouter les animations que vous avez rajouté par la suite qui n’existe pas sur la version six. Seul petit bémol qu’il y avait également sur la version six. C’est lors du retour en arrière, les moteurs accélèrent. Au fur et à mesure que certains sont déjà arrivés. Ce phénomène. Vous avez réussi à le résoudre dans les codes suivants. Voilà ce que je peux vous dire si ça peut vous aider. Merci d’avance.

Discussions similaires

  1. Besoin d'aide pour un projet graphique de concentration
    Par chacha2007 dans le forum LabVIEW
    Réponses: 0
    Dernier message: 21/11/2007, 21h18
  2. besoin d'aide pour un projet en C
    Par chahine59 dans le forum C
    Réponses: 8
    Dernier message: 06/01/2007, 00h23
  3. Besoin d'aide pour un projet en vb6
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/01/2006, 06h25
  4. Besoin d'aide pour un projet
    Par ZiMo dans le forum Linux
    Réponses: 9
    Dernier message: 24/10/2005, 01h28
  5. Besoin d'aide pour un projet de jeu en ligne
    Par FLEO dans le forum Projets
    Réponses: 1
    Dernier message: 21/10/2005, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo