.. note::
Bonjour, bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l'univers du Raspberry Pi, de l'Arduino et de l'ESP32 avec d'autres amateurs.
**Pourquoi nous rejoindre ?**
- **Assistance d'experts** : Résolvez vos problèmes après-vente et surmontez les défis techniques grâce à l'aide de notre communauté et de notre équipe.
- **Apprenez & Partagez** : Échangez des conseils et des tutoriels pour perfectionner vos compétences.
- **Avant-premières exclusives** : Soyez les premiers informés des nouvelles annonces de produits et découvrez des aperçus en exclusivité.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos nouveaux produits.
- **Promotions festives et cadeaux** : Participez à des tirages au sort et bénéficiez de promotions spéciales pendant les fêtes.
👉 Prêt à explorer et créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui !
.. _1.3.2_py_pi5:
1.3.2 Servo
==============
Introduction
---------------
Dans ce projet, nous allons apprendre à faire tourner un servo-moteur.
Composants requis
--------------------
Pour ce projet, nous aurons besoin des composants suivants :
.. image:: ../python_pi5/img/1.3.2_servo_list.png
Schéma de câblage
------------------------
.. image:: ../img/image337.png
Procédures expérimentales
------------------------------
**Étape 1 :** Construisez le circuit.
.. image:: ../img/image125.png
**Étape 2 :** Accédez au dossier contenant le code.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python-pi5
**Étape 3 :** Exécutez le fichier.
.. raw:: html
.. code-block::
sudo python3 1.3.2_Servo.py
Après l'exécution du programme, le servo effectuera une rotation de 0° à 90°, puis à 180°, avant de revenir à 90° et enfin à 0°, en un mouvement cyclique.
.. warning::
Si le message d'erreur ``RuntimeError: Cannot determine SOC peripheral base address`` apparaît, consultez :ref:`faq_soc`.
**Code**
.. note::
Vous pouvez **modifier/réinitialiser/copier/exécuter/arrêter** le code ci-dessous. Avant de l'exécuter, assurez-vous de vous rendre dans le répertoire source comme ``davinci-kit-for-raspberry-pi/python-pi5``. Après modification, vous pouvez l'exécuter directement pour observer les résultats.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Servo
from time import sleep
# Définir le numéro de la broche GPIO où le servo est connecté
myGPIO = 18
# Définir un facteur de correction pour ajuster la largeur d'impulsion du servo
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000 # Calculer la largeur d'impulsion maximale
minPW = (1.0 - myCorrection) / 1000 # Calculer la largeur d'impulsion minimale
# Initialiser l'objet Servo avec des largeurs d'impulsion personnalisées
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
try:
while True:
# Placer le servo à la position centrale et attendre
servo.mid()
print("mid") # Indiquer la position actuelle
sleep(0.5) # Pause de 0,5 seconde
# Déplacer le servo à sa position minimale et attendre
servo.min()
print("min") # Indiquer la position actuelle
sleep(1) # Maintenir la position pendant 1 seconde
# Revenir à la position centrale et attendre
servo.mid()
print("mid") # Indiquer la position actuelle
sleep(0.5) # Pause de 0,5 seconde
# Déplacer le servo à sa position maximale et attendre
servo.max()
print("max") # Indiquer la position actuelle
sleep(1) # Maintenir la position pendant 1 seconde
except KeyboardInterrupt:
# Terminer le script proprement en cas d'interruption clavier (Ctrl+C)
pass
**Explication du code**
1. Ces instructions importent la classe ``Servo`` pour le contrôle du servo et la fonction ``sleep`` pour la temporisation.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import Servo
from time import sleep
2. Définir le numéro de la broche GPIO utilisée (18) pour connecter le servo.
.. code-block:: python
# Définir le numéro de la broche GPIO où le servo est connecté
myGPIO = 18
3. Ces lignes définissent un facteur de correction et l'utilisent pour calculer les largeurs d'impulsion maximales et minimales, ajustant ainsi la plage de mouvement du servo.
.. code-block:: python
# Définir un facteur de correction pour ajuster la largeur d'impulsion du servo
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000 # Calculer la largeur d'impulsion maximale
minPW = (1.0 - myCorrection) / 1000 # Calculer la largeur d'impulsion minimale
4. Initialiser l'objet Servo avec la broche GPIO spécifiée et les largeurs d'impulsion définies.
.. code-block:: python
# Initialiser l'objet Servo avec des largeurs d'impulsion personnalisées
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
5. Le bloc `try` contient une boucle `while True` qui déplace continuellement le servo. Le servo se positionne au centre, aux points minimum et maximum, chaque position étant affichée et maintenue pendant une durée définie.
.. code-block:: python
try:
while True:
# Placer le servo à la position centrale et attendre
servo.mid()
print("mid") # Indiquer la position actuelle
sleep(0.5) # Pause de 0,5 seconde
# Déplacer le servo à sa position minimale et attendre
servo.min()
print("min") # Indiquer la position actuelle
sleep(1) # Maintenir la position pendant 1 seconde
# Revenir à la position centrale et attendre
servo.mid()
print("mid") # Indiquer la position actuelle
sleep(0.5) # Pause de 0,5 seconde
# Déplacer le servo à sa position maximale et attendre
servo.max()
print("max") # Indiquer la position actuelle
sleep(1) # Maintenir la position pendant 1 seconde
except KeyboardInterrupt:
# Terminer le script proprement en cas d'interruption clavier (Ctrl+C)
pass