Note

Bonjour, bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez plus profondément dans Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Support d’experts : Résolvez les problèmes post-vente et les défis techniques grâce à l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des conseils et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Bénéficiez d’un accès anticipé aux annonces de nouveaux produits et aux avant-premières.

  • Réductions spéciales : Profitez de réductions exclusives sur nos derniers produits.

  • Promotions festives et cadeaux : Participez à des concours et promotions de vacances.

👉 Prêt à explorer et créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !

4.3 Servo Oscillant

Un servo est un dispositif de positionnement connu pour sa capacité à maintenir des angles spécifiques et à offrir une rotation précise. Cela le rend très prisé pour les systèmes de contrôle nécessitant des ajustements angulaires constants. Il n’est pas surprenant que les servos soient largement utilisés dans les jouets télécommandés haut de gamme, des modèles d’avions aux répliques de sous-marins et aux robots télécommandés sophistiqués.

Dans cette aventure intrigante, nous allons nous lancer le défi de manipuler le servo de manière unique - en le faisant osciller ! Ce projet offre une excellente occasion de plonger plus profondément dans la dynamique des servos, d’affiner vos compétences en systèmes de contrôle précis et de mieux comprendre leur fonctionnement.

Êtes-vous prêt à faire danser le servo au rythme de vos envies ? Embarquons ensemble dans cette aventure passionnante !

Composants requis

Pour ce projet, nous avons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit de démarrage ESP32

320+

ESP32 Starter Kit

Vous pouvez également les acheter séparément à partir des liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

ESP32 carte

Acheter

Extension de caméra ESP32

ACHETER

Fils de connexion

Acheter

Servo

Acheter

Pins disponibles

Voici une liste des pins disponibles sur la carte ESP32 pour ce projet.

Pins disponibles

IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

Schéma

../../_images/circuit_4.3_servo.png

Câblage

  • Le fil orange est le signal et est connecté à IO25.

  • Le fil rouge est le VCC et est connecté à 5V.

  • Le fil marron est la masse (GND) et est connecté à GND.

../../_images/4.3_swinging_servo_bb.png

Code

Note

  • Ouvrez le fichier 4.3_servo.ino sous le chemin esp32-starter-kit-main\c\codes\4.3_servo. Ou copiez ce code dans Arduino IDE.

  • Après avoir sélectionné la carte (ESP32 Dev Module) et le port approprié, cliquez sur le bouton Téléverser.

  • Toujours afficher « Unknown COMxx » ?

  • La bibliothèque ESP32Servo est utilisée ici, vous pouvez l’installer à partir du Gestionnaire de Bibliothèques.

    ../../_images/servo_lib.png

Une fois le code téléversé, vous pouvez voir le bras du servo osciller dans une plage de 0° à 180°.

Comment ça marche ?

  1. Inclure la bibliothèque ESP32Servo : Cette ligne importe la bibliothèque ESP32Servo, nécessaire pour contrôler le servo-moteur.

    #include <ESP32Servo.h>
    
  2. Définir le servo et la broche à laquelle il est connecté : Cette section déclare un objet Servo (myServo) et un entier constant (servoPin) pour représenter la broche à laquelle le servo-moteur est connecté (broche 25).

    // Définir le servo et la broche à laquelle il est connecté
    Servo myServo;
    const int servoPin = 25;
    
  3. Définir les largeurs d’impulsion minimales et maximales pour le servo : Cette section définit les largeurs d’impulsion minimales et maximales pour le servo-moteur (0,5 ms et 2,5 ms, respectivement).

    // Définir les largeurs d'impulsion minimales et maximales pour le servo
    const int minPulseWidth = 500; // 0.5 ms
    const int maxPulseWidth = 2500; // 2.5 ms
    
  4. La fonction setup initialise le servo-moteur en l’attachant à la broche spécifiée et en définissant sa plage de largeur d’impulsion. Elle définit également la fréquence PWM du servo à la norme de 50Hz.

    void setup() {
        // Attacher le servo à la broche spécifiée et définir sa plage de largeur d'impulsion
        myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
    
        // Définir la fréquence PWM du servo
        myServo.setPeriodHertz(50); // Servo standard 50Hz
    }
    
    • attach (int pin, int min, int max): Cette fonction attache le servo-moteur à la broche GPIO spécifiée et définit les largeurs d’impulsion minimales et maximales pour le servo.

      • pin: Le numéro de la broche GPIO à laquelle le servo est connecté.

      • Les min et max: les largeurs d’impulsion minimales et maximales, respectivement, en microsecondes. Ces valeurs définissent la plage de mouvement du servo-moteur.

    • setPeriodHertz(int hertz): Cette fonction définit la fréquence PWM du servo-moteur en hertz.

      • hertz: La fréquence PWM souhaitée en hertz. La fréquence PWM par défaut pour les servos est de 50Hz, ce qui convient à la plupart des applications.

  5. La fonction loop est la partie principale du code qui s’exécute en continu. Elle fait osciller le servo-moteur de 0 à 180 degrés, puis de nouveau à 0 degrés. Cela se fait en mappant l’angle à la largeur d’impulsion correspondante et en mettant à jour le servo-moteur avec la nouvelle valeur de largeur d’impulsion.

    void loop() {
        // Faire osciller le servo de 0 à 180 degrés
        for (int angle = 0; angle <= 180; angle++) {
            int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
            myServo.writeMicroseconds(pulseWidth);
            delay(15);
        }
    
        // Faire osciller le servo de 180 à 0 degrés
        for (int angle = 180; angle >= 0; angle--) {
            int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
            myServo.writeMicroseconds(pulseWidth);
            delay(15);
        }
    }
    
    • writeMicroseconds(int value): Cette fonction définit la largeur d’impulsion du servo-moteur en microsecondes.

      • value: La largeur d’impulsion souhaitée en microsecondes.

      La fonction writeMicroseconds(int value) prend un entier en argument, représentant la largeur d’impulsion souhaitée en microsecondes. Cette valeur doit généralement se situer dans la plage spécifiée par les largeurs d’impulsion minimales et maximales (minPulseWidth et maxPulseWidth) définies plus tôt dans le code. La fonction définit ensuite la largeur d’impulsion pour le servo-moteur, le faisant ainsi se déplacer à la position correspondante.