IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Utiliser un PID pour améliorer la stabilisation d'une plateforme MPU6050


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 20
    Par défaut Utiliser un PID pour améliorer la stabilisation d'une plateforme MPU6050
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #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);
     
    }

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    setpoint, c'est la consigne en entrée. Mais pour t'aider davantage, il faudrait nous détailler un peu la structure de ton système et son asservissement.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 20
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Bonjour,

    setpoint, c'est la consigne en entrée. Mais pour t'aider davantage, il faudrait nous détailler un peu la structure de ton système et son asservissement.
    J'essaye en quelque sorte de reproduire un stabilisateur de caméra comme sur ce site : https://www.instructables.com/id/Gyr...ino-and-Servo/
    Et le problème est que même en lisant plusieurs articles, codes, sur le PID je n'arrive toujours pas à comprendre comment l'appliquer à mon problème

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Pour moi, c'est un système en boucle ouverte. Tu pilotes le servo en fonction de l'inclinaison du support mais tu n'as aucun retour sur l'angle pris réellement en sortie du servo.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 20
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Pour moi, c'est un système en boucle ouverte. Tu pilotes le servo en fonction de l'inclinaison du support mais tu n'as aucun retour sur l'angle pris réellement en sortie du servo.
    D'accord mais je n'arrive pas trop à faire le lien avec mon problème

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour

    Un régulateur PID, va prendre une valeur de consigne (l’assiette de la caméra doit être à 0°) c'est le setpoint et une valeur mesurée (un capteur sur la caméra qui va donner la mesure de l’assiette, c'est loin d'être évident ici), il en fait la différence (c'est l'erreur du système) puis va passer cela dans un calcul (le PID) pour en sortir la valeur qui est appliquée à l'entrainement.

    De base une régulation PI ou PID c'est pour un système intégrateur. Sauf que un servomoteur n'est pas un système intégrateur. On lui donne une consigne et il y a va. Pour le faire, à l'intérieur il y a déjà un régulateur PI ou PID.

    Ce que F-Leb t'explique c'est que dans ce cas on ne fait pas de régulation. On mesure l'assiette de la breadboard (il y a tant d’inclinaison latérale et avant/arrière) et on donne la commande aux servos d'être à l'opposé (pour que la somme soit nulle et la caméra à l’horizontale). Mais ce n'est en aucun cas l'application normale d'un PID (qui devrait avoir le capteur d'angle sur la partie destinée à la caméra) et qui devrait utiliser des moteurs et non des servomoteurs.

    Au passage Kp = 0 donnera un système instable (Ki <> 0) ou qui ne reste pas en place (Ki = 0 et Kd <> 0) ...

    Delias

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/03/2009, 11h30
  2. Réponses: 1
    Dernier message: 27/11/2008, 10h55
  3. cherche aide pour améliorer le traitement d'une requête
    Par nomade333 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/04/2008, 14h15
  4. Utiliser un userform pour lire et écrire dans une feuille de calculs
    Par sebi78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/04/2007, 19h51
  5. Réponses: 10
    Dernier message: 10/11/2005, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo