Information
Une description technique du fonctionnement d’un servomoteur est disponible sur la page dédiée
Piloter un servomoteur pour le robot
08 - Servomoteurs
Cette page va vous accompagner dans l'utilisation des servomoteurs sur le Otto-MKS
Qu’est-ce qu’un servomoteur ? : Un servomoteur est un moteur électrique qui permet de contrôler des mouvements précis en termes de position, de vitesse et d’accélération. Très populaire en robotique, il est utilisé pour des applications nécessitant un contrôle précis, comme les bras robotiques, les voitures télécommandées, ou les systèmes de caméra motorisée.
Fonctionnement de base : : Les servomoteurs se contrôlent grâce à un signal PWM (Pulse Width Modulation). En fonction de la largeur de l’impulsion, ils adoptent une position spécifique (généralement entre 0° et 180°).
Avant de piloter des servomoteurs avec Arduino, il va falloir installer une librairie développée pour l’ESP32. Dans ce cadre, vous pouvez utiliser la librairie ESP32Servo :
Rendez-vous dans l’onglet de gauche Library Manager, recherchez ESP32Servo
dans la barre de recherche, puis sélectionnez la bibliothèque créée par Kevin Harrington et John K. Bennett. Cliquez ensuite sur Install pour l’ajouter à votre projet.
Cette bibliothèque fonctionne exactement comme la bibliothèque Arduino classique Servo, mais elle est spécialement adaptée aux microcontrôleurs de type ESP32.
La bibliothèque Servo (ou ESP32Servo dans le cas de l’ESP32) permet de contrôler facilement des servomoteurs en générant des signaux PWM (Pulse Width Modulation). Ces signaux déterminent la position du servomoteur en ajustant la largeur de l’impulsion envoyée.
PWM et Position du Servomoteur :
Simplification avec la Bibliothèque : La bibliothèque Servo gère automatiquement la génération des signaux PWM en fonction de l’angle que vous spécifiez dans le code. Cela vous évite de configurer manuellement les timers ou d’écrire un code complexe.
Voici les principales fonctions de la bibliothèque et leur utilisation :
Servo.attach(pin)
Servo monServo;
monServo.attach(9); // Attache un servomoteur à la broche D9
Servo.write(angle)
monServo.write(90); // Place le servo à 90°
Servo.writeMicroseconds(value)
monServo.writeMicroseconds(1500); // Impulsion pour 90° (position médiane)
Servo.detach()
monServo.detach(); // Libère la broche utilisée par le servomoteur
Voici un exemple simple pour comprendre comment utiliser la bibliothèque Servo :
#include <ESP32Servo.h>
Servo monServo;
void setup() {
monServo.attach(D7); // Attache le servo à la broche D7
}
void loop() {
monServo.write(0); // Positionne le servo à 0°
delay(1000); // Pause de 1 seconde
monServo.write(180); // Positionne le servo à 180°
delay(1000); // Pause de 1 seconde
}
Vous allez devoir imaginer des séquences de marche et bien d’autres pour votre robot. Afin de faire cela, nous allons utiliser des foncitons comme vu dans les chapitres précédentS. L’objectif par la suite est donc de mettre au point des séquences de marche et de les tester. Pour cela, vosu pouvez par exemple commencer par créer une fonction void walk()
permettant au robot de marcher.
void walk(){
FootLeft.write(90));
LegLeft.write(90);
FootRight.write(90);
Legright.write(90);
delay(1000);
FootLeft.write(45);
LegLeft.write(90);
FootRight.write(90);
Legright.write(90);
//etc...
}
Cet exemple est très basique, et vous constaterez rapidement que modifier ce type de séquences peut devenir fastidieux à mesure que votre projet se complexifie.
Pour aller plus loin, il serait intéressant d’intégrer des fonctions qui permettent de piloter plusieurs servomoteurs avec des vitesses différentes ou de simplifier la création et la gestion des séquences. Cela rendra votre code plus lisible, modulaire et évolutif pour des applications plus avancées.
Trouvez d'autres tutoriels en lien avec le projet