Partage
  • Partager sur Facebook
  • Partager sur Twitter

L293d+capteurs ultrasons

Sujet résolu
    21 avril 2021 à 16:14:19

    Bonjour,

    Quand j’utilise ce code j’ai qu’un seul moteur qui fonctionne et non les 2:

    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_droitPin1 = 1; // 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
    
    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
    digitalWrite(trigPin_droit, LOW);
    digitalWrite(trigPin_gauche, LOW);
    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
    
    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_droitPin1, OUTPUT);
    pinMode(enable_droitPin11, OUTPUT);
    
    }
    
    void loop() {
    
    //Émission d’une slave ultrasonor pendant une période de 10 ps
    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”);
    
    analogWrite(enable_gauchePin10, 255);
    analogWrite(enable_droitPin11,255);
    
    }


    -
    Edité par lorrio 21 avril 2021 à 18:06:41

    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2021 à 18:13:43

      Bonjour,

      J'ai édité ton message pour y ajouter les balises balises code afin que cela soit plus lisible (le petit bouton en forme de </> au dessus de la zone d'édition).

      J'en ai aussi profité pour rajouter un petit "Bonjour" au début, ça ne fait pas mal non ?

      Enfin bref, penses-y la prochaine fois, ce serait gentil.

      Sinon, voici plusieurs problèmes dans ton code :

      - Ligne 11 : les pin 0 et 1 servent au Serial, tu n'as pas le droit de les utiliser pour autre chose, il va te falloir utiliser une autre pin pour le moteur droit.

      - Ligne 25 et 26 : tu fais un digitalWrite avant d'avoir passé la pin en OUTPUT, ce n'est pas très logique...

      - Ligne 31 à 37 : tu passes des pins en OUTPUT mais tu n'y affecte aucune valeur avec digitalWrite, c'est potentiellement risqué

      • Partager sur Facebook
      • Partager sur Twitter
        21 avril 2021 à 18:45:48

        Bonjour 

        j'ai corrigé les erreurs mais c'est toujours pareil:

        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
        
        
        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);  
        
         analogWrite(enable_gauchePin10, 255);
         analogWrite(enable_droitPin11, 255);
        }
        
        
        
        void loop() {
          
          //Émission d'une slave ultrasonor pendant une période de 10 ps 
        
         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");
          
        }



        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2021 à 20:46:16

          Comment as tu câblé tout ça ?

          As tu essayé d'inverser les moteurs pour voir si le problème ne venait pas d'un des moteurs ?

          As tu un voltmètre pour vérifier les tensions à différents endroits ?

          • Partager sur Facebook
          • Partager sur Twitter
            21 avril 2021 à 20:58:22

            j'ai inversé les moteurs et j'ai utilisé le voltmètre dans les connexions de l'alim et j'ai toujours le même problème 

            mais par contre sans le code ultrason tout marche 

            le problème vient donc principalement du code

            -
            Edité par JacksonTobbo 21 avril 2021 à 21:00:43

            • Partager sur Facebook
            • Partager sur Twitter
              21 avril 2021 à 21:32:06

              En l'état, ton code ne fait que lire les capteurs et ignore complètement la valeur retournée, donc cela ne devrait avoir aucune influence sur les moteurs.

              A moins que tu ne nous montres qu'une partie de ton code...

              Petite chose qu'il faut garder en tête avec pulseIn, c'est que cette fonction est bloquante jusqu'à réception du pulse ou du timeout.

              Si le pulse n'arrive pas (parce qu'il n'y a aucun obstacle par exemple), alors le fonction pulseIn va bloquer le programme jusqu'au timeout, qui est de une seconde par défaut, ce qui est très long.

              Tu ferais bien de donner un timeout de 60000, ce qui aura pour effet de ne bloquer ton programme que pendant 60000us, soit 60ms ou encore 0.06 secondes, ce qui est extrêmement court tout en permettant de garder la possibilité de détecter des objets jusqu'à 10 mètres.

              A part ce petit détails, tu as encore un problème d'initialisation des pins moteurs :

              - tu as bien pensé à mettre motor_gauchePin2 et motor_gauchePin4 en OUTPUT mais à aucun endoit tu ne fais un digitalWrite pour définir un sens de rotation du moteur.

              - pareil pour motor_droitPin3 et motor_droitPin8 qui sont en OUTPUT mais sans aucun write ne définissant si cela doit être un HIGH ou un LOW.



              -
              Edité par lorrio 21 avril 2021 à 21:37:50

              • Partager sur Facebook
              • Partager sur Twitter

              L293d+capteurs ultrasons

              × 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