controle vitesse servomoteur
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

controle vitesse servomoteur



  1. #1
    Tranber72

    controle vitesse servomoteur


    ------

    Bonjour,

    J'ai un système pantilt avec deux servomoteurs branchés sur une carte Arduino Uno (ils sont actionnés par un joystick) et j'aimerais contrôler la vitesse de rotation de chacun des 2 moteurs avec deux potentiometres. Pouvez-vous m'aider pour modifier mon code ? Les potars seront branchés sur A0 et A1.

    Merci pour votre aide !

    Code:
    #include <Servo.h> // librairie pour servomoteur 
    
    // --- Déclaration des constantes utiles ---
    const int APPUI=LOW; // constante pour tester état BP
    
    //--- Constantes utilisées avec le servomoteur 
    const int ANGLE_MIN=0; // angle position MIN en degrés
    const int POS_MIN=550; // largeur impulsion pour position ANGLE_MIN degrés du servomoteur
                       // par exemple POS_MIN=600 pour ANGLE_MIN=10° avec un futaba S3003 
                       // ou POS_MIN=550 pour ANGLE_MIN=0 avec un futaba S3003
    
    const int ANGLE_MAX=172; // angle position MAX en degrés
    int POS_MAX=2400; // largeur impulsion pour position ANGLE_MAX degrés du servomoteur
                       // POS_MAS=2300 pour ANGLE_MIN=170° pour futaba s3003
                       // ou POS_MAX=2400 pour ANGLE_MAX=172 pour futaba S3003
    
    
    
    const int broche_servoPan=6; // Constante pour la broche 8
    const int broche_servoTilt=7; // Constante pour la broche 8
    
    // --- Déclaration des constantes des broches analogiques ---
    
    const int axe1Joystick=A2; // Constante pour la broche analogique 0
    const int axe2Joystick=A3; // Constante pour la broche analogique 1
    int potpin = A0;  // analog pin used to connect the potentiometer
    int val;    // variable to read the value from the analog pin 
    
    // --- Déclaration des variables globales ---
    
    int mesure_brute=0;// Variable pour acquisition résultat brut de conversion analogique numérique
    float mesuref=0.0;// Variable pour calcul résultat décimal de conversion analogique numérique
    
    int positionAxe1=0; // Variable pour acquisition résultat brut de conversion analogique numérique axe 1 Joystick
    int positionAxe2=0; // Variable pour acquisition résultat brut de conversion analogique numérique axe 2 Joystick
    
    int angleServoPan=90; // variable de position du servo  Pan en degrés
    int angleServoTilt=90; // variable de position du servo  Tilt en degrés
    
    int angleServoPan0=90; // variable de la dernière position du servo  Pan en degrés
    int angleServoTilt0=90; // variable de la dernière position du servo  Tilt en degrés
    
    // --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
    
    //--- Création objet servomoteur 
     Servo mon_servoPan;  // crée un objet servo pour contrôler le servomoteur 1
     Servo mon_servoTilt;  // crée un objet servo pour contrôler le servomoteur 2
    
    
    // ////////////////////////// 2. FONCTION SETUP = Code d'initialisation ////////////////////////// 
    // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
    
    void setup()   { // debut de la fonction setup()
    
    // --- ici instructions à exécuter 1 seule fois au démarrage du programme --- 
    
    // ------- Initialisation fonctionnalités utilisées -------  
    
    //--- Initialisation Servomoteur 
     mon_servoPan.attach(broche_servoPan);  // attache l'objet servo à la broche de commande du servomoteur Pan
     mon_servoTilt.attach(broche_servoTilt);  // attache l'objet servo à la broche de commande du servomoteur Tilt
    
    
    // ------- Broches en sorties numériques -------  
      pinMode (broche_servoPan,OUTPUT); // Broche broche_servoPan configurée en sortie
      pinMode (broche_servoTilt,OUTPUT); // Broche broche_servoPan configurée en sortie
    
    
    // ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  
    
    // Les BP du shield Joystick + BPx2 dispose d'un rappel au plus sur le shield
    
    
    // ------- Initialisation des variables utilisées -------  
    
    // ------- Codes d'initialisation utile -------  
    
    mon_servoPan.writeMicroseconds(angle(angleServoPan)); // crée impulsion à partir valeur angle - plus précis que write()
     mon_servoTilt.writeMicroseconds(angle(angleServoTilt)); // crée impulsion à partir valeur angle - plus précis que write()
    
    delay(200);
    
    } // fin de la fonction setup()
    // ********************************************************************************
    
    ////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
    // la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
    
    void loop(){ // debut de la fonction loop()
    
    
    //----- lecture position Joytstick
     positionAxe1=analogRead(axe1Joystick); // acquisition conversion analogique numérique sur broche analogique axe 1
     positionAxe2=analogRead(axe2Joystick); // acquisition conversion analogique numérique sur broche analogique axe 2
    
    if (positionAxe1>700) {
        angleServoPan=angleServoPan+1; 
        constrain(angleServoPan,ANGLE_MIN,ANGLE_MAX); 
    }
    
    if (positionAxe1<300) {
        angleServoPan=angleServoPan-1; 
        constrain(angleServoPan,ANGLE_MIN,ANGLE_MAX); 
    }
    
    
    if (positionAxe2>700) { 
        angleServoTilt=angleServoTilt+1; 
        constrain(angleServoTilt,ANGLE_MIN,ANGLE_MAX); 
    }
    
    if (positionAxe2<300) {
        angleServoTilt=angleServoTilt-1;
       constrain(angleServoTilt,ANGLE_MIN,ANGLE_MAX);  
    }
     
    //------------- mise à jour de la position du servomoteur --- 
    
    
        if (angleServoPan!=angleServoPan0) {
           mon_servoPan.writeMicroseconds(angle(angleServoPan)); // crée impulsion à partir valeur angle - plus précis que write()
           angleServoPan0=angleServoPan; // mémorise dernière valeur angle prise en compte
         }
    
    
         if (angleServoTilt!=angleServoTilt0) { // si angleServoTilt a changé
           mon_servoTilt.writeMicroseconds(angle(angleServoTilt)); // crée impulsion à partir valeur angle - plus précis que write()
           angleServoTilt0=angleServoTilt; // mémorise dernière valeur angle prise en compte
         }
    
    
        delay(6); // fixe la vitesse de mouvement du servo - entre 2 lecture analogique
    
    //while(1); // stop loop
    
    } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
    // ********************************************************************************
    
    
    // ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS //////////////////// 
    
    
    // ////////////////////////// AUTRES FONCTIONS DU PROGRAMME //////////////////// 
    
    //------------- fonction calibrage impulsion servomoteur à partir valeur angle en degrés
    
    int angle(int valeur_angle) { 
    
             int impuls=0;
             impuls=map(valeur_angle,ANGLE_MIN,ANGLE_MAX,POS_MIN, POS_MAX);
             return impuls;   
    
    } // fin fonction impulsion servomoteur
    
    // ////////////////////////// Fin du programme ////////////////////

    -----
    Dernière modification par Tranber72 ; 17/01/2015 à 16h02.

  2. #2
    invite03481543

    Re : controle vitesse servomoteur

    Bonsoir,

    humm.. un servo moteur se commande directement avec un µC je ne vois pas bien l'intérêt de mettre des potentiomètres pour faire cette fonction.
    Pourquoi n'utilises-tu pas des boutons poussoirs? Haut-bas-droite-gauche et vitesse (+/-) soit 5 BP.
    Explique un peu mieux ton truc, je ne comprends pas ce que tu veux faire.

  3. #3
    Tranber72

    Re : controle vitesse servomoteur

    Bonsoir
    je ne sais pas ce que c est un uC
    mais j utilise un potentiomètre pour contrôler la vitesse d exécution de mes deux servomoteurs
    j ai pu le faire avec deux moteurs cc mais sur les servo le code ne fonctionne pas pareil c est pourquoi je demande votre aide
    merci

  4. #4
    invite03481543

    Re : controle vitesse servomoteur

    µC=microcontroleur

    un servo moteur se commande par des impulsions calibrées en temps, pas par des potentiomètres.

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

    Re : controle vitesse servomoteur

    Il faut utiliser un µC et les modules PWM pour régler les temps entre 1ms et 2ms, la vitesse se régle par le temps de commande entre chaque pas, degré par degré donc, c'est la seule solution.
    Dernière modification par HULK28 ; 17/01/2015 à 21h52.

  7. #6
    Tranber72

    Re : controle vitesse servomoteur

    En fait d'après les recherches que j'ai faite c'est possible mais je n'ai pas réussi à intégrer le potentiomètre et son influence sur la vitesse à mon code
    Voici une vidéo d'exemple https://www.youtube.com/watch?v=c4JBkj5lQyQ

    Et une encore mieux https://www.youtube.com/watch?v=qWAcJ2ZDcfk
    avec les codes suivants sur lesquels j'ai essayé de travailler pour les intégrer au mien http://www.tigoe.net/pcomp/code/arduinowiring/31/
    http://snipt.org/ufije6
    mais sans succès
    Dernière modification par Tranber72 ; 18/01/2015 à 13h09.

Discussions similaires

  1. Circuit de controle d'un Servomoteur
    Par Pipozito dans le forum Électronique
    Réponses: 2
    Dernier message: 10/10/2014, 10h07
  2. servomoteur : contrôler la vitesse de rotation
    Par jaon70 dans le forum Électronique
    Réponses: 14
    Dernier message: 15/10/2013, 09h52
  3. augmenter la vitesse d'un servomoteur
    Par invite0dc3f76c dans le forum Électronique
    Réponses: 6
    Dernier message: 04/04/2010, 20h41
  4. Contrôle de servomoteur par PIC18F2520
    Par invite8d0b7120 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/04/2009, 09h10
  5. Controlé servomoteur
    Par skateur5654 dans le forum Électronique
    Réponses: 4
    Dernier message: 29/10/2007, 09h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.