Servomoteur avec Feedback

.

Mise à jour le 04/01/2021 : Cet article traite des différentes façons d’utiliser les servomoteurs équipés d’un retour d’information appelée plus communément feedback.

Sommaire

 

.

Descriptif d’un servomoteur avec retour d’information
( Feedback )

Ces servomoteurs classiques possèdent un signal de retour conduit par un quatrième câble blanc. Ce signal peut être exploité par une entrée analogique pour déterminer la position du servo. En robotique, il peut augmenter la stabilité ou servir à enregistrer un mouvement.

Avantages :

  • Ce  signal analogique dépendant de la position du servo permet de connaître la position réelle de celui-ci.
  • Ce signal permet d’améliorer la précision et la stabilité.
  • Apprentissage de mouvement, enregistrement de positions ( robotique )

.

Retour au sommaire.

.

Recapitulatif des servomoteurs feedback 

.

Servomoteur feedback
Reference Alimentation Couple Vitesse Poids Dimensions
S1123  4,8 à 6 Vcc 1,6 kg.cm à 6 Vcc 0.10 sec/60° 13.82gr 11.57 x 32.71 x 31.76mm
SM1449  4,8 à 6 Vcc 1,6 kg.cm à 6 Vcc  0,1 s/60° à 6 Vcc 14 gr  23 x 12 x 29 mm
FS5103B 4,8 Vcc 3 kg.cm à 4,8 Vcc 0,18 sec / 60°  36 g 41 x 20 x 38 mm
   6 Vcc 3,2 kg.cm à 6 Vcc 0,16 sec / 60°    
           

 

Retour au sommaire

.

.

Comment utiliser un servomoteur équipé d’un feedback

Ce programme met en évidence l’utilisation des commandes Servo propres à arduino. Dans celles-ci, nous verrons comment utiliser la commande servo.attach et servo.detach et comment utiliser l’information feed-back du servomoteur. Nous verrons en même temps comment piloter le servomoteur avec un potentiomètre puis, l’utilisation d’un télérupteur ou une bascule RS pour passer d’un mode à l’autre.

 

.

.

Programme réalisé : IDE Arduino 1.8.10 

.

//
//
//=========================================================================
// Utilisation d'un servomoteur avec feedback ( retour d'information )
//   
// Création de deux modes de fonctionnement.
//   1er mode d'utilisation un potentiomètre pour piloter le servomoteur
//   2eme mode débrayage du servomoteur pour pouvoir utiliser l’information feedback.
//
// RedOhm
// le 01/02/2020
// H-Mazelin
//
//========================================================================= 

// Cette librairie permet à une carte Arduino de contrôler des servomoteurs
#include <Servo.h> 

Servo servo_3; 

// broche sur laquelle est branchée la broche du signal du servomoteur 
int servo_broche3 = 3;
// broche sur laquelle est branchée le retour analogique du servomoteur 
int feedback_broche_0 = A0;
// broche sur laquelle est branchée le potentiometre
int potentiometre_1 = A1;
// broche 2 pour connecter le bouton poussoir de selection
int bp_selection = 2 ;



// variable contenant la valeur du potentiometre 
int valeur_potentiometre_1;
// variable contenant la valeur du retour analogique du servomoteur 
int var_feedback_3 ;
// variable du type int pour stocker la valeur de passage du bp_selection
int var_bp_selection;
// etat precedent du bouton et forçage a 0 de la variable 
int etat_bp_selection=0 ;

// creation d'une memoire_2 et forçage a 0 de la variable 
// etat du telerupteur 
int memoire_2=0;


//  Un programme Arduino doit impérativement contenir cette fonction 
//  Elle ne sera exécutée une seule fois au démarrage du microcontroleur
//  Elle sert à configurer globalement les entrées sorties
 
void setup ()
{
  //ouvre le port série et fixe le debit de communication à 9600 bauds
  Serial.begin(9600);
  // on attent que le port de communication soit pret
  while(!Serial);  




 
 // pinMode -> Configure la broche spécifiée pour qu'elle se comporte 
 // soit en entrée, soit en sortie. 
   pinMode(bp_selection,INPUT );

  
}

// ---------------------------------------------------------------------------
// Le programme principal s’exécute par une boucle infinie appelée Loop () 
// ---------------------------------------------------------------------------
 

void loop()
{

// lit l'état de la broche en entrée bouton2
// et met le résultat dans la variable bouton2v 
 var_bp_selection=digitalRead(bp_selection);


// Creation un telerupteur 
   // Compare la variable à gauche avec la valeur ou la variable
   // à droite . Renvoie l'information vraie lorsque les deux
   // variables ne sont pas égales. 
   if (var_bp_selection!=etat_bp_selection)
    {
       if (!var_bp_selection)
      {
        //Inversion de la valeur de la variable memoire 
        memoire_2=!memoire_2;
      }
      
     
        //Inversion de la valeur de la variable memoire 
        memoire_2=!memoire_2;
     
    }
    
etat_bp_selection=var_bp_selection;

    
Serial.print("Etat de la variable telerupteur => ");
Serial.println(memoire_2);


if (memoire_2 == LOW)
{
// ****************************************************************  
// Traitement de la lecture du potentiometre pour piloter en direct 
// le servomoteur 
// ****************************************************************

// Attache un objet de type Servo_3 à une broche.
servo_3.attach(3);

// lecture de la valeur du potentiomètre (valeur entre 0 et 1023)  
valeur_potentiometre_1 =analogRead (potentiometre_1);

// Affiche sur IDE la valeur brute du potentiometre 
//  Serial.print("Valeur du potentiometre => ");
//  Serial.println(valeur_potentiometre_1);

// mise a l'échelle (valeur entre 1 et 180)
// Ré-étalonne un nombre d'une fourchette de valeur vers une autre fourchette.
// Ainsi, une valeur basse source sera étalonnée en une valeur basse de destination  
valeur_potentiometre_1 = map(valeur_potentiometre_1,0,1023,1,180);
// définit la position d'asservissement du servomoteur 
// en fonction de la valeur à l'échelle  
servo_3.write (valeur_potentiometre_1);
  Serial.println(valeur_potentiometre_1);
}

// Si le telerupteur est a l'etat haut alors on realise le traitement si dessous 

else {
  
//****************************************************
// Traitement de la lecture du feedback du servomoteur
//****************************************************

// Désassocie la variable Servo de sa broche.   
// de façon a rendre le servo libre de tension 
servo_3.detach();
// Pause de 100 millisecondes pour la lecture sur l'ecran
delay (100);

// lecture de la valeur du feedback (valeur entre 0 et 1023)  
var_feedback_3 = analogRead (feedback_broche_0);
// Affiche sur IDE la valeur feedback
//  Serial.print("Valeur du feedback  => ");
//  Serial.println(var_feedback_3);
    // Pause de 100 millisecondes pour la lecture sur l'ecran
    delay(100); 
  
// mise a l'échelle (valeur entre 5 et 180)
// Ré-étalonne un nombre d'une fourchette de valeur vers une autre fourchette.
// Ainsi, une valeur basse source sera étalonnée en une valeur basse de destination  
var_feedback_3 =map (var_feedback_3,115,515,5,180);

// Affiche sur IDE la valeur feedback
  Serial.print("Valeur du feedback en degrés  => ");
  Serial.println(var_feedback_3);
  // Pause de 500 millisecondes pour la lecture sur l'ecran 
  delay(500);

}

}  

.

Retour au sommaire

 

.

Pour tout problème 

Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes  sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .

Facebook  Twitter  Youtube 

.

Retour au sommaire