🛠 Piloter un servo avec le PWM (LEDC)
Objectifs
Commander un micro-servo avec la bibliothèque Servo (construite sur le contrôleur PWM LEDC de l'ESP32-S3) et lui faire balayer 0 à 180°. Comprendre l'alimentation : la carte n'a aucune broche 5 V, alors qu'un servo standard fonctionne en 4,8-6 V.
Matériel
- 1 × Arduino Nano ESP32
- 1 × micro-servo SG90 : signal sur D9, alimentation 5 V externe (piles ou régulateur), masse commune obligatoire avec la carte
- >
Code complet
#include <Servo.h>
Servo balai;
const uint8_t PIN_SERVO = 9; // D9, PWM via LEDC dans le core Arduino
void setup {
Serial.begin(115200);
balai.attach(PIN_SERVO); // PWM 50 Hz, standard servo
}
void loop {
for (int a = 0; a <= 180; a += 15) { balai.write(a); delay(300); }
for (int a = 180; a >= 0; a -= 15) { balai.write(a); delay(300); }
}
Vérification attendue
Le bras du servo balaie 0 → 180 → 0° en boucle fluide. Alimenté depuis une source externe 5 V avec masse commune, le mouvement est complet sans redémarrage de la carte ni scintillement de la LED USB.
Erreurs fréquentes
- Servo alimenté par la carte : il n'y a pas de broche 5 V (VBUS ne passe que depuis USB) et les GPIO délivrent 40 mA maximum — un servo est trop gourmand.
- Masse non commune entre l'alimentation servo et la carte : le servo vibre, bourdonne ou ne répond pas.
- Piquage direct sur le 3,3 V de la carte : sous-alimentation, couple ridicule, brown-out et redémarrages.
- Confondre write (angle) et writeMicroseconds (largeur d'impulsion) : write(1500) est écrêté à 180°.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino