Contrôle du servomoteur Raspberry Pi

En plus des moteurs pas à pas, il existe également des servomoteurs petits et bon marché. Le contrôle des servomoteurs Raspberry Pi est très simple et grâce à la petite taille et au poids, ils sont utilisés dans de nombreux domaines.
Contrairement aux moteurs pas à pas, les servomoteurs peuvent être contrôlés avec un seul GPIO.

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

Matériels requis

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

Installer

Dans la plupart des cas, les couleurs du servo sont les suivantes 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 exemple, GPIO17, broche 11)

Servomoteur Raspberry Pi Anschluss

Si vous voulez jouer en toute sécurité, vous pouvez définir une résistance ~ 1 kΩ 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 influer sur l’alimentation du Raspberry Pi (il suffit de regarder la fiche technique, ce que le moteur consomme). Dans un tel cas, une source d’alimentation externe est logique (généralement de 4 à 6 V).

Logiciel de contrôle des servomoteurs Raspberry Pi

Contrairement aux moteurs pas à pas, les servomoteurs n’occupent pas de nombreuses 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 PWM est particulièrement utile, qui envoie des signaux répétitifs à intervalles réguliers (le Raspberry Pi Bibliothèque Python doit être installé).

Soit on démarre python (sudo python) ou ouvrez 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 suspendre l’impulsion 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 Fiche technique. Dans l’exemple d’un MG996R nous avons ce qui suit: La période est 20ms longue. En outre, un cycle d’utilisation compris entre 5% et 10% de la période devrait. Ainsi, la durée d’impulsion est entre 1 ms et 2 ms. Habituellement, les servos peuvent tourner entre 0 et 180 °. Nous devons donc ajuster la longueur d’impulsion entre les deux. Une longueur de 1,5 ms (7,5%) donne ainsi un angle de 90 °. Et tout cela avec une précision de 50x par seconde (50Hz).

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

Articles similaires

Bouton retour en haut de la page
Fermer