Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de moteur l293d

Sujet résolu
    22 avril 2021 à 11:32:57

    Bonjour 

    mes moteurs fonctionnent de façon inapproprié avec ce programme:

    const int trigPin_droit = A3;  // Trigger (emission)
    const int echoPin_droit = A4;  // Echo    (réception)
    const int trigPin_gauche = 5;  // Trigger (emission)
    const int echoPin_gauche = 6;  // Echo    (réception)
    
    const int motor_gauchePin2 = 2;    // pin 2 du L293D
    const int motor_gauchePin4 = 4;    // pin 4 du L293D
    const int enable_gauchePin10 = 10;     // pin (Enable)du L293D
    
    const int motor_droitPin3= 3;    // pin 3 du L293D
    const int motor_droitPin8 = 8;    // pin 1 du L293D
    const int enable_droitPin11 = 11;     // pin (Enable)du L293D
    
    // Variables 
    long duree_droit;   // durée de l'echo
    int distance_droit; // distance
    long duree_gauche;   // durée de l'echo
    int distance_gauche; // distance
    
    //int pot=0;
    //int motor_slow=50;
    int motorSpeed= 255;
    
    int Tout_droit(){
    
     analogWrite(enable_gauchePin10, motorSpeed);
     analogWrite(enable_droitPin11, motorSpeed);
      
     digitalWrite(motor_gauchePin2, HIGH);    
     digitalWrite(motor_gauchePin4, LOW) ;   
      
     digitalWrite(motor_droitPin3, LOW);   
     digitalWrite(motor_droitPin8, HIGH);
    }
    
    int Tourne_droite(){
    
     analogWrite(enable_droitPin11, motorSpeed);
     analogWrite(enable_gauchePin10, //motor_slow); 
     
     digitalWrite(motor_gauchePin2, HIGH);    
     digitalWrite(motor_gauchePin4, LOW) ;   
      
     digitalWrite(motor_droitPin3, LOW);
     digitalWrite(motor_droitPin8, HIGH);
    }
    
    int Tourne_gauche(){
      
     analogWrite(enable_droitPin11, motor_slow);
     analogWrite(enable_gauchePin10, //motorSpeed); 
      
     digitalWrite(motor_gauchePin2, HIGH);    
     digitalWrite(motor_gauchePin4, LOW) ;   
      
     digitalWrite(motor_droitPin3, LOW);   
     digitalWrite(motor_droitPin8, HIGH);
    }
    
    int arret(){
    
    analogWrite(enable_droitPin11, 0);
    analogWrite(enable_gauchePin10,0); 
    
    digitalWrite(motor_gauchePin2, LOW);    
    digitalWrite(motor_gauchePin4, LOW) ;   
      
    digitalWrite(motor_droitPin3, LOW);   
    digitalWrite(motor_droitPin8, LOW);
    }
    
    void setup() {
    
     pinMode(trigPin_droit, OUTPUT); // Configuration du port du Trigger comme une SORTIE
     pinMode(echoPin_droit, INPUT);// Configuration du port de l'Echo  comme une ENTREE
     pinMode(trigPin_gauche, OUTPUT); // Configuration du port du Trigger comme une SORTIE
     pinMode(echoPin_gauche, INPUT);  // Configuration du port de l'Echo  comme une ENTREE
     
     digitalWrite(trigPin_droit, LOW);
     digitalWrite(trigPin_gauche, LOW);
      
     Serial.begin(9600); // Démarrage de la communication série
     
     pinMode(motor_gauchePin2, OUTPUT);    
     pinMode(motor_gauchePin4, OUTPUT) ;   
     pinMode(enable_gauchePin10, OUTPUT);     
    
     pinMode(motor_droitPin3, OUTPUT);   
     pinMode(motor_droitPin8, OUTPUT);    
     pinMode(enable_droitPin11, OUTPUT);  
    }
    
    void loop() {
    
    //int motorSpeed= analogRead(pot)/4;
     //Serial.print(motorSpeed);
    //if (motorSpeed== motor_slow){
        //motor_slow=motor_slow-10;
      // }
      
     digitalWrite(trigPin_droit, HIGH);
     delayMicroseconds(10);
     digitalWrite(trigPin_droit, LOW);
     duree_droit = pulseIn(echoPin_droit, HIGH);
     distance_droit = duree_droit/58;// Calcul de la distance
      
     // Affichage de la distance dans le Moniteur Série
     
     Serial.print("Distance_droit : ");
     Serial.print(distance_droit);
     Serial.println("cm");
     
     delay(60);
    
     digitalWrite(trigPin_gauche, HIGH);
     delayMicroseconds(10);
     digitalWrite(trigPin_gauche, LOW);
     duree_gauche = pulseIn(echoPin_gauche, HIGH);
     distance_gauche = duree_gauche/58;// Calcul de la distance  
     
     // Affichage de la distance dans le Moniteur Série 
      
     Serial.print("Distance_gauche : ");
     Serial.print(distance_gauche);
     Serial.println("cm");
     
     Tout_droit();//marche avant
    
    if (distance_droit<7)//tourne à gauche si "distance_gauche" est inférieur à 7cm
     {
     Tourne_gauche();
     }
    
    if (distance_gauche<7)//tourne à droite si "distance_droit" est inférieur à 7cm
     {
     Tourne_droite(); 
     }
    
    if ((distance_gauche<7) && (distance_droit<7))//arrêt des moteurs si "distance_gauche" et "distance_droit" est inférieur à 7cm
     {
     arret();
     }
    }
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2021 à 13:28:06

      C'est bien gentil de dire "ça ne fonctionne pas de façon approprié" mais c'est un peu léger comme description...

      Il faudrait à minima nous dire ce qu'il se passe réellement et ce que tu aurais aimé que ça fasse à la place.

      Une petite phrase du genre : "si je place un obstacle devant le capteur droit, mes moteurs continuer d'aller tout droit alors que cela devrait tourner à gauche".

      Sans ces quelques informations supplémentaires, on ne pourra malheureusement pas deviner ce que tu souhaites réaliser.

      Je te conseille aussi de copier/coller les données qui s'affichent dans la console Arduino, cela nous permettra de savoir ce que mesures tes capteurs.

      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2021 à 14:08:46

        C'est en faite quand j'active la fonction Tout_droit();//marche avant tout est normal c'est-à dire que les moteurs tournent à vitesse constante mais quand j'active la fonction arret() les moteurs ne s'arrêtent pas (ils oscillent entre 0 et 15 rpm) et les fonctions Tourne_droite(); etTourne_gauche(); ne fonctionnent pas.

        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2021 à 14:41:07

          Tu as bien connecté la masse de l'arduino avec la masse de la carte L293D ? Quand les 2 masses ne sont pas connectée, la carte peut semble marcher dans certains cas, mais pas d'autres malgré des signaux en entrée apparemment corrects.
          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2021 à 14:44:47

            OUI la masse de l'arduino avec la masse de la carte L293D 
            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2021 à 16:46:23

              Essaye une fonction loop() plus simple avec juste:

              void loop() {
                Tout_droit();
                delay(1000);
                arret();
                delay(1000);
              }

              et le reste du code inchangé.

              Si le moteur continue de tourner mais plus lentement pendant la phase d'une seconde où il est censé être arrêté, revérifie tes connexions. Si les temps de chaque phase ne semble pas correspondre à 1 seconde, peut-être que l'arduino se réinitialise suite à des chutes de tension.

              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2021 à 17:31:09

                J'AI TOUJOURS LE MeME PROBLeme mais ton programme a marché

                const int trigPin_droit = A3;  // Trigger (emission)
                
                const int echoPin_droit = A4;  // Echo    (réception)
                
                const int trigPin_gauche = 5;  // Trigger (emission)
                
                const int echoPin_gauche = 6;  // Echo    (réception)
                
                 
                
                const int motor_gauchePin2 = 2;    // pin 2 du L293D
                
                const int motor_gauchePin4 = 4;    // pin 4 du L293D
                
                const int enable_gauchePin10 = 10;     // pin (Enable)du L293D
                
                 
                
                const int motor_droitPin3= 3;    // pin 3 du L293D
                
                const int motor_droitPin8 = 8;    // pin 1 du L293D
                
                const int enable_droitPin11 = 11;     // pin (Enable)du L293D
                
                 
                
                const int bouton_on = 7;     // Numéro de la broche à laquelle est connecté le bouton poussoir
                
                int etatBouton_on = 0;
                
                const int bouton_off = 9;     // Numéro de la broche à laquelle est connecté le bouton poussoir
                
                int etatBouton_off = 0;
                
                 
                
                int LED=13;
                
                 
                
                // Variables 
                
                long duree_droit;   // durée de l'echo
                
                int distance_droit; // distance
                
                long duree_gauche;   // durée de l'echo
                
                int distance_gauche; // distance
                
                 
                
                int motorSpeed= 255;
                
                 
                
                int Tout_droit(){
                
                 
                
                 analogWrite(enable_gauchePin10, motorSpeed);
                
                 analogWrite(enable_droitPin11, motorSpeed);
                
                 
                
                 digitalWrite(motor_gauchePin2, HIGH);    
                
                 digitalWrite(motor_gauchePin4, LOW) ;   
                
                 
                
                 digitalWrite(motor_droitPin3, LOW);   
                
                 digitalWrite(motor_droitPin8, HIGH);
                
                }
                
                 
                
                int Tourne_droite(){
                
                 
                
                 analogWrite(enable_droitPin11, motorSpeed);
                
                 analogWrite(enable_gauchePin10, 50); 
                
                 
                
                 digitalWrite(motor_droitPin3, LOW);   
                
                 digitalWrite(motor_droitPin8, HIGH); 
                
                 
                
                 digitalWrite(motor_gauchePin2, HIGH);    
                
                 digitalWrite(motor_gauchePin4, LOW);
                
                }
                
                 
                
                int Tourne_gauche(){
                
                  
                
                 analogWrite(enable_droitPin11, 50);
                
                 analogWrite(enable_gauchePin10, motorSpeed); 
                
                 
                
                 digitalWrite(motor_gauchePin2, HIGH);    
                
                 digitalWrite(motor_gauchePin4, LOW) ;   
                
                 
                
                 digitalWrite(motor_droitPin3, LOW);   
                
                 digitalWrite(motor_droitPin8, HIGH);
                
                }
                
                 
                
                int arret(){
                
                 
                
                analogWrite(enable_droitPin11, 0);
                
                analogWrite(enable_gauchePin10,0);
                
                 
                
                digitalWrite(motor_gauchePin2, LOW);    
                
                digitalWrite(motor_gauchePin4, LOW) ;   
                
                 
                
                digitalWrite(motor_droitPin3, LOW);   
                
                digitalWrite(motor_droitPin8, LOW);
                
                }
                
                 
                
                void setup(){
                
                 
                
                 pinMode(LED, OUTPUT); // Configuration du port 13
                
                 
                
                 pinMode(trigPin_droit, OUTPUT); // Configuration du port du Trigger comme une SORTIE
                
                 pinMode(echoPin_droit, INPUT);// Configuration du port de l'Echo  comme une ENTREE
                
                 pinMode(trigPin_gauche, OUTPUT); // Configuration du port du Trigger comme une SORTIE
                
                 pinMode(echoPin_gauche, INPUT);  // Configuration du port de l'Echo  comme une ENTREE
                
                 
                
                 digitalWrite(trigPin_droit, LOW);
                
                 digitalWrite(trigPin_gauche, LOW);
                
                  
                
                 Serial.begin(9600); // Démarrage de la communication série
                
                 
                
                 pinMode(motor_gauchePin2, OUTPUT);    
                
                 pinMode(motor_gauchePin4, OUTPUT) ;   
                
                 pinMode(enable_gauchePin10, OUTPUT);     
                
                 
                
                 pinMode(motor_droitPin3, OUTPUT);   
                
                 pinMode(motor_droitPin8, OUTPUT);    
                
                 pinMode(enable_droitPin11, OUTPUT);  
                
                }
                
                 
                
                void loop(){
                
                 
                
                 // Envoie d'une slave ultrasonor pendant 10 μs
                
                 
                
                 digitalWrite(trigPin_droit, HIGH);
                
                 delayMicroseconds(10);
                
                 digitalWrite(trigPin_droit, LOW);
                
                 duree_droit = pulseIn(echoPin_droit, HIGH);
                
                 distance_droit = duree_droit/58;// Calcul de la distance
                
                  
                
                 // Affichage de la distance dans le Moniteur Série
                
                 
                
                 Serial.print("Distance_droit : ");
                
                 Serial.print(distance_droit);
                
                 Serial.println("cm");
                
                 
                
                 delay(60);
                
                 
                
                 digitalWrite(trigPin_gauche, HIGH);
                
                 delayMicroseconds(10);
                
                 digitalWrite(trigPin_gauche, LOW);
                
                 duree_gauche = pulseIn(echoPin_gauche, HIGH);
                
                 distance_gauche = duree_gauche/58;// Calcul de la distance  
                
                 
                
                 // Affichage de la distance dans le Moniteur Série 
                
                  
                
                 Serial.print("Distance_gauche : ");
                
                 Serial.print(distance_gauche);
                
                 Serial.println("cm");
                
                  
                
                 // lit l'état du bouton et stocke le résultat dans  etatBouton_off et  etatBouton_on
                
                 etatBouton_on = digitalRead(bouton_on);
                
                 etatBouton_off = digitalRead(bouton_off);
                
                 
                
                // Si etatBouton est à 5V (HIGH) c'est que le bouton est appuyé
                
                //if(etatBouton_on == HIGH){ 
                
                   
                
                 //digitalWrite(LED, HIGH);// ON
                
                 
                
                 Tout_droit();
                
                 
                
                if(distance_droit<7)//tourne à gauche si "distance_gauche" est inférieur à 7cm
                
                 {
                
                 Tourne_gauche();
                
                 }
                
                 
                
                if(distance_gauche<7)//tourne à droite si "distance_droit" est inférieur à 7cm
                
                 {
                
                 Tourne_droite(); 
                
                 }
                if(distance_gauche<7 && distance_droit<7)//arrêt des moteurs si "distance_gauche" et "distance_droit" est inférieur à 7cm
                 {
                 arret();
                }



                -
                Edité par JacksonTobbo 22 avril 2021 à 19:33:03

                • Partager sur Facebook
                • Partager sur Twitter
                  23 avril 2021 à 14:39:56

                  Tu n'as toujours pas mis le timeout de 60000 que j'évoquais dans ton autre post donc si il n'y a aucun obstacle de détecté, ton programme va rester bloqué dans son état actuelle pendant 2 secondes (une seconde par capteur).

                  https://openclassrooms.com/forum/sujet/l293d-capteurs-ultrasons

                  Ensuite, étant donné que tu fais des Serial.print, pourrais tu nous dire ce que tu vois d'afficher dans la console Arduino ? (cela permettra d'avoir une idée de ce qu'il se passe)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 avril 2021 à 16:16:45

                    C'est bon j'ai réussi à régler le problème en créant une fonction distance() et ajoutant une initialisation de la détection des capteurs
                    • Partager sur Facebook
                    • Partager sur Twitter

                    problème de moteur l293d

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown