[Programmation] Voiture autonome servo moteur et Programme
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Voiture autonome servo moteur et Programme



  1. #1
    invite62a323e3

    Voiture autonome servo moteur et Programme


    ------

    Bonjour,
    Dans le cadre du tpe nous avons choisi de créer une voiture autonome cependant nous sommes parti d'une voiture télécommandée et nous ne savons donc pas quelle est la fréquence du servo moteur. Y a t-il une fréquence donc un moyen de connaitre la fréquence de ce servo moteur ou alors est qu'il y a une norme commune a tous les servos moteurs ?

    De plus le but de notre voiture autonome est de contourner les obstacles or un probleme se pose alors imaginons qu'il y est deux obstacles : ex un devant un sur la gauche comment faire
    L'idéal serait que la voiture tourne a droite puis lorsqu'elle trouve une voie libre s'engage dans celle ci
    Or le programme de la voiture lorsque l'obstacle se trouve devant le fait tourner a gauche puis a droite cependant si il reste un obstacle devant la voiture ne s'engage pas dans la voie libre et tourne a droite de nouveau a droite

    Précision nous sommes sur arduino et que nos capteurs sont les HC SR04
    Nom : Schema voiture.png
Affichages : 455
Taille : 39,2 Ko
    (schéma fait sur paint pour expliquer le but de la voiture) y a t-il un code spécial pour ca, sachant qu'il y a 3 capteurs (pas a l'arrière) ou doit-on coder avec une triple conditions if (condition & condition2 & condition3)

    ici le programme pas encore terminé

    Merci d'avance a tout ceux qui peuvent nous aider et en esperant avoir ete compréhensible
    Bonne journée

    Code:
    #define trigPin 13 // capteur 1= capteur de devant
    #define echoPin 12 // capteur 1
    #define trigPin2 11// capteur 2= capteur de derrière
    #define trigPin3 9// capteur 3
    #define echoPin2 10 // capteur 2
    #define echoPin3 8 // capteur 3 = gauche
    //capteur gauche 
    int pinServo=8;
    int periode=20000;
    
    
    
    void setup() {
      Serial.begin (9600); // initialise la connexion
      pinMode(trigPin, OUTPUT);//mise en place des capteur
      pinMode(echoPin, INPUT);
      pinMode(trigPin2, OUTPUT);
      pinMode(echoPin2, INPUT);
      pinMode(trigPin3, OUTPUT);
      pinMode(echoPin3, INPUT);
     digitalWrite(pinServo,LOW) ;
    }
    
    void loop() {
      long duration, distance;
      digitalWrite(trigPin, LOW);  // Added this line
      delayMicroseconds(2); // Added this line
      digitalWrite(trigPin, HIGH);
    //  delayMicroseconds(1000); - Removed this line
      delayMicroseconds(10); // Added this line
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      distance = (duration/2) / 29.1;
    
    // capteur 2 = capteur de droite
      long duration2, distance2;
      digitalWrite(trigPin2, LOW);  // Added this line
      delayMicroseconds(2); // Added this line
      digitalWrite(trigPin2, HIGH);
    //  delayMicroseconds(1000); - Removed this line
      delayMicroseconds(10); // Added this line
      digitalWrite(trigPin2, LOW);
      duration2 = pulseIn(echoPin2, HIGH);
      distance2 = (duration2/2) / 29.1;
    
    
    // capteur 3 capteur arriere
      long duration3, distance3;
      digitalWrite(trigPin3, LOW);  // Added this line
      delayMicroseconds(2); // Added this line
      digitalWrite(trigPin3, HIGH);
      delayMicroseconds(10); // Added this line
      digitalWrite(trigPin3, LOW);
      duration3 = pulseIn(echoPin, HIGH);
      distance3 = (duration3/2) / 29.1;
    
    
    //capteur 4 capteur de gauche
      long duration4, distance4;
      digitalWrite(trigPin4, LOW);  // Added this line
      delayMicroseconds(2); // Added this line
      digitalWrite(trigPin4, HIGH);
    //  delayMicroseconds(1000); - Removed this line
      delayMicroseconds(10); // Added this line
      digitalWrite(trigPin4, LOW);
      duration4 = pulseIn(echoPin4, HIGH);
      distance4 = (duration4/2) / 29.1;
    
    
    if (distance < 7) { 
    digitalWrite(pinServo,HIGH);
    setangle(180) ; // tourne a droite
    digitalWrite (pinServo,LOW) ;
    do{
    delay(5000);
    }while (distance2<7) //jusqu’a que la voie soit libre
    //ensuite remettre droit
    digitalWrite(pinServo,HIGH);
    setangle(90) ; 
    digitalWrite (pinServo,LOW) ;
    
    }
    
    
    
    
    if (distance2<7){
    digitalWrite(pinServo,HIGH) ;
    setangle(45) ; //decaler a gauche
    digitalWrite(pinServo,LOW) ;
    delay(5000);
    digitalWrite(pinServo,HIGH);
    setangle(90) ; //remettre droit
    digitalWrite (pinServo,LOW) ;
    
    
    
    if(distance3<7){
    digitalWrite(pinServo,HIGH) ;
    setangle(135) ; //decaler a gauche
    digitalWrite(pinServo,LOW) ;
    delay(5000);
    digitalWrite(pinServo,HIGH);
    setangle(90) ; //remettre droit
    digitalWrite (pinServo,LOW) }
    
    
    
    
    
    
    
    
    
    
    
    void setAngle(int a){
      int duree=map(a,0,179,1000,2000);// on transforme l'angle en microsecondes et on stocke dans la variable duree
      digitalWrite(pinServo,LOW);//on met le pin à l'état bas
        for (int t=0;t<300;t++){ 
        digitalWrite(pinServo,HIGH);// on envoie l'impulsion
        delayMicroseconds(duree); // pendant la bonne durée
        digitalWrite(pinServo,LOW); // on stoppe l'impulsion
        delayMicroseconds(duree); // on attend le temps restant pour atteindre la période
        }
    }

    -----
    Dernière modification par gienas ; 19/01/2017 à 10h27. Motif: "Ajouté" les balises code obligatoires pour les programmes

  2. #2
    albanxiii
    Modérateur

    Re : Voiture autonome servo moteur et Programme

    Bonjour,

    Merci de lire http://forums.futura-sciences.com/tp...-tpe-tipe.html

    Transféré en Électronique.

    Pour la modération.
    Not only is it not right, it's not even wrong!

  3. #3
    invite62a323e3

    Re : Voiture autonome servo moteur et Programme

    Excusez moi

  4. #4
    jiherve

    Re : Voiture autonome servo moteur et Programme

    Bonjour
    Pour être franc je suis confronté au même problème 2 capteurs seulement avant arrière et je n'ai pas encore trouvé de solution satisfaisante, mais dans ton cas avec plusieurs capteurs cela devrait être plus simple, il faudra des conditions multiples.
    Le principe c'est d’acquérir les mesures et d'injecter tout çà dans une machine à états (je te laisse chercher les info la dessus).
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    invite62a323e3

    Re : Voiture autonome servo moteur et Programme

    Merci beaucoup je vais me renseigner
    Je pensais qu'il y aurait une fonction qui m'empecherait de faire plein de conditions(mais je comprends le principe des conditions multiple). En revanche je ne connais pas la frequence du servo moteur comment peut on la connaitre ?
    Merci d'avance

  7. #6
    jiherve

    Re : Voiture autonome servo moteur et Programme

    Bonjour
    S'il est question du servo de direction et que celui ci est un modèle classique alors la fréquence de rafraichissement de la consigne c'est environ 50Hz au maximum, il ne sert donc a rien de la calculer plus rapidement , la consigne elle même est un pulse de largeur variant de 1 à 2ms avec neutre à 1,5ms.
    JR
    l'électronique c'est pas du vaudou!

  8. #7
    invite62a323e3

    Re : Voiture autonome servo moteur et Programme

    Ok merci !
    Bonne journée

  9. #8
    invite62a323e3

    Re : Voiture autonome servo moteur et Programme

    Bonjour,
    Un nouveau probleme se dresse et nous n'en avons pas la solution, malheureusement.
    Nous aimerions que notre voiture contourne l'obstacle en face d'elle.
    Ainsi qu'elle tourne a gauche de l'obstacle, puis lorsqu'il y a une voie libre qu'elle tourne a droite.

    Code:
    if (obstacle devant){
    tourne a gauche
    do {
    continue a longer l'obstacle
    }while(obstacle sur la droite)
    puis //c'est ce que nous n'arrivons pas a traduire
    tourne a droite // puis a fini de contourner l'obstacle
    Merci a tout ceux qui pourront répondre

  10. #9
    invite62a323e3

    Re : Voiture autonome servo moteur et Programme

    J'ai fini le code mais des erreurs apparaissent sur la console : des stray302 et stray240 (ce sont les seules erreurs qui apparaissent) et je ne comprends pas d'où elles viennent

    Code:
    #define trigPin 13 // capteur devant
    #define echoPin 12 // capteur devant
    #define trigPin2 11// capteur 2= capteur de droite
    #define trigPin3 9// capteur 3=capteur de gauche 
    #define echoPin2 10 // capteur 2
    #define echoPin3 8 // capteur 3
    int pinServo=4;
    int periode=20000;
    #define trigPin4 7
    #define echoPin4 6 
    #define led 2
    #define led2 3
    
    
    void setup() {
    * Serial.begin (9600); // initialise la connexion
    * pinMode(trigPin, OUTPUT);//mise en place des capteurs
    * pinMode(echoPin, INPUT);
    * pinMode(trigPin2, OUTPUT);
    * pinMode(echoPin2, INPUT);
    * pinMode(trigPin3, OUTPUT);
    * pinMode(echoPin3, INPUT);
    * pinMode(pinServo,OUTPUT);// on prepare le pin en mode OUTPUT cad sortie
      digitalWrite(pinServo,LOW); // on l initialise a l etat bas
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
      pinMode(led, OUTPUT);
      pinMode(led2, OUTPUT);
    }
    
    void loop() {
      
    * long duration, distance;
    * digitalWrite(trigPin, LOW);* // Added this line
    * delayMicroseconds(2); // Added this line
    * digitalWrite(trigPin, HIGH);
    * delayMicroseconds(10); // Added this line
    * digitalWrite(trigPin, LOW);
    * duration = pulseIn(echoPin, HIGH);
    * distance = (duration/2) / 29.1;
    
    // capteur 2 = capteur de droite
    * long duration2, distance2;
    * digitalWrite(trigPin2, LOW);* // Added this line
    * delayMicroseconds(2); // Added this line
    * digitalWrite(trigPin2, HIGH);
    * delayMicroseconds(10); // Added this line
    * digitalWrite(trigPin2, LOW);
    * duration2 = pulseIn(echoPin2, HIGH);
    * distance2 = (duration2/2) / 29.1;
    
    
    // capteur 3 capteur de gauche
    * long duration3, distance3;
    * digitalWrite(trigPin3, LOW);* // Added this line
    * delayMicroseconds(2); // Added this line
    * digitalWrite(trigPin3, HIGH);
    * delayMicroseconds(10); // Added this line
    * digitalWrite(trigPin3, LOW);
    * duration3 = pulseIn(echoPin, HIGH);
    * distance3 = (duration3/2) / 29.1;
    
    
    //capteur 4 capteur arriere
    * long duration4, distance4;
    * digitalWrite(trigPin4, LOW);* // Added this line
    * delayMicroseconds(2); // Added this line
    * digitalWrite(trigPin4, HIGH);
    
    * delayMicroseconds(10); // Added this line
    * digitalWrite(trigPin4, LOW);
    * duration4 = pulseIn(echoPin4, HIGH);
    * distance4 = (duration4/2) / 29.1;
    
    
    if(distance<10){
      if(distance2<10){
         digitalWrite(pinServo,HIGH);// tourne a gauche
         setAngle(0);
         delay(1000);
         digitalWrite(pinServo,LOW);
         digitalWrite(pinServo,HIGH);
          setAngle(90); // remets les roues droites 
          delay(1000);
          digitalWrite(pinServo,LOW);
        do{   // longe l obstacle jusqu a qu il y ait une voie libre
          delay(500);
        }while(distance<20);
         digitalWrite(pinServo,HIGH);//tourne a droite
         setAngle(179);
         delay(1000);
         digitalWrite(pinServo,LOW);
         digitalWrite(pinServo,HIGH);//puis continue tout droit donc contourne l obstacle
          setAngle(90);
          delay(1000);
          digitalWrite(pinServo,LOW);
        
      }
      if(distance3<20){
         digitalWrite(pinServo,HIGH);// tourne a droite
         setAngle(179);
         delay(1000);
         digitalWrite(pinServo,LOW);
         digitalWrite(pinServo,HIGH);// remets les roues droites
          setAngle(90);
          delay(1000);
          digitalWrite(pinServo,LOW);
        do{
          delay(500);
        }while(distance3<20);
        digitalWrite(pinServo,HIGH);// tourne a gauche
         setAngle(0);
         delay(1500);
         digitalWrite(pinServo,LOW);
         digitalWrite(pinServo,HIGH);
          setAngle(90); // remets les roues droites 
          delay(1000);
          digitalWrite(pinServo,LOW);
    }
    else if (distance2>10,distance3>20){ //obstacle ni a gauche ni a droite mais devant
       digitalWrite(pinServo,HIGH);// tourne a droite
         setAngle(179);
         delay(1500);
         digitalWrite(pinServo,LOW);
         digitalWrite(pinServo,HIGH);// remets les roues droites
          setAngle(90);
          delay(1500);
          digitalWrite(pinServo,LOW);
        do{
          delay(500);
        }while(distance3<20);
        digitalWrite(pinServo,HIGH);// tourne a gauche
         setAngle(0);
         delay(1500);
         digitalWrite(pinServo,LOW);
         digitalWrite(pinServo,HIGH);
          setAngle(90); // remets les roues droites 
          delay(1500);
          digitalWrite(pinServo,LOW);
    }
    }
    
    if(distance2<10){ //obstacle a droite
      if(distance3<20){ //obstacle a gauche
        delay(1500); //continue tout droit
      }
      else if(distance3>20){ // pas d obstacle a gauche
        digitalWrite(pinServo,HIGH);
        setAngle(45); //decale a gauche
        digitalWrite(pinServo,LOW);
        delay(1500);
        digitalWrite(pinServo,HIGH);
        setAngle(90); // remettre les roues droite pour continuer la trajectoire
        digitalWrite(pinServo,LOW);
      }
    }
    if(distance3<20&&distance2>20){
       digitalWrite(pinServo,HIGH);// decaler a droite
        setAngle(135);
        digitalWrite(pinServo,LOW);
        delay(1500);
        digitalWrite(pinServo,HIGH);
        setAngle(90); //continue sa trajectoire 
        digitalWrite(pinServo,LOW);
    }
    
    
      if (distance4 < 15) {  // This is where the LED On/Off happens
        digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off
      digitalWrite(led2,LOW);
    }
      else {
        digitalWrite(led,LOW);
        digitalWrite(led2,HIGH);
      }
      if (distance4 >= 200 || distance <= 0){
        Serial.println("Out of range");
      }
      else {
        Serial.print(distance);
        Serial.println(" cm");
      }
      delay(500);
    }
    void setAngle(int a){
    int duree=map(a,0,179,1000,2000);// on transforme l angle en microsecondes et on stocke dans la variable duree
    digitalWrite(pinServo,LOW);//on met le pin a l etat bas
       for(int t=0;t<300;t++){*
       digitalWrite(pinServo,HIGH);// on envoie l impulsion
       delayMicroseconds(duree); // pendant la bonne duree
       digitalWrite(pinServo,LOW); // on stoppe l impulsion
       delayMicroseconds(duree); // on attend le temps restant pour atteindre la periode
    }
    }
    Merci d'avance

Discussions similaires

  1. Voiture + solaire + éolienne = voiture autonome
    Par invite6784ac07 dans le forum Environnement, développement durable et écologie
    Réponses: 228
    Dernier message: 07/10/2018, 10h08
  2. Voiture autonome
    Par invitef72adfee dans le forum Électronique
    Réponses: 23
    Dernier message: 24/09/2015, 16h46
  3. capteurs automobiles pour voiture autonome.
    Par invited1690b3d dans le forum Électronique
    Réponses: 7
    Dernier message: 20/11/2014, 19h11
  4. Transformer un servo-moteur en moteur à courant continu
    Par invite13ed46c1 dans le forum Électronique
    Réponses: 14
    Dernier message: 15/05/2011, 17h59
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...