horizon artificiel avec le MPU6050
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

horizon artificiel avec le MPU6050



  1. #1
    phil9393

    horizon artificiel avec le MPU6050


    ------

    Bonjour à tous, je suis débutant en code source et je monte un projet sur une carte Arduino Uno avec un MPU6050, le but étant d'animer via un servo moteur de type 9G un mobile représentant un avion, j'ai copié un code sur le net car je suis incapable pour le moment d'en élaborer un et ça fonctionne, mais je souhaiterai à la mise sous tension que le servo moteur évolue de 60° sur la gauche ensuite de revenir sur la droite à son point initial (donc -60° ) et de repartir ensuite sur la droite de la même valeur pour ensuite se repositionner sur sa position d'origine donc le point central si je puis m'exprimer ainsi de façon à prouver mécaniquement que le mobile accouplé au servo n'a pas subi de dommage et donc me confirmer qu'il est opérationnel ce qui implique d'insérer des lignes de code supplémentaire et là j’avoue qu'après pas mal de tentatives je n'arrive pas à compiler .., voici le code employé

    Code:
    /*MPU6050 sensor with servo control.
       https://srituhobby.com
    */
    
    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    #include <Servo.h>
    
    Servo servo;
    Adafruit_MPU6050 srituhobby;
    
    void setup(void) {
      Serial.begin(115200);
      servo.attach(3);
      Wire.begin();
      srituhobby.begin();
      servo.write(0);
    
      srituhobby.setAccelerometerRange(MPU6050_RANGE_8_G);//2_G,4_G,8_G,16_G
      srituhobby.setGyroRange(MPU6050_RANGE_500_DEG);//250,500,1000,2000
      srituhobby.setFilterBandwidth(MPU6050_BAND_21_HZ);
    
      delay(100);
    }
    
    void loop() {
    
      /* Get new sensor events with the readings */
      sensors_event_t a, g, temp;
      srituhobby.getEvent(&a, &g, &temp);
    
      int value = a.acceleration.y;
    
      value = map(value,  -10, 10, 180, 0);
      servo.write(value);  
      Serial.println(value);
      //delay(10);
    
    }
    Merci pour vos retours et conseils

    -----
    Dernière modification par JPL ; 04/01/2024 à 22h49. Motif: ajout de la balise Code pour garder l’indentation

  2. #2
    polo974

    Re : horizon artificiel avec le MPU6050

    dans la fonction setup(void) remplacer la ligne
    servo.write(0);

    (qui envoie le servo dans un coin)
    par un truc du genre:

    #define CENTRE 90 // position centrale
    #define COTE 60 // angle choisi
    #define TEMPO 500 // a ajuster

    servo.write(CENTRE); // position centrale
    delay(TEMPO);
    servo.write(CENTRE +COTE); // position d'un coté
    delay(TEMPO);
    servo.write(CENTRE); // position centrale
    delay(TEMPO);
    servo.write(CENTRE + COTE); // position de l'autre coté
    delay(TEMPO);
    servo.write(CENTRE); // retour position centrale
    delay(TEMPO);
    Jusqu'ici tout va bien...

  3. #3
    paprika48

    Re : horizon artificiel avec le MPU6050

    Bonjour,
    n'ya t il pas une erreur de programmation dans cette portion de code :

    servo.write(CENTRE + COTE); // position de l'autre coté
    delay(TEMPO);
    servo.write(CENTRE); // retour position centrale
    delay(TEMPO);

    ne faudrait-il pas mettre un - à la place du plus pour avoir un angle négatif par rapport au centre :
    servo.write(CENTRE - COTE); // position de l'autre coté
    cordialement

  4. #4
    phil9393

    Re : horizon artificiel avec le MPU6050

    merci de vos retour à tout les deux ça me donne matière à réflexion pour faire avancer le process, je vais essayer ces différentes variantes et ne manquerai pas de vous en faire le juste retour

  5. A voir en vidéo sur Futura
  6. #5
    polo974

    Re : horizon artificiel avec le MPU6050

    Ah, ben oui, c'est la malédiction du copier/coller...

    D'un autre côté, j'ai bien mis "un truc du genre"...

    Allez, on va sortir le fameux "c'était pour voir si vous suiviez".
    Jusqu'ici tout va bien...

  7. #6
    phil9393

    Re : horizon artificiel avec le MPU6050

    ..Une douzaine d'heures plus tard et quelques antalgiques..

    Il y a encore du labeur mais ça avance, donc introduction d'une ligne tout d'abord au démarrage pour obtenir un niveau H en pin°13 afin d'initier les 7 leds de mon vumètre que pilote le lm3914 en parallèle du mobile.
    Ensuite part la révolution du servo "pas à pas" pour une translation de 140° au total soit 70° sur la gauche et idem pour la droite.

    Pour le pas à pas j'ai préféré cumuler de la ligne 28 à 79 des pas de 5°
    La ligne 80 induit un retard d'une seconde et le MPU est ok pour me donner l'info du roulis.

    ci-dessous la version via le simulateur: Horizon artificiel avec_MPU6050 V2.0 - Wokwi ESP32, STM32, Arduino Simulator
    https://wokwi.com/projects/386303039053449217


    Et pour finir voici le script actuel : ...sous réserve d'amélioration.. il ya une rafale de "servo.write" mais j'ai des soucis pour la boucle "for"..

    Code:
    /*MPU6050 sensor with servo control.
    https://srituhobby.com
    */
    
    #include <Adafruit_MPU6050.h>
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    #include <Servo.h>
    int ledPin = 13; // Définir le numéro de broche de la LED
    Servo servo;
    Adafruit_MPU6050 srituhobby;
    
    void setup(void) {
    Serial.begin(115200);
    servo.attach(3);
    Wire.begin();
    srituhobby.begin();
    servo.write(90);
    pinMode(ledPin, OUTPUT); // Définir la broche de la LED en sortie
    digitalWrite(ledPin, HIGH); // Allumer la LED
    delay(4000); // Attendre quatre secondes (phase d'initialisation du vumètre)
    digitalWrite(ledPin, LOW); // Éteindre la LED
    srituhobby.setAccelerometerRange(MPU6050_RANGE_8_G); //2_G,4_G,8_G,16_G
    srituhobby.setGyroRange(MPU6050_RANGE_500_DEG); //250,500,1000,2000
    srituhobby.setFilterBandwidth(MPU6050_BAND_21_HZ);
    
    delay(1000); // retard de 1s avant check servo +70°/-70°
    servo.write(90 + 10);
    delay(200);
    servo.write(90 + 15);
    delay(200);
    servo.write(90 + 20);
    delay(200);
    servo.write(90 + 25);
    delay(200);
    servo.write(90 + 30);
    delay(200);
    servo.write(90 + 35);
    delay(200);
    servo.write(90 + 40);
    delay(200);
    servo.write(90 + 45);
    delay(200);
    servo.write(90 + 50);
    delay(200);
    servo.write(90 + 55);
    delay(200);
    servo.write(90 + 60);
    delay(200);
    servo.write(90 + 65);
    delay(200);
    servo.write(90 + 70);
    servo.write(90); // retour au point neutre
    delay(1000);
    servo.write(90 - 10);
    delay(200);
    servo.write(90 - 15);
    delay(200);
    servo.write(90 - 20);
    delay(200);
    servo.write(90 - 25);
    delay(200);
    servo.write(90 - 30);
    delay(200);
    servo.write(90 - 35);
    delay(200);
    servo.write(90 - 40);
    delay(200);
    servo.write(90 - 45);
    delay(200);
    servo.write(90 - 50);
    delay(200);
    servo.write(90 - 55);
    delay(200);
    servo.write(90 - 60);
    delay(200);
    servo.write(90 - 65);
    delay(200);
    servo.write(90 - 70);
    delay(1000);
    // test terminé, l'inclinomètre est pret
    }
    
    void loop() {
    
    /* Get new sensor events with the readings */
    sensors_event_t a, g, temp;
    srituhobby.getEvent(&a, &g, &temp);
    
    int value = a.acceleration.y;
    
    value = map(value, -10, 10, 180, 0);
    servo.write(value);
    Serial.flush(); // Attend que le buffer de sortie série soit vide avant de poursuivre
    Serial.println(value);
    //delay(10);
    }
    Dernière modification par phil9393 ; 08/01/2024 à 11h03.

Discussions similaires

  1. horizon artificiel ( instrument gyroscopique )
    Par wallweed dans le forum Physique
    Réponses: 7
    Dernier message: 13/06/2012, 14h08
  2. Erecteur et horizon artificiel
    Par calculair dans le forum Physique
    Réponses: 10
    Dernier message: 03/06/2012, 11h46
  3. Projet horizon artificiel
    Par invite229c1790 dans le forum Électronique
    Réponses: 18
    Dernier message: 22/06/2010, 20h08
  4. alimentation pour un horizon artificiel
    Par colin.didier dans le forum Électronique
    Réponses: 27
    Dernier message: 05/01/2010, 11h52
  5. Horizon artificiel aviation
    Par colin.didier dans le forum Électronique
    Réponses: 2
    Dernier message: 07/07/2009, 13h39