Tutoriel ESP32 17/55 - Contrôle du moteur servo à l'aide de l'ESP32 et d'un potentiomètre - Kit d'apprentissage IoT ESP32
Dans ce tutoriel, nous allons apprendre à contrôler un servo-moteur à l'aide d'un microcontrôleur ESP32 et d'un potentiomètre du kit d'apprentissage IoT ESP32 de SunFounder. À la fin de ce projet, vous pourrez ajuster l'angle du servo-moteur de manière fluide à l'aide du potentiomètre, permettant ainsi un contrôle précis. C'est un excellent moyen d'explorer les capacités de l'ESP32 et son interface avec les moteurs.

Au fur et à mesure que nous plongeons dans les détails, nous couvrirons les composants matériels nécessaires, les instructions de câblage et des exemples de code pour faire fonctionner le tout. Pour une représentation plus visuelle, n'oubliez pas de consulter la vidéo associée à ce tutoriel (dans la vidéo à 0:30).
Matériel expliqué
Les composants principaux de ce projet incluent le microcontrôleur ESP32, un moteur servo (SG90) et un potentiomètre. L'ESP32 est un microcontrôleur puissant qui offre le Wi-Fi et le Bluetooth intégrés, ce qui le rend adapté aux projets IoT. Il est capable de contrôler divers dispositifs, y compris des moteurs, avec une grande précision.
Le moteur servo SG90 est un composant largement utilisé qui peut tourner d'environ 270 degrés. Il fonctionne avec un signal de modulation de largeur d'impulsion (PWM), où l'angle de rotation est déterminé par la largeur de l'impulsion qui lui est envoyée. Le potentiomètre agit comme une résistance variable, vous permettant d'ajuster la tension envoyée à l'ESP32, ce qui contrôle à son tour la position du servo.
Détails de la fiche technique
| Fabricant | SG |
|---|---|
| Numéro de pièce | SG90 |
| Tension logique/IO | 3,3 V (ESP32) |
| Tension d'alimentation | 5 V |
| Courant de sortie (par canal) | 1.2 A |
| Courant de crête (par canal) | 2,5 A |
| Directives de fréquence PWM | 50 Hz |
| Seuils de logique d'entrée | 0,2 V (bas), 2,5 V (haut) |
| Chute de tension / RDS(on)/ saturation | 0,5 V |
| Limites thermiques | 85 °C max |
| Colis | Plastique |
| Remarques / variantes | Disponible en différents types d'équipement |
- Assurez-vous que le servo est alimenté avec une tension appropriée (5V).
- Connectez la masse du servo à la masse de l'ESP32 pour une référence commune.
- Utilisez des signaux PWM appropriés pour contrôler la position du servo.
- Soyez conscient des exigences en courant du servomoteur ; utilisez une alimentation externe si nécessaire.
- Vérifiez les assignations de broches correctes lors du câblage pour éviter les erreurs de configuration.
Instructions de câblage

Pour câbler le servomoteur et le potentiomètre à l'ESP32, commencez par connecter le fil de masse du servomoteur (généralement noir ou marron) à l'une des broches de masse de l'ESP32. Ensuite, connectez le fil d'alimentation (généralement rouge) du servomoteur à la broche 5V de l'ESP32. Enfin, connectez le fil de signal (généralement orange ou blanc) du servomoteur à la broche25sur l'ESP32.
Pour le potentiomètre, connectez une broche extérieure au pin 3,3 V sur l'ESP32 et l'autre broche extérieure à la terre. La broche centrale du potentiomètre doit être connectée au pin34sur l'ESP32. Cette configuration permet à l'ESP32 de lire la tension de sortie variable du potentiomètre, qui sera utilisée pour contrôler la position du servo.
Exemples de code et guide étape par étape
Le code ci-dessous initialise le servo et définit les paramètres pour contrôler son mouvement :
#include
Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms
void setup() {
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
myServo.setPeriodHertz(50); // Standard 50Hz servo
}
Dans ce code, nous incluons leESP32Servobibliothèque et créer une instance du servo avec le nommyServoNous définissons le numéro de broche pour le servo et fixons les largeurs d'impulsions minimales et maximales qui correspondent aux limites d'angle du servo.
Ensuite, jetons un œil à la boucle qui déplace en continu le servo d'avant en arrière :
void loop() {
for (int angle = 0; angle <= 180; angle++) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
for (int angle = 180; angle >= 0; angle--) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
}
Cette boucle change progressivement l'angle de 0 à 180 degrés et revient en arrière, utilisant lemapfonction pour convertir l'angle en la largeur d'impulsion correspondante pour le servo. Chaque changement est suivi d'un court délai pour permettre au servo d'atteindre sa nouvelle position en douceur.
Démonstration / À quoi s'attendre
Une fois que tout est câblé et que le code est téléchargé, vous devriez voir le servo-moteur se déplacer en douceur de 0 à 180 degrés et revenir. Si vous ajustez le potentiomètre, le servo devrait refléter la nouvelle position en fonction de la tension fournie par le potentiomètre. Faites attention à la polarité inversée lors du câblage, car cela pourrait endommager vos composants (dans la vidéo à 3:45).
Horodatages vidéo
- 00:00 Début
- 1:56 Qu'est-ce qu'un moteur servo ?
- 5:00 Page des documents
- 6:33 Explication du câblage pour servo
- Sélectionnement du port COM pour ESP32 dans Arduino IDE à 7:45
- 9:27 Code Arduino expliqué
- 14:31 Démonstration du contrôle servo utilisant l'ESP32
- 16:04 Alimentation d'un servomoteur autre que 5V
- 18:47 Contrôler le servo sans la boucle
- 20:15 Contrôle du servo avec un potentiomètre
- 21:37 Code Arduino pour servomoteur avec potentiomètre expliqué
Common Course Links
Common Course Files
Ressources et références
-
DocumentationTutoriel ESP32 17/55 - Documentation du servomoteur SunFunderdocs.sunfounder.com
Fichiers📁
Fiche technique (pdf)
-
Fiche technique du moteur servo DS5160
DS5160_datasheet.pdf0.33 MB
Autres fichiers
-
Télécharger la fiche technique SG90 (PDF)
robojax-servo-sg90_datasheet.pdf