Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino - PID pour stabilisateur de camera

    24 octobre 2019 à 20:23:36

    Bonsoir,
    Je dois faire une sorte de plateforme afin de stabiliser une caméra à l'aide d'une arduino UNO, d'un servo-moteur et d'un MPU6050.
    J'arrive bien à faire en sorte que la "caméra" reste droite mais je dois l'améliorer grâce à l'utilisation d'un PID.
    J'ai fais quelque recherches sur internet pour en arriver à ce code, mais je ne pense vraiment pas qu'il soit correct. Je dois tester la stabilisation pour Ki=Kd=0, puis Kp=Kd=0 puis enfin Kp=Ki=0.
    Je ne comprend cependant pas quoi mettre comme valeur dans "setpoint"
    Pourriez-vous m'éclaircir ?
    Merci d'avance

    #include <Wire.h>
    #include <MPU6050.h>
    #include <Servo.h>
    #include <PID_v1.h>
     
    #define _DEBUG false 
    //-------------Declarations capteur et servo----------------
    Servo servo1, servo2;         
    int servo1_pin = 11;
    int servo2_pin = 10;
    MPU6050 sensor ;
    int16_t ax, ay, az ;
    int16_t gx, gy, gz ;
    //---------PID--------------
    double input;
    double output;
    double setpoint;
    double Kp=0, Ki=10, Kd=0;
     
    PID myPID(&input, &output, &setpoint, Kp, Ki, Kd, REVERSE);
     
     
     
    void setup ( )
    {
    servo1.attach ( servo1_pin );
    servo2.attach ( servo2_pin );
    Wire.begin ( );
    Serial.begin  (9600);
    Serial.println  ( "Initializing the sensor" );
    sensor.initialize ( );
    Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed");
    delay (1000);
    Serial.println ( "Taking Values from the sensor" );
    setpoint=90;
    myPID.SetMode(AUTOMATIC);
    myPID.SetTunings(Kp,Ki,Kd);
    myPID.SetOutputLimits(0, 180);
     
    delay (1000);
    }
     
     
     
     
    void loop ( )
    {
    sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);
    input=map (ay, 17000, -17000, 0, 180) ;
    myPID.Compute();
    servo1.write(output);
    Serial.println(output);
     
    //delay(200);
     
    }



    • Partager sur Facebook
    • Partager sur Twitter
      30 octobre 2019 à 10:50:15

      Salut,

      Setpoint c'est ta cible. L'objectif d'un régulateur PID est de définir une commande dans le but d'obtenir une mesure égale à la consigne, ici  : input = setpoint."

      En gros si 0 correspond à ta position horizontale, ce sera ta consigne, le PID devra faire en sorte que la valeur mesurée soit effectivement de 0.

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

      Arduino - PID pour stabilisateur de camera

      × 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