Raspberry Pi - Moteur Servo

Ce tutoriel vous apprend à utiliser Raspberry Pi pour contrôler un servomoteur. En détail, nous allons apprendre :

Préparation du matériel

1×Raspberry Pi 4 Model B
1×Servo Motor
1×Jumper Wires
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du moteur servo

Un servomoteur est un composant capable de faire tourner son axe dans une gamme de mouvements spécifique, généralement entre 0 et 180 degrés. Il est couramment utilisé pour contrôler la position angulaire d'un objet.

Le brochage du servomoteur

Le moteur servo a trois broches :

  • Broche VCC (généralement rouge) qui doit être connectée à VCC (5V)
  • Broche GND (typiquement noire ou marron) qui doit être connectée à GND (0V)
  • Broche de signal (normalement jaune ou orange) qui reçoit le signal de contrôle PWM depuis une broche d'un Raspberry Pi.
brochage du servomoteur

Raspberry Pi - Servomoteur

Certaines broches d'un Raspberry Pi peuvent être programmées pour produire un signal PWM. Nous pouvons contrôler un servo-moteur en connectant sa broche de signal à l'une des broches du Raspberry Pi et en la programmant pour générer un signal PWM sur cette broche.

Grâce à la bibliothèque Raspberry Pi Servo, le contrôle d'un servomoteur est facilité. Il n'est pas nécessaire de comprendre le fonctionnement du servomoteur ou comment générer un signal PWM. Tout ce que nous devons faire est d'apprendre à utiliser la bibliothèque.

Diagramme de câblage

Schéma de câblage du moteur servo Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Dans le but de simplifier les choses, le schéma de câblage ci-dessus est utilisé pour les tests et l'apprentissage, et convient à un servomoteur avec un faible couple. Nous recommandons vivement d'utiliser une alimentation externe pour le servomoteur. Le schéma de câblage ci-dessous montre comment connecter le servomoteur à une source d'alimentation externe.

Diagramme de câblage de l'alimentation externe du moteur servo pour Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

Raspberry Pi Screw Terminal Block Shield

Code Raspberry Pi

Étapes rapides

  • Assurez-vous d'avoir Raspbian ou tout autre système d'exploitation compatible avec Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous devez installer des bibliothèques.
  • Si c'est la première fois que vous utilisez Raspberry Pi, consultez Installation du logiciel - Raspberry Pi..
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows. Consultez comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous d'avoir la bibliothèque RPi.GPIO installée. Sinon, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Créez un fichier de script Python servo_motor.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-servo-motor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define the GPIO pin connected to the servo motor SERVO_PIN = 18 # Set the servo pin as an output pin GPIO.setup(SERVO_PIN, GPIO.OUT) # Set up PWM pwm_frequency = 50 # Set PWM frequency to 50Hz (standard for most servos) pwm = GPIO.PWM(SERVO_PIN, pwm_frequency) pwm.start(0) def set_servo_angle(angle): duty_cycle = (angle / 18) + 2.5 pwm.ChangeDutyCycle(duty_cycle) time.sleep(0.3) # Give the servo time to reach the desired angle try: while True: # Rotate the servo from 0 to 180 degrees for angle in range(0, 181, 10): set_servo_angle(angle) # Rotate the servo back from 180 to 0 degrees for angle in range(180, -1, -10): set_servo_angle(angle) except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration pwm.stop() GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 servo_motor.py

Le script s'exécute en boucle infinie jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

  • Découvrez le résultat : Le servomoteur tourne à une vitesse lente dans les deux sens, horaire et antihoraire, jusqu'à 180°.

Explication du code

Découvrez l'explication ligne par ligne contenue dans les commentaires du code source !

Comment contrôler la vitesse d'un servomoteur

# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-servo-motor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define the GPIO pin connected to the servo motor SERVO_PIN = 18 # Set the servo pin as an output pin GPIO.setup(SERVO_PIN, GPIO.OUT) # Set up PWM pwm_frequency = 50 # Set PWM frequency to 50Hz (standard for most servos) pwm = GPIO.PWM(SERVO_PIN, pwm_frequency) pwm.start(0) MOVING_TIME = 3000 # moving time is 3 seconds angle_start = 30 # 30° angle_stop= 90 # 90° move_start_ms = int(round(time.time() * 1000)) # start moving in milliseconds try: while True: # Get the elapsed time since the movement started progress = int(round(time.time() * 1000)) - move_start_ms if progress <= MOVING_TIME: # Calculate the current angle based on the progress angle = angle_start + (angle_stop- angle_start) * progress / MOVING_TIME pwm.ChangeDutyCycle(2.5 + (angle / 18)) # Convert angle to duty cycle time.sleep(0.05) # Adjust this delay to control the speed/smoothness of movement except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration pwm.stop() GPIO.cleanup()

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!