P2E-Servo-FR

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Le servo-moteur

Qu'est-ce qu'un Servo-Moteur ?

Un servo-moteur est un dispositif typiquement utilisé en modélisme pour, par exemple, contrôler la direction d'une voiture télécommandée, l'orientation d'un avion.

 

Sur un servo-moteur, l'angle de rotation de l'axe reste sur une position fixe. L'angle de l'axe peut être positionné entre 0 et 90° (modélisme) ou 0 et 180°C (hobbyiste) en fonction du signal communiqué au servo-moteur (la demande du microcontroleur).

 

Un servo-moteur comprend :

  • Un moteur électrique (continu), généralement assez petit.
  • Des engrenages réducteur en sortie du ce moteur (pour avoir moins de vitesse et plus de couple ou de force).
  • Un capteur type "potentiomètre" raccordé sur la sortie.
    Il s'agit donc d'une résistance qui varie en fonction de l'angle, ce qui permet de mesurer l'angle de rotation sur l'axe de sortie.
  • Un asservissement électronique pour contrôler la position/rotation, de cet axe de sortie pour le maintenir à la bonne position.

Contrôler un servo-moteur

Le servo-moteur s'alimente avec une tension de 5V (6V max) et utilise un signal PWM particulier pour communiquer l'angle de rotation au moteur.

Le temps d'impulsion du signal permet de déterminer la position du servo-moteur:

  • 1.25 ms = 0 degré
  • 1.50 ms = 90 degrés
  • 1.75 ms = 180 degrés

 
Source: Area RC-Bot

Raccordement d'un servo-moteur

Puisque l'interface de commande est assez simple, un servo-moteur se raccorde avec seulement 3 fils (la masse, +5v et la commande d'impulsion). Les raccordements les plus standardisés sont:

Noir, Rouge, Blanc :

  • Noir: Raccordé à la Masse,
  • Rouge: Alimentation moteur et logique de commande. Raccordé à VCC 5v,
  • Blanc: Commande de la position du servo-moteur.

Marron, Rouge, Jaune :

Couleurs du standard Graupner.

 

  • Marrons: Raccordé à la Masse,
  • Rouge: Alimentation moteur et logique de commande. Raccordé à VCC 5v,
  • Jaune: Commande de la position du servo-moteur.

Les autres cas :

La plupart des servo-moteur ont 3 conducteurs avec des couleurs noir, rouge et blanc OU brun, rouge et orange/jaune/etc:

 

  • brun ou noir = MASSE/GND (borne négative de l'alimentation)
  • Rouge = alimentation servo (Vservo, borne positive de l'alimentation)
  • Orange, jaune, blanc ou bleu = Commande de position du servo

Bibliothèque

La bibliothèque servo utilisée dans ces exemples est déjà installée sur le Raspberry-Pi Pico du Pico-2-Explorer.

Il est possible de l'installée sur un autre Raspberry-Pi Pico depuis le dépôt micropython-pico disponible ici sur Github.

Cas pratique

Cet exemple se déroulera en deux temps:

  1. Positionnement sur une position arbitraire pour démontrer le fonctionnement d'un servo-moteur.
  2. Positionnement en fonction de la position d'un potentiomètre, très utile pour déterminer l'amplitude d'un servo-moteur.

Branchement

 

Afin d'éviter tout incident de polarisation, il est préférable de brancher:

  • le +5V en premier. Celui-ci se connecte au centre du connecteur.
  • la masse (GND) en second
  • le signal en dernier (sur GP22).

Code simple

Bien que la plupart des servo-moteurs hobbyistes disposent d'une amplitude angulaire proche de 180°, cet exemple se limitera volontairement à une amplitude de 90°.

Le script ci-dessous place l'angle du servo à 0° puis 45° puis 90° avant de revenir à 0°. Une pause de 2 secondes est insérée entre chaque mouvement Cette série d'opérations est répétée 5 fois puis le script s'arrête.


 1 from machine import Pin
 2 from servo import Servo
 3 import time
 4 
 5 s = Servo( Pin.board.GP22 )
 6 for i in range( 5 ):
 7     s.angle(0)
 8     time.sleep(2)
 9     s.angle(45)
10     time.sleep(2)
11     s.angle(90)
12     time.sleep(2)
13 s.detach()
14 print("That s all Folks")

Voici quelques explications utiles:

  • Ligne 2: import de la classe Servo permettant de prendre le contrôle d'un servo-moteur.
  • Ligne 5: création d'une instance de la classe Servo attachée à la broche GP22.
  • Ligne 9: positionnement de l'axe à un angle de 45 degrés (valeur entre 0 et 180) et active l'asservissement afin de maintenir cette angle.
  • Ligne 13: Après l'exécution des 5 iterations, la méthode detach() libère l'asservissement du servo-moteur (jusqu'au prochain appel à la méthode angle()).

Un problème?

Pas de son ?

  1. Est ce que le code est en cours d'exécution ?
    1. OUI:

Le défi

1. Sur