Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Projet vehicule autonome...




  1. #1
    ikary67

    Projet vehicule autonome...

    Bonjour à toutes et tous,

    Débutant sur Arduino, convaincu des capacités de cette carte, je désire mettre ces capacités matériels au service de mes réflexions.
    La problématique:
    rendre un véhicule autonome pour des déplacement en interieur ou extérieur grâce à une une carte Arduino mega, 2 servomoteurs, et un HC-SR04
    Le premier servomoteur effectue un balayage de 10 à 170° le HC-SR04 monté sur l'axe de rotation tel un balayage radar.
    Si la distance mesuré est inférieur à 30cm le 2eme servomoteur (de direction) tourne à l'opposé de l'obstacle de manière proportionnelle à l'angle du servomoteur (radar) lorsque l'obstacle a été détecté ce qui rendra le déplacement moins chaotique.

    Je suis à la recherche de pistes pour résoudre ma problématique car dans l'état actuel des choses je pêche par manque de compétences...

    voici où j'en suis pour le moment:

    Code:
    // déclaration des constantes pour les broches du HC-SR04 
    
    const byte TRIGGER_PIN = 2; //Broche Trigger
    const byte ECHO_PIN = 3; //Broche Echo
    
    // Déclaration de la constante de timeout HC-SR04 
    
    const unsigned long MEASUR_TIMEOUT =25000UL; //25ms=~8m à 340m/s
    
    //Déclartion de la ref de la vitesse du son dans l'air en mm/us 
    
    const float SOUND_SPEED = 340.0/1000;
    
    // Appel de la lib servo
    
    #include <Servo.h>
    
    #define INCR1 1
    #define INCR2 2
    
    //Déclaration des servos, servo1 pour le radar, servo2 pour la direction
    
    Servo servo1, servo2;
    
    //Consigne de position intitial des servos
    
    int angle1 = 0;
    int angle2 = 0;
    
    
    void setup()
    
        
      // Initialise les broches 
      pinMode(TRIGGER_PIN, OUTPUT);
      digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER à LOW au repos
      pinMode(ECHO_PIN, INPUT);
    
      //Attache du servomoteur 1 à la broche 8
      servo1.attach(8)
       //Attache du servomoteur 2 à la broche 9
      servo2.attach(9)
       
    }
    
    void loop()
    
    // commande de balayage droite gauche du servo1 (radar)
    {
      for(int position = 10; position <= 170; position++)
      {
        servo1.write(position);
        
        delay(20);
      }
      for(int position = 170; position>=10; position--)
      {
        servo1.write(position);
        
        delay(20);
      }
    }
    Je n'arrive pas à intégrer la couche de lecture d'angle du servo1 et la partie lecture et affectation de distance lu au servo2
    Donc toute ma problématique.

    En attendant vos conseils, je vous souhaite une bonne soirée

    Amicalement

    -----

    Dernière modification par Antoane ; 03/05/2018 à 22h39. Motif: Ajout des balises code

  2. Publicité
  3. #2
    f6bes

    Re : Projet vehicule autonome...

    Bjr à toi
    Et si ton " véhicule" détecte un obstacle dans une position "inverse"..tu fais quoi ?
    Ex: ton véhicule arrive dans la bissectrice de l'angle d'une piéce.
    Il y aura certainement détection des...deux cotés.
    Va falloir...reculer.
    Bonne journée
    "Ce fut la goutte d'eau de trop qui mit le feu aux poudres!"

  4. #3
    ikary67

    Re : Projet vehicule autonome...

    Bonjour,
    En effet, c'est une solution, ci déjà j'en suis à ce stade, il est possible d'ordonner dans ce cas une inversion de sens de rotation du moteur en paramétrant une plus petite vitesse pour la marche arrière par exemple, mais je n'en suis pas encore là...
    mais le demi-tour fonctionne également dans ce cas.
    Merci pour la remarque, je me rends compte que je dois approfondir le problème...

    Bonne journée
    Dernière modification par ikary67 ; 04/05/2018 à 12h36.


  5. #4
    Elzaidir

    Re : Projet vehicule autonome...

    Bonjour à toi,

    j'ai fait un petit robot dans le même genre, avec les même capteurs et la même carte arduino.

    La méthode qui consiste à éviter l'obstacle en allant dans la direction opposé fonctionne, mais on peut faire largement mieux.

    Lorsqu'on détecte un obstacle, on connait sa position relative de l'obstacle par rapport au robot par trigonométrie. Donc un méthode plus efficace serait de calculer un point où le robot devra passer pour quand-même conserver approximativement sa direction, tout en évitant l'obstacle.

    On fait un peut de trigonométrie et ça passe. Par contre, il y en a qui vont pas aimer te voir faire des sinus et compagnie sur un processeur qui n'as pas d'unité de calcul à virgule flottante. Mais de toute manière le sonar est déjà extrêmement lent, le temps ne sera pas une grosse contrainte.

  6. #5
    ikary67

    Re : Projet vehicule autonome...

    Bonsoir à toutes et tous,

    Ayant rencontré quelques problèmes avec mon premier script, j'ai fais table raz et tout recommencé.

    je l'ai fait en regardant un tuto français pour la commande d'un pont H L298D

    Je partage, car il fonctionne...

    Vos avis et remarques sont les bienvenus je pense qu'il y a moyen d’améliorer mais je ne vois pas comment... (c'est plus de la curiosité qu'une obligation, il fonctionne...)

    Code:
    //Tests robot autonome sur base à chenilles
    
    // Déclaration de la bibliotech servo
    #include <Servo.h> 
     
    //Déclaration des points de sortie
    const int trigPin = 9;
    const int echoPin = 8;
    const int mg1=7;
    const int mg2=6;
    const int md1=5;
    const int md2=4;
    const int servoPin=10;
    
    //Déclaration du servo
    Servo cmdsonar;
    
    // Déclaration des variables
    long duration;
    int distance;
    int distance_a;
    int distance_d;
    int distance_g;
    int Distance_mini=30;
    
    void setup() {
    pinMode(trigPin, OUTPUT); // Parmettrage du triger en sortie
    pinMode(echoPin, INPUT); // Parmettrage de l'echo en entrée
    
    // Déclaration des sorties de commande des moteurs
    pinMode(mg1,OUTPUT);
    pinMode(mg2,OUTPUT);
    pinMode(md1,OUTPUT);
    pinMode(md2,OUTPUT);
    
    // Initialisation de la position de base du servomoteur
    cmdsonar.attach(servoPin);
    cmdsonar.write(83);
    
    //Démarage du port série
    Serial.begin(19200);
    }
    void loop() {
       distance_a=sonar();
       if(distance_a > Distance_mini){
         avant();
         delay(400);
       }else{
          Stop();
          get_Distance();
          if(distance_d > Distance_mini){
            droite();
            delay(400);
            avant();
          }else if(distance_g > Distance_mini){
            gauche();
            delay(400);
            avant();
          }else{
            arriere();
            delay(400);
            Stop();
          }
        
       }
    }
    
    void displayDistance(){
         
         //Affichage des distances mesurées
         Serial.print("Distance à droite : ");
         Serial.print(distance_d);
         Serial.println("");
         Serial.print("Distance devant : ");
         Serial.print(distance_a);
         Serial.println("");
         Serial.print("Distance à gauche : ");
         Serial.print(distance_g);
         Serial.println("");
      
    }
    
    //Déclaration des états de sortie de commande du pont H 
    void avant(){
        Serial.println("Marche avant");
        digitalWrite(mg2,HIGH);
        digitalWrite(md2,HIGH);
        digitalWrite(mg1,LOW);
        digitalWrite(md1,LOW);
    
    }
    void arriere(){
        Serial.println("Marche arrière");
        digitalWrite(mg1,HIGH);
        digitalWrite(md1,HIGH);
        digitalWrite(mg2,LOW);
        digitalWrite(md2,LOW);
    }
    void gauche(){
      digitalWrite(md2,HIGH);
      digitalWrite(md1,LOW);
      digitalWrite(mg1,HIGH);
      digitalWrite(mg2,LOW);
    }
    void droite(){
      digitalWrite(mg2,HIGH);
      digitalWrite(mg1,LOW);
      digitalWrite(md1,HIGH);
      digitalWrite(md2,LOW);
    }
    void Stop(){
      digitalWrite(mg2,LOW);
      digitalWrite(mg1,LOW);
      digitalWrite(md1,LOW);
      digitalWrite(md2,LOW);
    }
    
    void get_Distance(){
      cmdsonar.write(0);
      delay(500);
      int temp_r1=sonar();
      cmdsonar.write(37);
      delay(500);
      int temp_r2=sonar();
      if(temp_r1<temp_r2){
        distance_d=temp_r1;
      }else{
        distance_d=temp_r2;
      }
      cmdsonar.write(83);
      delay(500);
      distance_a=sonar();
      
      cmdsonar.write(142);
      delay(500);
      int temp_l1=sonar();
      cmdsonar.write(180);
      delay(500);
      int temp_l2=sonar();
      if(temp_l1<temp_l2){
        distance_g=temp_l1;
      }else{
        distance_g=temp_l2;
      }
      cmdsonar.write(83);
      
    }
    
    int sonar(){
      // Mise à l'état bas de l'entrée triger
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      // Mise à l'état haut de l'entrée triger pour 10 us et passage à l'état bas
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      // Lecture de l'entrée echo 
      int temp = pulseIn(echoPin, HIGH);
      // Calcul de la distance
      distance= temp*0.034/2;
      // Affichage de la distance dans le moniteur série
      return distance;
    }
    Bonne soirée à tous

  7. A voir en vidéo sur Futura
  8. #6
    ikary67

    Re : Projet vehicule autonome...

    Dès que possible, je partagerai la vidéo du fonctionnement de mon châssis de char (Jouet RC de mon fils qui ne fonctionnait plus....)

Discussions similaires

  1. Immersion dans l'intelligence d'un véhicule autonome
    Par MarineTech dans le forum Technologies
    Réponses: 3
    Dernier message: 27/10/2015, 08h08
  2. Projet véhicule autonome
    Par flo39400 dans le forum Électronique
    Réponses: 5
    Dernier message: 13/01/2015, 10h34
  3. Véhicule-habitat nomade et autonome
    Par exopia dans le forum Physique
    Réponses: 4
    Dernier message: 06/06/2010, 07h08
  4. Vehicule sur Mars et moyen de guidage autonome
    Par darkmusset dans le forum Physique
    Réponses: 9
    Dernier message: 31/08/2007, 16h22
  5. Projet Véhicule INSA
    Par andrea aguilera dans le forum Électronique
    Réponses: 5
    Dernier message: 24/02/2007, 05h37