Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème projet arduino

    20 mars 2017 à 19:26:13

    Bonjour,
    J'ai pour projet de reproduire le robot Scott de la machinerie. La différence est qu'il y a un capteur ultrason intégré et j'aimerai par le Bluetooth le faire passer en ultrason. Mais cela ne fonctionne pas une fois l'ultrason lancé cela fonctionne mais qu'une fois et ensuite va tout droit et se prends les murs. Il faudrait qu'une fois que je le lance qu'il fonctionne tout seul.
    Merci de votre aide.

    /* voici un programme permettant de contrôler un petit robot autonome du nom de Scott, inventé par la Machinerie, le Fablab d'Amiens. Les détails sur leur wiki : http://wiki.lamachinerie.org/projects/scott-le-mini-robot
     *  
     *  Ce robot autonome créé à partir d'un Mini Driver Dagu RS027, de 2 moteurs motoréducteurs GM9, d'un coupleur de piles x4, et d'un capteur ultrason HC-SR04.
     */
    
    //----------------------------------------------------------
    
    /* pour brancher la Dagu à L'IDE Arduino (le programme Arduino), ne pas oublier :
     *  
     *  - télécharger le driver sur le site de Silabs : http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx#windows
     *  
     *  - dans l'IDE Arduino choisir dans outils, type de carte "Arduino NG ou older"
     *  
     *  - toujours dans outils, sélectionner dans la catégorie processeur : ATmega8
     */
    
    //----------------------------------------------------------
    // Définir les constantes et variables pour le bluetooth
    //----------------------------------------------------------
     
    byte serialA; // variable de reception de donnée via RX
    
    
    //----------------------------------------------------------
    // Définir les constantes et variables pour les moteurs
    //----------------------------------------------------------
     
    const int Direction_Moteur_Gauche = 7; // indique que Direction_Moteur_Gauche est sur la broche : PIN 7
    const int Vitesse_Moteur_Gauche = 9; // indique que Vitesse_Moteur_Gauche est sur la broche : PIN 9
    const int Direction_Moteur_Droit = 8; // indique que Direction_Moteur_Droit est sur la broche : PIN 8
    const int Vitesse_Moteur_Droit = 10; // indique que Vitesse_Moteur_Droit est sur la broche : PIN 10
    
    // Direction_Moteur indique le sens de rotation du moteur pour faire aller le robot vers l'avant.
    // Vitesse_Moteur sert à la fois à gérer la vitesse du Robot avec la fonction analogWrite, mais elle sert aussi à faire tourner le moteur dans l'autre sens avec la fonction digitalWrite
    
    //----------------------------------------------------------
    // Définir les constantes et variables pour le capteur HC-SR04
    //----------------------------------------------------------
    //ARDUINO IDE code for Obstacle detecting Robot
    const int trig = 4;
    const int echo = 5;
    long duration, inches, cm;
    
    //----------------------------------------------------------
    // Void setup (exécuté 1 fois)
    //----------------------------------------------------------
    
    void setup() {
      
        // définir les PIN des moteurs pour savoir si c'est des entrées ou des sorties
        pinMode( Direction_Moteur_Gauche, OUTPUT ); // indique que Direction_Moteur_Gauche est une sortie
        pinMode( Vitesse_Moteur_Gauche, OUTPUT ); // indique que Vitessee_Moteur_Gauche est une sortie
        pinMode( Direction_Moteur_Droit, OUTPUT ); // indique que Direction_Moteur_Droit est une sortie
        pinMode( Vitesse_Moteur_Droit, OUTPUT ); // indique que Vitesse_Moteur_Droit est une sortie
        Serial.begin(9600);
        pinMode(trig,OUTPUT);
        pinMode(echo,INPUT);
    }
    
    //----------------------------------------------------------
    void marche_Avant(  )
    {
        // Avancer tout droit à une vitesse de 255 sur 255
        digitalWrite( Direction_Moteur_Gauche, HIGH ); // met en marche le moteur gauche
        digitalWrite( Direction_Moteur_Droit, HIGH ); // met en marche le moteur droit
        analogWrite( Vitesse_Moteur_Gauche, 200 ); // règle la vitesse du moteur Gauche à 200 (allant de 1 à 255)
        analogWrite( Vitesse_Moteur_Droit, 200 ); // règle la vitesse du moteur Droit à 200 (allant de 1 à 255)
    }
    
    //----------------------------------------------------------
    void marche_Arriere (  )
    {
        // Reculer tout droit à une vitesse de 255 sur 255
        digitalWrite( Vitesse_Moteur_Gauche, HIGH ); // pour faire reculer on utilise "Vitesse_Moteur_Gauche
        digitalWrite( Vitesse_Moteur_Droit, HIGH ); //
        analogWrite( Vitesse_Moteur_Gauche, 220 ); // règle la vitesse du moteur Gauche à 200 (allant de 1 à 255)
        analogWrite( Vitesse_Moteur_Droit, 220 ); // règle la vitesse du moteur Droit à 200 (allant de 1 à 255)
    }
    
    //----------------------------------------------------------
    void tourner_Droite (  )
    {
        digitalWrite( Direction_Moteur_Gauche, HIGH ); // met en marche le moteur gauche
        digitalWrite( Vitesse_Moteur_Droit, HIGH ); // met en marche le moteur droit mais en sens inverse
        analogWrite( Vitesse_Moteur_Gauche, 200 ); // règle la vitesse du moteur Gauche à 100 (allant de 1 à 255)
        analogWrite( Vitesse_Moteur_Droit, 100 ); // règle la vitesse du moteur Droit à 50 (allant de 1 à 255)
    }
    
    //----------------------------------------------------------
    void tourner_Gauche (  )
    {
        digitalWrite( Vitesse_Moteur_Gauche, HIGH ); // met en marche le moteur gauche
        digitalWrite( Direction_Moteur_Droit, HIGH ); // met en marche le moteur droit mais en sens inverse
        analogWrite( Vitesse_Moteur_Gauche, 100 ); // règle la vitesse du moteur Gauche à 50 (allant de 1 à 255)
        analogWrite( Vitesse_Moteur_Droit, 200 ); // règle la vitesse du moteur Droit à 100 (allant de 1 à 255)
    }
    
    //----------------------------------------------------------
    void arreter ( )
    {
        digitalWrite( Direction_Moteur_Gauche, LOW ); // met en marche le moteur gauche
        digitalWrite( Direction_Moteur_Droit, LOW ); // met en marche le moteur droit
        analogWrite( Vitesse_Moteur_Gauche, 0 ); // règle la vitesse du moteur Gauche à 0 (allant de 1 à 255)
        analogWrite( Vitesse_Moteur_Droit, 0 ); // règle la vitesse du moteur Droit à 0 (allant de 1 à 255)
    }
    //----------------------------------------------------------
    void marche_Avant_Rapide( )
    {
        // Avancer tout droit à une vitesse de 255 sur 255
        digitalWrite( Direction_Moteur_Gauche, HIGH ); // met en marche le moteur gauche
        digitalWrite( Direction_Moteur_Droit, HIGH ); // met en marche le moteur droit
        analogWrite( Vitesse_Moteur_Gauche, 250 ); // règle la vitesse du moteur Gauche à 200 (allant de 1 à 255)
        analogWrite( Vitesse_Moteur_Droit, 250 ); // règle la vitesse du moteur Droit à 200 (allant de 1 à 255)
    }
    
    //----------------------------------------------------------
    
    void ultrason( ) {
    digitalWrite(trig, LOW);
    delayMicroseconds(2);
    digitalWrite(trig, HIGH);
    delayMicroseconds(5);
    digitalWrite(trig, LOW);
    duration = pulseIn(echo, HIGH);
    //this returns the time duration taken
    //for the ultrasonics to hit an obstacle and return
    inches = duration / 74 / 2;//converts the time duration into inches
    cm = duration / 29 / 2;//converts the time duration to cm
      if(cm>15){//checks for the distance is greater than 15cm
      //the bot forward if the condition is true
        marche_Avant(  );
        Serial.print("No obstacle detected");
        delay(100);
      }
          else {
        //the robot turns right when an obstacle is detected
      Serial.print("Obstacle detected");
    delay(100);//this delays the process by 100millisec
    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
              marche_Arriere ( );
              delay (1000);
              tourner_Droite ( );
              delay (1000);
              marche_Avant( );
              delay(50);
    delay(100);//this delays the code by 0.1 second and repeats the loop again
          }
         }
    
         
    void loop(){
       {  while (Serial.available() == 0); // wait for character to arrive
       char c = Serial.read();
    
       
         if(c =='4') {
        marche_Avant(  );
        }
         
         if(c == '1'){
        arreter ( );
        }
         
         if(c == '2'){
        tourner_Droite (  );
        }
         
         if(c == '3'){ 
        tourner_Gauche (  );
        }
         
         if(c == '0'){
        marche_Arriere (   );
        } 
         
         if(c == '5') {
          ultrason( );
         }
    
         if(c == '6') {
        marche_Avant_Rapide ( );
        }
      }
    }
    • Partager sur Facebook
    • Partager sur Twitter

    Problème projet arduino

    × 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