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 :

Programme servo 360° et capteur MPU 6050


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut Programme servo 360° et capteur MPU 6050
    bonjour, je n'arrive pas a coder un programme permettant de contrôler un servo moteur 360 en continue avec un capteur MPU 6050 et un Arduino nano every. je souhaite que lorsque le capteur bouge de X degrés alors le servo moteur bouge aussi de X degrés puis s'arrête. Malgré les nombreuses video sur internet, je ne trouve aucun code qui fonctionne puisque que j'ai un Arduino nano every et un servo de 360 degrés. Merci beaucoup de votre aides.

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Salut,

    Citation Envoyé par iliessou Voir le message
    Malgré les nombreuses video sur internet, je ne trouve aucun code qui fonctionne puisque que j'ai un Arduino nano every et un servo de 360 degrés. Merci beaucoup de votre aides.
    Rah punaise, tu étais où ces deux derniers mois?
    ChatGPT ça te dit quelque chose?

    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
    #include <Servo.h>
     
    Servo servoMotor;  // Créer un objet Servo pour contrôler le servo moteur
     
    void setup() {
      servoMotor.attach(9);  // Attacher le servo moteur au pin 9 de l'Arduino
    }
     
    void loop() {
      // Fait tourner le servo moteur de 0 à 360 degrés en augmentant de 1 degré à chaque itération
      for (int i = 0; i <= 360; i++) {
        servoMotor.write(i);  // Envoyer l'angle de rotation au servo moteur
        delay(10);  // Attendre un court instant pour que le servo moteur ait le temps d'atteindre la position demandée
      }
     
      // Fait tourner le servo moteur de 360 à 0 degrés en diminuant de 1 degré à chaque itération
      for (int i = 360; i >= 0; i--) {
        servoMotor.write(i);  // Envoyer l'angle de rotation au servo moteur
        delay(10);  // Attendre un court instant pour que le servo moteur ait le temps d'atteindre la position demandée
      }
    }
    Et en rajoutant le contrôle par MPU 6050:

    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
    #include <Wire.h>
    #include <Servo.h>
    #include <MPU6050_tockn.h>
     
    MPU6050 mpu6050(Wire);
    Servo servoMotor;
     
    const int MPU = 0x68;  // Adresse I2C du MPU6050
    int16_t ax, ay, az, gx, gy, gz;
    float angle;
     
    void setup() {
      Wire.begin();
      mpu6050.begin();
      mpu6050.calcGyroOffsets(true);
      servoMotor.attach(9);  // Attacher le servo moteur au pin 9 de l'Arduino
    }
     
    void loop() {
      mpu6050.update();
      gx = mpu6050.getGyroX();
      angle += gx * 0.0000611;  // Calculer l'angle en fonction de la vitesse angulaire
     
      // Limiter l'angle à une plage de 0 à 360 degrés
      if (angle < 0) {
        angle = 360 + angle;
      }
      if (angle > 360) {
        angle = angle - 360;
      }
     
      servoMotor.write(angle);  // Envoyer l'angle de rotation au servo moteur
      delay(10);  // Attendre un court instant pour que le servo moteur ait le temps d'atteindre la position demandée
    }
    Bon, franchement, je n'ai pas vérifié le code (juste lu rapidement et il y a des choses étranges...), mais ça te donnera une base. Et si ça ne fonctionne pas, ça ne m'étonnerait qu'à moitié... c'est juste pour illustrer que chercher une vidéo qui donne le code qui fait pilou-pilou ce que tu veux, déjà ce n'est pas ce qu'on appelle coder, et c'est aussi un peu trop... précis...

    Précise-nous plus précisément où tu coinces... sépare déjà ta problématique en deux: savoir récupérer les infos du MPU, et savoir contrôler le servo. Quand tu sauras faire les deux, il ne te restera plus qu'à faire la passerelle entre les deux.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut oui mais...
    Déjà, merci de ta réponse si rapide. j'ai déjà essayer avec chatGPT j'ai au moins une trentaine de discussion avec lui concernant ce sujet. Sauf qu'a chaque fois ici par exemple avec ton script le servo moteur tout indéfininiment si le gyro et incliner (ex le gyro est incliner vers la droite alors le servo tourne indéfiniment a droite). Moi je souhaite que lorsque le gyro pivote de 15 degrés par exemple alors le servo tourne de 15degrés. J'ai essayer plusieurs fois avec chatGPT, j'ai pris le script de plusieurs video qui portant eux, le programme fait exactement ce que je souhaite. J'en arrive a me demander si le problème ne vient pas de l'hardware puisque j'ai un Arduino nano every.

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Débranche le servo.
    Fais une sortie console de la valeur de l'angle, pour différentes orientations du MPU.
    On verra déjà ce que ça donne...

    Le nano every se programme et se comporte globalement de manière similaire au nano (pas le même microcontroleur, mais globalement...) ... normalement... tu sélectionnes la carte correctement dans l'IDE arduino? (type et port)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut
    J'ai déjà essayer le MPU a l'air de fonctionner normalement. Mais si un Arduino nano every fonctionne a peut prés comme un Arduino nano pourquoi le code que je copie de certaine video qui eux utilise un Arduino nano ne fonctionne pas avec moi ou pas correctement???

  6. #6
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Citation Envoyé par plegat Voir le message
    tu sélectionnes la carte correctement dans l'IDE arduino? (type et port)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonsoir iliessou

    Avec la plus part des servos dits 360°, tu peux régler la vitesse marche avant ou marche arrière, mais pas la position en fait c'est une rotation continue. Les vrais 360° sont assez rares, je n'en jamais "croisés". Tu peux en trouver qui font 1,5 à 7 tours en cherchant des servo winch.

    Cordialement
    jpbbricole

  8. #8
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut
    Merci beaucoup pour cet information. Cependant pour mon projet il me faut un servo moteur continue. Avez-vous par hasard un modèle qui pourrait subvenir a mon besoin ?

  9. #9
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour iliessou
    Quand tu dis:
    Citation Envoyé par iliessou Voir le message
    pour mon projet il me faut un servo moteur continue.
    Ca va à l'encontre de ce que tu disais au post #3
    Citation Envoyé par iliessou Voir le message
    Moi je souhaite que lorsque le gyro pivote de 15 degrés par exemple alors le servo tourne de 15degrés.
    Quel servo veux-tu, un que tu puisses positionner de 0 à 360° en fonction de la position du gyro ou un servo qui tourne, en continu, mais dont la vitesse et le sens dépendent de la position du gyro?

    Le premier, si ton gyro est à 15°, s'arrêtera à 15°
    Le 2ème tournera en continu à une vitesse proportionnelle à la position du gyro.

    Cordialement
    jpbbricole

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut
    J'ai besoin d'un servo qui puisse se positionner a un angle précis en fonction du gyrocope quand je disait 15° c'etait pour illustrer, si le gyro tourne de X° alors le servo doit tourner lui aussi de X° puis s'arrêter. Cependant pour mon projet, le servo doit pouvoir se positionner n'importe où sur 360°. Je ne sais pas s'il existe des servo sur 360° en continue qui peut tourner d'un angle en ° précis.

  11. #11
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour iliessou
    C'est difficile, dans les spécifications c'est rarement dit si c'et un continu ou un vrai 360°
    Pour toi il ne te faut pas un continu, mais un vrai 360° et je n'ai trouvé, au plus près, qu'un 1,5t (540°), à toi de le limiter à 360° avec une fonction map()

    Cordialement
    jpbbricole

  12. #12
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut
    Bonjour,
    Deja merci pour votre aide ca ma beaucoup aider. J’ai acheté des servo a 180 degrés et ca a fonctionné avec un code que j’ai trouvé cependant, je sollicite à nouveau vôtre aide car pour mon projets j’ai besoin que le servo tourne en fonction de l’axe Z or le script le fait en fonction de l’axe Y. Quelqu’un pourrait-il m’aider merci.

    Le code:

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #include <Wire.h>
    #include <Servo.h>
     
    // Define MPU6050 I2C address
    #define MPU6050_ADDRESS 0x68
     
    // MPU6050 register addresses
    #define MPU6050_REG_ACCEL_XOUT_H 0x3B
    #define MPU6050_REG_PWR_MGMT_1 0x6B
    #define MPU6050_REG_GYRO_CONFIG 0x1B
     
    // Servo motor pin
    #define SERVO_PIN 9
     
    // Variables for gyroscope readings
    int16_t gyroX, gyroY, gyroZ;
    float rollAngle; // roll angle in degrees
     
    // Initialize Servo object
    Servo myservo;
     
    void setup() {
      // Start I2C communication
      Wire.begin();
     
      // Initialize Serial communication
      Serial.begin(9600);
     
      // Wake up MPU6050
      Wire.beginTransmission(MPU6050_ADDRESS);
      Wire.write(MPU6050_REG_PWR_MGMT_1);
      Wire.write(0);
      Wire.endTransmission(true);
     
      // Configure gyroscope range
      Wire.beginTransmission(MPU6050_ADDRESS);
      Wire.write(MPU6050_REG_GYRO_CONFIG);
      Wire.write(0x08); // set gyro range to +/-500 degrees per second
      Wire.endTransmission(true);
     
      // Attach servo motor to SERVO_PIN
      myservo.attach(SERVO_PIN);
    }
     
    void loop() {
      // Read gyroscope data
      Wire.beginTransmission(MPU6050_ADDRESS);
      Wire.write(MPU6050_REG_ACCEL_XOUT_H);
      Wire.endTransmission(false);
      Wire.requestFrom(MPU6050_ADDRESS, 6, true);
      gyroX = Wire.read() << 8 | Wire.read();
      gyroY = Wire.read() << 8 | Wire.read();
      gyroZ = Wire.read() << 8 | Wire.read();
     
      // Calculate roll angle
      rollAngle = atan2(gyroY, sqrt(pow(gyroX, 2) + pow(gyroZ, 2))) * 180 / PI;
     
      // Map roll angle to servo motor position
      int servoPos = map(rollAngle, -90, 90, 0, 180);
     
      // Move servo motor to desired position
      myservo.write(servoPos);
     
      // Print roll angle to Serial monitor
      Serial.print("Roll Angle: ");
      Serial.print(rollAngle);
      Serial.print(" degrees");
     
      // Delay for stability
      delay(100);
    }

  13. #13
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2023
    Messages : 9
    Par défaut AIDER MOI !!!!!!!
    Bonjour a tous j'ai vraiment besoin de votre aide je n'en peu plus. J'ai acheter des servo moteur de 180° pour pouvoir utiliser les degrés. En utilisant un arduino nano every j'ai essayer de contrôler le servo en fonction du capteur MPU6050 j'ai réussi avec le roll et le pitch mais impossible avec le yaw or c'est ce qu'il me faut. j'ai alors trouver une video mais il fallait une architecture AVR et non megaavr comme sur le arduino nano every. j'ai donc acheter un arduino nano qui possède une architecture avr. Mais le programme ne marche pas. Avez-vous un programme qui puisse m'aider a contrôler un servo de 180° en fonction du yaw (mouvement horizontal) du capteur MPU6050. Merci beauuuuuucoup de votre précieuse aide.

Discussions similaires

  1. Sirène avec accéléromètre mpu-6050 et Bluetooth hc05
    Par franck27290 dans le forum Arduino
    Réponses: 22
    Dernier message: 19/10/2022, 10h00
  2. [Uno] MPU 6050 "Erreur compilation"
    Par SM05446S dans le forum Arduino
    Réponses: 12
    Dernier message: 18/08/2021, 09h57
  3. Réponses: 5
    Dernier message: 22/11/2017, 19h31
  4. Détails sur la programmation XBox 360 avec XNA
    Par lagwag dans le forum XNA/Monogame
    Réponses: 13
    Dernier message: 03/10/2012, 21h35
  5. installer capteur programmable
    Par pitou58 dans le forum Programmation système
    Réponses: 1
    Dernier message: 17/11/2011, 22h50

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