.. 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