Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire varier la vitesse d'un moteur CC

    8 décembre 2019 à 19:51:36

    Bonjour à tous,

    Dans le cadre de mes études je dois faire une plateforme motorisée capable de détecter des obstacles et les éviter (capteur à ultrasons qui détecte les obstacles à une certaine distance). Ainsi lorsque qu'elle rencontre un obstacle à 10 cm, le moteur (qui tourne à 100 rpm) est censé s'arrêter jusqu'à 5 cm de l'obstacle.
    J'ai pu réussir à coder le principal mais je n'arrive pas à écrire le fait que la vitesse du moteur diminue linéairement jusqu'à 5 cm de l'obstacle.
    Est ce que vous pourriez me guider et m'aider s'il vous plait ?montage de mon projet
    const int motor_enablePin = 11; // pont en H
    const int motor_in1 = 13; // avance
    const int motor_in2 = 12; // recule
    const int speed = 255; // vitesse du moteur
    
    const byte triggerPin = 4;
    const byte echoPin = 5;
    
    const unsigned long measure_timeout = 25000UL; // temps nécessaire avant de considérer qu'il n'y a pas d'obstacle
    
    const float sound_speed = 340.0 / 1000; // vitesse du son dans l'air
    
    void setup()
    {
      pinMode(motor_enablePin, OUTPUT); // initialisation du moteur
      pinMode(motor_in1, OUTPUT);
      pinMode(motor_in2, OUTPUT);
    
      pinMode(triggerPin, OUTPUT); // initialisation du capteur
      digitalWrite(triggerPin, LOW);
      pinMode(echoPin, INPUT);
      Serial.begin(115200);
    }
    
    void loop()
    {
      digitalWrite(motor_enablePin, HIGH);
      analogWrite(motor_in1, speed);
      analogWrite(motor_in2, 0);
    
      digitalWrite(triggerPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(triggerPin, LOW);
      long measure = pulseIn(echoPin, HIGH, measure_timeout);
      float distance_mm = measure / 2.0 * sound_speed;
    
      /*
        if(distance_mm <= 1000 && distance_mm > 500)
        {
        for(int slowdown=100; slowdown>=0; slowdown-=25)
        {
          int value = map(slowdown, 100, 0, 255, 0);
          analogWrite(motor_enablePin, value);
          Serial.print(F("Distance: "));
          Serial.print(distance_mm /10.0, 2);
          Serial.print(F(" cm,"));
          Serial.print(" Vitesse: +");
          Serial.print(value);
          Serial.println(" rpm");
        }
        }
      */
    
      /*
        if(distance_mm <= 1000)
        {
        do
        {
          slowdown(100);
          Serial.print(F("Distance: "));
          Serial.print(distance_mm /10.0, 2);
          Serial.print(F(" cm,"));
          Serial.print(" Vitesse: +");
          Serial.print(speed*100/255);
          Serial.println(" rpm");
        }
        while (distance_mm > 500);
        }
      */
    
      Serial.print(F("Distance: "));
      Serial.print(distance_mm / 10.0, 2);
      Serial.print(F(" cm,"));
      if (distance_mm <= 100)
      {
        analogWrite(motor_in1, 0);
        analogWrite(motor_in2, speed);
        Serial.print(" Vitesse: -");
      }
      else
        Serial.print(" Vitesse: +");
      Serial.print(speed * 100 / 255);
      Serial.println(" rpm");
    
      delay(1000);
    }
    
    /*
      void slowdown(int percentage)
      {
      int power = map(percentage, 0, 100, 0, 255);
      analogWrite(motor_enablePin, power);
      }
    */



    Je vous remercie d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      11 décembre 2019 à 21:27:47

      Bonsoir

      les pins 12 et 13 ne sont pas utilisables avec analogwrite avec un Arduino Uno

      https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/

      -
      Edité par clgbzh 11 décembre 2019 à 21:35:00

      • Partager sur Facebook
      • Partager sur Twitter

      Faire varier la vitesse d'un moteur CC

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown