Rotation de MPAP en continue

Bonjour
J'ai pour but de faire tourner une dizaine moteurs pas à pas dont les drivers A4988 ont le dir branchés en commun sur la broche 4 d'une arduino mega, en me servant de la bibilothèque MTobject. Je voudrais que les moteurs se mettent simultanément à tourner en marche avant en continue, arrière en continue ou bien s'arrêtent en fonction de commandes qu'on enverrai à un module bluetooth hc-05.

#include "MTstepStepper.h" //Voir: http:arduino.dansetrad.fr/MTobjects
#include "AccelStepper.h"

const char enable1 = 40;     
const char enable2 = 43;     
const char enable3 = 45;
const char enable4 = 46;  
const char enable5 = 42;
const char enable6 = 44;
const char enable7 = 47;
const char enableRouge = 49;
const char enableBleu = 51;
const char enableJaune = 12;
const char enableViolet = 11;
const char enableGris = 10;  

const byte mpapStepPinGris = 5;     // Pour driver MPAP pin direction
const byte mpapStepPinViolet = 7;     // Pour driver MPAP pin direction
const byte mpapStepPinJaune = 9;     // Pour driver MPAP pin direction
const byte mpapStepPinRouge = 8;
const byte mpapStepPinBleu = 35;
const byte mpapStepPin1 = 37;
const byte mpapStepPin2 = 39;
const byte mpapStepPin3 = 41;
const byte mpapStepPin4 = 6;
const byte mpapStepPin5 = 3;
const byte mpapStepPin6 = 38;
const byte mpapStepPin7 = 36;

const char mpapDirReverse = 4;

AccelStepper MPAP1(1, mpapStepPin1, mpapDirReverse);
AccelStepper MPAP2(1, mpapStepPin2, mpapDirReverse);
AccelStepper MPAP3(1, mpapStepPin3, mpapDirReverse);
AccelStepper MPAP4(1, mpapStepPin4, mpapDirReverse);
AccelStepper MPAP5(1, mpapStepPin5, mpapDirReverse);
AccelStepper MPAP6(1, mpapStepPin6, mpapDirReverse);
AccelStepper MPAP7(1, mpapStepPin7, mpapDirReverse);
AccelStepper MPAPgris(1, mpapStepPinGris, mpapDirReverse);
AccelStepper MPAPviolet(1, mpapStepPinViolet, mpapDirReverse);
AccelStepper MPAPjaune(1, mpapStepPinJaune, mpapDirReverse);
AccelStepper MPAProuge(1, mpapStepPinRouge, mpapDirReverse);
AccelStepper MPAPbleu(1, mpapStepPinBleu, mpapDirReverse);


String Incoming_value;     // Chaîne reçue de App Inventor via Bluetooth

void setup()
{
  //--------------------------------- Serial 1 Rx = 19 Tx = 18
  Serial1.begin(9600);
  Serial1.setTimeout(50);     // Pour fin des commandes depuis Bluetooth

  pinMode(enable1, OUTPUT);
  pinMode(enable2, OUTPUT);
  pinMode(enable3, OUTPUT);
  pinMode(enable4, OUTPUT);
  pinMode(enable5, OUTPUT);
  pinMode(enable6, OUTPUT);
  pinMode(enable7, OUTPUT);
  pinMode(enableRouge, OUTPUT);
  pinMode(enableBleu, OUTPUT);
  pinMode(enableJaune, OUTPUT);
  pinMode(enableViolet, OUTPUT);
  pinMode(enableGris, OUTPUT);

  //---------------------------------MPAP1
  MPAP1.setMaxSpeed(400);
  MPAP1.setAcceleration(500);
  MPAP1.setEnablePin(enable1); //ligne ajoutée
  //                         DIR        STEP  ENA
  MPAP1.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP2
  MPAP2.setMaxSpeed(400);
  MPAP2.setAcceleration(500);
  MPAP2.setEnablePin(enable2); //ligne ajoutée
  MPAP2.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP 3
  MPAP3.setMaxSpeed(400);
  MPAP3.setAcceleration(500);
  MPAP3.setEnablePin(enable3); //ligne ajoutée
  MPAP3.setPinsInverted(mpapDirReverse, false, true);//ligne modifiée
  //--------------------------------- MPAP4
  MPAP4.setMaxSpeed(400);
  MPAP4.setAcceleration(500);
  MPAP4.setEnablePin(enable4);
  MPAP4.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP5
  MPAP5.setMaxSpeed(400);
  MPAP5.setAcceleration(500);
  MPAP5.setEnablePin(enable5);
  MPAP5.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP6
  MPAP6.setMaxSpeed(400);
  MPAP6.setAcceleration(500);
  MPAP6.setEnablePin(enable6);
  MPAP6.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP7
  MPAP7.setMaxSpeed(400);
  MPAP7.setAcceleration(500);
  MPAP7.setEnablePin(enable7);
  MPAP7.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAProuge
  MPAProuge.setMaxSpeed(400);
  MPAProuge.setAcceleration(500);
  MPAProuge.setEnablePin(enableRouge);
  MPAProuge.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPbleu
  MPAPbleu.setMaxSpeed(400);
  MPAPbleu.setAcceleration(500);
  MPAPbleu.setEnablePin(enableBleu);
  MPAPbleu.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPjaune
  MPAPjaune.setMaxSpeed(400);
  MPAPjaune.setAcceleration(500);
  MPAPjaune.setEnablePin(enableJaune);
  MPAPjaune.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPviolet
  MPAPviolet.setMaxSpeed(400);
  MPAPviolet.setAcceleration(500);
  MPAPviolet.setEnablePin(enableViolet);
  MPAPviolet.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPgris
  MPAPgris.setMaxSpeed(400);
  MPAPgris.setAcceleration(500);
  MPAPgris.setEnablePin(enableGris);
  MPAPgris.setPinsInverted(mpapDirReverse, false, true);

}

void loop()
{
  if(Serial1.available() > 0)
  {
    Incoming_value = Serial1.readString();
    Serial.print(Incoming_value);
    Serial.print("\n");
    //marche avant 
    if(Incoming_value == "marcheAvant") 
    {
      MPAP1.enableOutputs();
      MPAP2.enableOutputs();
      MPAP3.enableOutputs();
      MPAP4.enableOutputs();
      MPAP5.enableOutputs();
      MPAP6.enableOutputs();
      MPAP7.enableOutputs();

      MPAProuge.enableOutputs();
      MPAPbleu.enableOutputs();
      MPAPjaune.enableOutputs();
      MPAPviolet.enableOutputs();
      MPAPgris.enableOutputs()
      ////////////////////////////////
      MPAP1.move(CONTINUE);
      MPAP2.move(CONTINUE);
      MPAP3.move(CONTINUE);
      MPAP4.move(CONTINUE);
      MPAP5.move(CONTINUE);
      MPAP6.move(CONTINUE);
      MPAP7.move(CONTINUE);

      MPAProuge.move(CONTINUE);
      MPAPbleu.move(CONTINUE);
      MPAPjaune.move(CONTINUE);
      MPAPviolet.move(CONTINUE);
      MPAPgris.move(CONTINUE);
    }
    //marche arrière
    else if(Incoming_value == "marcheArriere") 
    {
      MPAP1.enableOutputs();
      MPAP2.enableOutputs();
      MPAP3.enableOutputs();
      MPAP4.enableOutputs();
      MPAP5.enableOutputs();
      MPAP6.enableOutputs();
      MPAP7.enableOutputs();

      MPAProuge.enableOutputs();
      MPAPbleu.enableOutputs();
      MPAPjaune.enableOutputs();
      MPAPviolet.enableOutputs();
      MPAPgris.enableOutputs()
      ////////////////////////////////
      MPAP1.move(-CONTINUE);
      MPAP2.move(-CONTINUE);
      MPAP3.move(-CONTINUE);
      MPAP4.move(-CONTINUE);
      MPAP5.move(-CONTINUE);
      MPAP6.move(-CONTINUE);
      MPAP7.move(-CONTINUE);

      MPAProuge.move(-CONTINUE);
      MPAPbleu.move(-CONTINUE);
      MPAPjaune.move(-CONTINUE);
      MPAPviolet.move(-CONTINUE);
      MPAPgris.move(-CONTINUE);     
    }
    //arrêt des moteurs
    else if(Incoming_value == "ArretDesMoteurs") 
    {
      MPAP1.stop();
      MPAP2.stop();
      MPAP3.stop();
      MPAP4.stop();
      MPAP5.stop();
      MPAP6.stop();
      MPAP7.stop();

      MPAProuge.stop();
      MPAPbleu.stop();
      MPAPjaune.stop();
      MPAPviolet.stop();
      MPAPgris.stop();  
      ////////////////////////////////
      MPAP1.disableOutputs();
      MPAP2.disableOutputs();
      MPAP3.disableOutputs();
      MPAP4.disableOutputs();
      MPAP5.disableOutputs();
      MPAP6.disableOutputs();
      MPAP7.disableOutputs();

      MPAProuge.disableOutputs();
      MPAPbleu.disableOutputs();
      MPAPjaune.disableOutputs();
      MPAPviolet.disableOutputs();
      MPAPgris.disableOutputs();
    }
}

Mon problème est que le compilateur me dit qu'il y a un problème dont je n'arrive pas à trouver la cause. Quelqu'un verrait-il quelle est-elle ?

Cordialement

si vous copiez coller le texte intégral du message du compilateur, ce serait plus simple pour vous aider...

PS/ si vous indentez le code parfois l'erreur devient visible...

Autant pour moi. Voici le message d'erreur:
exit status 1
expected ';' before 'MPAP1'

Quelles sont les procédures pour trouver une erreur grâce à l'indentation ?

Cordialement

Bonjour,

Comme le message d'erreur l'indique il manque un point virgule à la fin de la ligne d'instruction précédent la ligne ou est détectée l'erreur.

effectivement le code suivant se compile bien:

#include "MTstepStepper.h" //Voir: http:arduino.dansetrad.fr/MTobjects
#include "AccelStepper.h"

const char enable1 = 40;     
const char enable2 = 43;     
const char enable3 = 45;
const char enable4 = 46;  
const char enable5 = 42;
const char enable6 = 44;
const char enable7 = 47;
const char enableRouge = 49;
const char enableBleu = 51;
const char enableJaune = 12;
const char enableViolet = 11;
const char enableGris = 10;  

const byte mpapStepPinGris = 5;     // Pour driver MPAP pin direction
const byte mpapStepPinViolet = 7;     // Pour driver MPAP pin direction
const byte mpapStepPinJaune = 9;     // Pour driver MPAP pin direction
const byte mpapStepPinRouge = 8;
const byte mpapStepPinBleu = 35;
const byte mpapStepPin1 = 37;
const byte mpapStepPin2 = 39;
const byte mpapStepPin3 = 41;
const byte mpapStepPin4 = 6;
const byte mpapStepPin5 = 3;
const byte mpapStepPin6 = 38;
const byte mpapStepPin7 = 36;

const char mpapDirReverse = 4;

AccelStepper MPAP1(1, mpapStepPin1, mpapDirReverse);
AccelStepper MPAP2(1, mpapStepPin2, mpapDirReverse);
AccelStepper MPAP3(1, mpapStepPin3, mpapDirReverse);
AccelStepper MPAP4(1, mpapStepPin4, mpapDirReverse);
AccelStepper MPAP5(1, mpapStepPin5, mpapDirReverse);
AccelStepper MPAP6(1, mpapStepPin6, mpapDirReverse);
AccelStepper MPAP7(1, mpapStepPin7, mpapDirReverse);
AccelStepper MPAPgris(1, mpapStepPinGris, mpapDirReverse);
AccelStepper MPAPviolet(1, mpapStepPinViolet, mpapDirReverse);
AccelStepper MPAPjaune(1, mpapStepPinJaune, mpapDirReverse);
AccelStepper MPAProuge(1, mpapStepPinRouge, mpapDirReverse);
AccelStepper MPAPbleu(1, mpapStepPinBleu, mpapDirReverse);


String Incoming_value;     // Chaîne reçue de App Inventor via Bluetooth

void setup()
{
  //--------------------------------- Serial 1 Rx = 19 Tx = 18
  Serial1.begin(9600);
  Serial1.setTimeout(50);     // Pour fin des commandes depuis Bluetooth

  pinMode(enable1, OUTPUT);
  pinMode(enable2, OUTPUT);
  pinMode(enable3, OUTPUT);
  pinMode(enable4, OUTPUT);
  pinMode(enable5, OUTPUT);
  pinMode(enable6, OUTPUT);
  pinMode(enable7, OUTPUT);
  pinMode(enableRouge, OUTPUT);
  pinMode(enableBleu, OUTPUT);
  pinMode(enableJaune, OUTPUT);
  pinMode(enableViolet, OUTPUT);
  pinMode(enableGris, OUTPUT);

  //---------------------------------MPAP1
  MPAP1.setMaxSpeed(400);
  MPAP1.setAcceleration(500);
  MPAP1.setEnablePin(enable1); //ligne ajoutée
  //                         DIR        STEP  ENA
  MPAP1.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP2
  MPAP2.setMaxSpeed(400);
  MPAP2.setAcceleration(500);
  MPAP2.setEnablePin(enable2); //ligne ajoutée
  MPAP2.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP 3
  MPAP3.setMaxSpeed(400);
  MPAP3.setAcceleration(500);
  MPAP3.setEnablePin(enable3); //ligne ajoutée
  MPAP3.setPinsInverted(mpapDirReverse, false, true);//ligne modifiée
  //--------------------------------- MPAP4
  MPAP4.setMaxSpeed(400);
  MPAP4.setAcceleration(500);
  MPAP4.setEnablePin(enable4);
  MPAP4.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP5
  MPAP5.setMaxSpeed(400);
  MPAP5.setAcceleration(500);
  MPAP5.setEnablePin(enable5);
  MPAP5.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP6
  MPAP6.setMaxSpeed(400);
  MPAP6.setAcceleration(500);
  MPAP6.setEnablePin(enable6);
  MPAP6.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP7
  MPAP7.setMaxSpeed(400);
  MPAP7.setAcceleration(500);
  MPAP7.setEnablePin(enable7);
  MPAP7.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAProuge
  MPAProuge.setMaxSpeed(400);
  MPAProuge.setAcceleration(500);
  MPAProuge.setEnablePin(enableRouge);
  MPAProuge.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPbleu
  MPAPbleu.setMaxSpeed(400);
  MPAPbleu.setAcceleration(500);
  MPAPbleu.setEnablePin(enableBleu);
  MPAPbleu.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPjaune
  MPAPjaune.setMaxSpeed(400);
  MPAPjaune.setAcceleration(500);
  MPAPjaune.setEnablePin(enableJaune);
  MPAPjaune.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPviolet
  MPAPviolet.setMaxSpeed(400);
  MPAPviolet.setAcceleration(500);
  MPAPviolet.setEnablePin(enableViolet);
  MPAPviolet.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPgris
  MPAPgris.setMaxSpeed(400);
  MPAPgris.setAcceleration(500);
  MPAPgris.setEnablePin(enableGris);
  MPAPgris.setPinsInverted(mpapDirReverse, false, true);

}

void loop()
{
  if(Serial1.available() > 0)
  {
    Incoming_value = Serial1.readString();
    Serial.print(Incoming_value);
    Serial.print("\n");
    //marche avant 
    if(Incoming_value == "marcheAvant") 
    {
      MPAP1.enableOutputs();
      MPAP2.enableOutputs();
      MPAP3.enableOutputs();
      MPAP4.enableOutputs();
      MPAP5.enableOutputs();
      MPAP6.enableOutputs();
      MPAP7.enableOutputs();

      MPAProuge.enableOutputs();
      MPAPbleu.enableOutputs();
      MPAPjaune.enableOutputs();
      MPAPviolet.enableOutputs();
      MPAPgris.enableOutputs();
      ////////////////////////////////
      MPAP1.move(CONTINUE);
      MPAP2.move(CONTINUE);
      MPAP3.move(CONTINUE);
      MPAP4.move(CONTINUE);
      MPAP5.move(CONTINUE);
      MPAP6.move(CONTINUE);
      MPAP7.move(CONTINUE);

      MPAProuge.move(CONTINUE);
      MPAPbleu.move(CONTINUE);
      MPAPjaune.move(CONTINUE);
      MPAPviolet.move(CONTINUE);
      MPAPgris.move(CONTINUE);
    }
    //marche arrière
    else if(Incoming_value == "marcheArriere") 
    {
      MPAP1.enableOutputs();
      MPAP2.enableOutputs();
      MPAP3.enableOutputs();
      MPAP4.enableOutputs();
      MPAP5.enableOutputs();
      MPAP6.enableOutputs();
      MPAP7.enableOutputs();

      MPAProuge.enableOutputs();
      MPAPbleu.enableOutputs();
      MPAPjaune.enableOutputs();
      MPAPviolet.enableOutputs();
      MPAPgris.enableOutputs();
      ////////////////////////////////
      MPAP1.move(-CONTINUE);
      MPAP2.move(-CONTINUE);
      MPAP3.move(-CONTINUE);
      MPAP4.move(-CONTINUE);
      MPAP5.move(-CONTINUE);
      MPAP6.move(-CONTINUE);
      MPAP7.move(-CONTINUE);

      MPAProuge.move(-CONTINUE);
      MPAPbleu.move(-CONTINUE);
      MPAPjaune.move(-CONTINUE);
      MPAPviolet.move(-CONTINUE);
      MPAPgris.move(-CONTINUE);     
    }
    //arrêt des moteurs
    else if(Incoming_value == "ArretDesMoteurs") 
    {
      MPAP1.stop();
      MPAP2.stop();
      MPAP3.stop();
      MPAP4.stop();
      MPAP5.stop();
      MPAP6.stop();
      MPAP7.stop();

      MPAProuge.stop();
      MPAPbleu.stop();
      MPAPjaune.stop();
      MPAPviolet.stop();
      MPAPgris.stop();  
      ////////////////////////////////
      MPAP1.disableOutputs();
      MPAP2.disableOutputs();
      MPAP3.disableOutputs();
      MPAP4.disableOutputs();
      MPAP5.disableOutputs();
      MPAP6.disableOutputs();
      MPAP7.disableOutputs();

      MPAProuge.disableOutputs();
      MPAPbleu.disableOutputs();
      MPAPjaune.disableOutputs();
      MPAPviolet.disableOutputs();
      MPAPgris.disableOutputs();
    }
  }  
}

Merci

Cordialement

J'avais dit:

pas d'envoyer une image... Non seulement on ne peut rien en faire de pratique, c'est pas bien lisible sur petit écran de smartphone et ça encombre les réseaux informatiques et les disques durs pour rien contribuant à la pollution et surconsommation énergétique...

merci de ne plus jamais poster d'image d'un texte ici...

Attention, la seule utilisation de cette bibliothèque est la constante CONTINUE qui donne une rotation continue avec cette bibliothèque mais pas tout à fait avec accelStepper Cette constante vaut dans ton cas 0x7FFFFFF, et pas l'infini. La rotation n'est pas continue, mais demande de faire environ 2000000000pas. A raison de 500 pas par seconde, la rotation doit s'arrêter au bout de 50 jours environ. Mais il y a quand même des chances que tu n'ailles pas à 50 jours de fonctionnement continue d'un moteur.
Mais autant remplacer

#include "MTstepStepper.h" //Voir: http:arduino.dansetrad.fr/MTobjects

par

#define CONTINUE 0x7FFFFFFF
1 Like

Bonsoir
1)@vileroi Cette notation en hexadécimal, fait-elle partie de la bibliothèque MTobjects ?

Je dispose d'un montage avec un seul moteur pas à pas comme celui-ci:


Je souhaiterai déplacer le driver A4988 de la breadbord vers une carte d'extension de driver à l'image de celle-ci:

Les fonctions des dents qui se situent sur la carte me semble un peu déroutantes
2) Est-il correct si je branche la carte d'extension comme ceci avec le potentiomètre du driver vers la gauche ?

Cordialement

La notation hexadécimale fait partie du C:
1000 -> c'est du décimal
01000-> c'est de l'octal (parce que cela commence par le chiffre 0)
0b1000 -> c'est du binaire
0x1000 -> c'est de l'hexadécimal

Dans MTobjets, par défaut les pas sont définis sur 32 bits (long), mais on peut modifier la bibliothèque pour qu'elle utilise seulement 16 bits (int). Comme la définition est la même pour les deux tailles, je ne peux pas utiliser la notation hexadécimale. Mais le résultat est le même. CONTINU est donc défini par:

#define CONTINUE ((unsigned int_t)(~0) >>1)

qui donne 0x7FFF ou 0x7FFFFFFF suivant que int_t est long ou int

Le plus simple est d'écrire en hexa, car il y a peu de risques d'erreur. Mais

#define CONTINUE 0x7FFFFFFF
#define CONTINUE 2147483647
#define CONTINUE 0b01111111111111111111111111111111
#define CONTINUE 017777777777

sont équivalents

Je ne suis pas spécialiste de cette carte (je ne la connais pas). Mais en principe S indique que c'est un signal, V le Vcc et G le Gnd
Normalement EN veut dire enable (sélectionné = marche) et voudrait dire qu'il fut la mettre à pour que le moteur fonctionne. /EN indiquerait une logique inversée: il faut mettre l'entrée à GND pour que le moteur fonctionne. Mais la norme n'est pas toujours respectée. La datasheet du A4988 appelle la broche correspondante ENABLE avec une barre dessus (en info, comme on ne peut pas mettre de caractères surlignés facilement, on a pris l'habitude de la mettre avant ce qui donne /ENABLE). Donc à priori il faut que cette broche soit à GND pour que le moteur fonctionne.

Mais rien ne dit ce qui se passe si l'entrée est en l'air. Dans la datasheet rien n'est dit, il est alors possible que l'état en l'air corresponde à un état indéterminé. Sur les petites plaquette qui s'enfichent sur ta carte d'extension, il y a une résistance de pulldown. Mais il y a aussi un shield pour uno qui accepte ces petites plaquettes mais qui imposent un HIGH si la broche est en l'air. Je ne sais pas ce que fait ta carte d'extension.
Si le moteur ne tourne pas, il faut mettre la pin /EN à la masse. Si il ne tourne toujours pas, ce n'est pas de la faute de /EN. Mais dans tous les cas (qu'il y ait sur la carte d'extension une pullup ou une pulldown ou rien) mettre /EN à GND permet le fonctionnement. Autant mettre ce fil systématiquement si tu n'utilises pas la fonction enable.

1 Like

Bonjour

Avec le A4988 seul, le driver est activé du fait d'une PULL_DOWN de 100k
image

Le petit shield recevant le A4988 du post #8, c'est l'inverse, cette pin a une PULL_UP de 10K
image
si elle est en l'air comme sur le schéma, le driver est désactivé.
Il faut soit lui mettre un GND donc actif en permanence ou gérer ce signal depuis le programme.

Cordialement
jpbbricole

1 Like

Bonjour
@jpbbricole J'ai essayé de changer les branchements suivant les explications. Si je modifie le câblage comme ceci, est-ce correct ?

Cordialement

Bonjour enash

Oui, mais un seul fil GND (bleu) et un seul +5V (rouge) sont nécessaires les bornes rouges sont ensemble ainsi que les noires.

Par contre, il faut mettre un GND (bleu) sur EN, sinon ton moteur ne tournera pas.
image

Cordialement
jpbbricole

1 Like

J'ai effectué deux tests avec le nouveau câblage. L'un avec le driver avec le potentiomètre du driver vers la gauche:
image

Et l'autre avec le potentiomètre du driver vers la droite:
image

Dans un cas le moteur est toujours détendu et dans l'autre le moteur consomme de l'énergie, mais dans les deux cas, il refuse de tourner. Aurait-je encore oublier quelque chose ?

Cordialement

Bonjour enash

Mets ton programme de test en ligne.

Cordialement
jpbbricole

Voici mon programme:

#define btSerial Serial1     // Port du bluetooth
#include "AccelStepper.h"
#define CONTINUE 0x7FFFFFFF

String Incoming_value = "";

const byte mpapDirPin = 4;     // Pour driver MPAP pin pas
const byte mpapStepPin = 5;     // Pour driver MPAP pin direction

AccelStepper MPAP1(1, mpapStepPin, mpapDirPin);     // 1 pour A4988

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  btSerial.begin(9600);
  // // // // // // // // // // // // // // // 
  MPAP1.setMaxSpeed(400);
  MPAP1.setAcceleration(500);
  //mpap1.setEnablePin(mpapEnaPin);
  //                    DIR    STEP  ENA
  MPAP1.setPinsInverted(false, false, true);
  MPAP1.enableOutputs();     // Activer les signaux du MPAP
  // // // // // // // // // // // // // // //
}

void loop() {
  // put your main code here, to run repeatedly:
  if (btSerial.available())
  {
    Incoming_value = btSerial.readStringUntil('\n');
    Incoming_value.trim();     // Nettoyage de Incoming_value 
    Serial.println("Recu : " + Incoming_value);
    //----------------------------- MPAP1
    if (Incoming_value == "marcheAvant")
    {
      Serial.println("Marche avant");
      MPAP1.move(CONTINUE);
    }
    if (Incoming_value == "marcheArriere")
    {
      Serial.println("Marche arriere");
      MPAP1.move(-CONTINUE);
    }
    if (Incoming_value == "arretDesMoteurs")
    {
      Serial.println("Arret des moteurs");
      MPAP1.stop(); 
    }
  }
  MPAP1.run();
}

Voici le fichier aia:
marche_avant_et_marche_arriere.zip (2,1 Ko)

Cordialement

Bonjour enash

Pour le moment, mets le au milieu, tu pourras affiner plus tard.
Ainsi, est ce que le moteur résiste à la rotation manuelle?

Il ne semble pas.
Quelle tension alimenta ton moteur, normalement 8-35V.
Vois tu tes commandes dans le moniteur?

Recu : marcheAvant
Marche avant
Recu : marcheArriere
Marche arriere
Recu : arretDesMoteurs
Arret des moteurs

J'ai essayé ton programme, il fonctionne, seul modification, pour que le moteur tourne arrière, changé
#define CONTINUE 0x7FFFFFFF
en
#define CONTINUE 0x7FFFFFF
je n'ai pas compris pourquoi.
Ainsi ça fonctionne impeccable!

A+
Cordialement
jpbbricole

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