Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino]{Résolue] controler hacheur

    23 mars 2015 à 8:22:41

    bonjours je suis en STI2D SIN nous avons un projet à réaliser en fin de terminal.

    Mon projet est une voiture télécommandé par un téléphone portable. Je doit réaliser la parti Arduino et si j'ai réussit a contrôler la direction de la voiture grasse à un servomoteur je n'arrive pas à contrôler la vitesse du moteur grasse au hacheur. Mon prof m'a dit qu'on contrôler un hacheur comme un servomoteur.

    voici mon code (pour l'instant j'ai créé une manette avec des potentiomètre) :

    #include <Servo.h>
    
    Servo Servodir;
    Servo Hacheur;
    int interupteur = 2;
    int potarvit = A0;
    int potardir = A3;
    int anglevit = 0;
    int angledir= 0;
    int valvit=0;
    int valdir=0;
    int bp = 0;
    
    void setup()
    {
      Servodir.attach(8);
      Hacheur.attach(4);
      Serial.begin(9600);
      //on met le bouton en entrée
      pinMode(interupteur, INPUT);
      //on active la résistance de pull-up en mettant la broche à l'état haut (mais cela reste toujours une entrée)
      digitalWrite(interupteur, HIGH);
    }
    void loop()
    {
    
    
      // si l'interupteur est fermé la voitur recule
      while(digitalRead (interupteur)== 1){
        valvit = analogRead(potarvit);
        valdir = analogRead(potardir);
        //mise à l'échelle de la valeur lue vers la plage [0;-180]   
        anglevit = map(valvit, 0, 1023, 0, -180);
        angledir = map(valdir, 0, 1023, 90, -90);
        //on met à jour l'angle sur le servo   
        Servodir.write(anglevit);
        Hacheur.write(angledir);
        Serial.print("anglevit");
        Serial.println(anglevit);
        Serial.print("angledir");
        Serial.println(angledir);
        Serial.print("BP");
        Serial.println(digitalRead (interupteur));
        delay(100);
      }
      // si l'interupteur est ouvet la voitur avance
      while(digitalRead (interupteur) != 1){
        valvit = analogRead(potarvit);
        valdir = analogRead(potardir);
        //mise à l'échelle de la valeur lue vers la plage [0;180]   
        anglevit = map(valvit, 0, 1023, 0, 180);
        angledir = map(valdir, 0, 1023, 90, -90);
        //on met à jour l'angle sur le servo   
        Servodir.write(anglevit);
        Hacheur.write(angledir);
        Serial.print("anglevit");
        Serial.println(anglevit);
        Serial.print("anglediri");
        Serial.println(angledir);
        Serial.print("BP");
        Serial.println(digitalRead (interupteur));
        delay(100);
      }
    
    
    }



    mon problème est le suivent :

    le moteur tourne mais il s’arrête au bout de 10-20 sec.

    -
    Edité par MechouieTeck 23 mars 2015 à 10:47:28

    • Partager sur Facebook
    • Partager sur Twitter
      23 mars 2015 à 8:31:04

      Bonjour Nicolas,

      Afin de répondre à ton sujet de façon optimale, il faudrait que tu apportes quelques modification à ton post :

      - utiliser les balises codes (car sans elle, c'est tout simplement illisible)

      - préciser la référence (ou le nom) de ton hacheur ou une photo afin que l'on sache un peu à quel type de hacheur on à a faire

      -
      Edité par lorrio 23 mars 2015 à 8:31:26

      • Partager sur Facebook
      • Partager sur Twitter
        23 mars 2015 à 8:39:22

        Pour le hacheur le problème c'est que j'utilise une voiture que le lycée à acheter il y a longtemps et ils ont plus la référence.

        je peux juste vous dire que c'est un LRP runner plus revers digital.

        • Partager sur Facebook
        • Partager sur Twitter
          23 mars 2015 à 8:45:22

          et il y a pas de balise code arduino si ? :/
          • Partager sur Facebook
          • Partager sur Twitter
            23 mars 2015 à 9:42:08

            C'est suffisant comme référence ;)

            Vu qu'il s'agit d'un variateur pour voiture avec marche arrière, je dirais qu'il se commande de la façon suivante :

            - angle de 90° => moteur à l'arrêt

            - angle de 0° => moteur à fond dans un sens (probablement la marche arrière mais je ne suis pas certain)

            - angle de 180° => moteur à fond dans l'autre sens (probablement la marche avant mais je ne suis pas certain)

            Quand au servo de direction, ce n'est pas sur [-90:90] que tu dois faire le mapping mais sur [0:180] ;) (la position centrale étant à 90°)

            Je te conseille donc de modifier très légèrement ton code :

            void loop()
            {
            
                valvit = analogRead(potarvit);
                valdir = analogRead(potardir);
            	
            	angledir = map(valdir, 0, 1023, 0, 180);
            	
            	// Si l’interrupteur est fermé, la voiture devrait reculer
            	if ( digitalRead(interupteur) == 1 ) {
            		// Donc on map l'angle du potar sur [0:90] pour la marche arrière
            		anglevit = map(valvit, 0, 1023, 0, 90);
            	// Si l'interrupteur est ouvert, la voiture devrait avancer
            	} else {
            		// Donc on map l'angle du potar sur [90:180] pour la marche avant
            		anglevit = map(valvit, 0, 1023, 90, 180);
            	}
            	
                Servodir.write(anglevit);
                Hacheur.write(angledir);
            	
                Serial.print("anglevit");
                Serial.println(anglevit);
                Serial.print("angledir");
                Serial.println(angledir);
            	
                Serial.print("BP");
                Serial.println(digitalRead(interupteur));
            	
                delay(100);
            	
            }



            -
            Edité par lorrio 23 mars 2015 à 9:45:58

            • Partager sur Facebook
            • Partager sur Twitter
              23 mars 2015 à 10:46:47

              Merci beaucoup ça fonctionne :)
              • Partager sur Facebook
              • Partager sur Twitter

              [Arduino]{Résolue] controler hacheur

              × 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