Contrôle du Servo moteur de Raspberry Pi

En plus des moteurs stepper, il existe aussi des servomoteurs petits et économiques. La commande des servomoteurs Raspberry Pi est très simple et grâce à leur faible encombrement et à leur faible poids, ils sont utilisés dans de nombreux domaines.
Contrairement aux moteurs stepper, les servomoteurs peuvent être contrôlés avec un seul GPIO.

Dans ce tutoriel, je vais montrer un exemple d’utilisation de Python pour contrôler un ou plusieurs servomoteurs.

Pièces de matériel requises

Bien sûr, il est possible d’alimenter le servomoteur avec une source d’alimentation externe, mais cela n’a de sens que si plusieurs moteurs sont utilisés. Pour cela, des piles rechargeables / piles ordinaires seraient toujours nécessaires.

 

Installation

Dans la plupart des cas, les couleurs du servo sont comme suit et sont connectées au Pi:

Noir – vient à GND (broche 6) du Pi
Rouge – vient à 3V3 (broche 1) du Pi
Jaune/Orange – vers une broche GPIO libre (par ex. GPIO17, broche 11)

Raspberry Pi Servo Motor Anschluss

Si vous voulez jouer la sécurité, vous pouvez installer une résistance ~ 1kΩ entre la broche de données (jaune/orange) et le Pi. Normalement, ce n’est pas nécessaire.

Si le servomoteur ne tourne pas correctement, cela peut également influencer l’alimentation électrique du Raspberry Pi (voir la fiche technique, ce que le moteur consomme). Dans un tel cas, une source d’alimentation externe est utile (généralement de 4 à 6 V).

 

Logiciel de contrôle des servomoteurs Raspberry Pi

Contrairement aux moteurs stepper, les servomoteurs n’occupent pas beaucoup de broches GPIO pour commander un mouvement. Pour cela, la rotation est contrôlée par la durée de l’impulsion.

L’angle du moteur est réglé sur la longueur de l’impulsion, donc le PWM est particulièrement utile, qui envoie des signaux répétitifs à intervalles réguliers (la bibliothèque Python de Raspberry Pi doit être installée).

Nous démarrons soit python (sudo python) ou ouvrir un nouveau script (sudo nano servomotor.py) avec le contenu suivant:

import RPi.GPIO as GPIO
import time

servoPIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)

p = GPIO.PWM(servoPIN, 50) # GPIO 17 for PWM with 50Hz
p.start(2.5) # Initialization
try:
  while True:
    p.ChangeDutyCycle(5)
    time.sleep(0.5)
    p.ChangeDutyCycle(7.5)
    time.sleep(0.5)
    p.ChangeDutyCycle(10)
    time.sleep(0.5)
    p.ChangeDutyCycle(12.5)
    time.sleep(0.5)
    p.ChangeDutyCycle(10)
    time.sleep(0.5)
    p.ChangeDutyCycle(7.5)
    time.sleep(0.5)
    p.ChangeDutyCycle(5)
    time.sleep(0.5)
    p.ChangeDutyCycle(2.5)
    time.sleep(0.5)
except KeyboardInterrupt:
  p.stop()
  GPIO.cleanup()

Si le servomoteur tremble un peu alors qu’il ne bouge pas, vous pouvez mettre l’impulsion en pause avec ChangeDutyCycle(0)

Pour les servomoteurs et leurs cartes de commande, l’indication de la période et du rapport cyclique est généralement indiquée dans la fiche technique. Dans l’exemple d’un MG996R nous avons ce qui suit : La durée est de 20 ms. En outre, un cycle d’utilisation compris entre 5 et 10 % de la période est prévu. Ainsi la durée de l’impulsion est comprise entre 1ms et 2ms. Habituellement, les servos peuvent tourner entre 0 et 180°. Nous devons donc ajuster la durée de l’impulsion entre les deux. Une longueur de 1,5ms (7,5%) donne donc un angle de 90°. Et le tout à exactement 50x par seconde (50Hz).

 

Si ça vous dérange que le servo (SG90) ne puisse pas tourner à 360°, il y a un « hack« .

Leave a Comment

Your email address will not be published.