🛠 Piloter un servo avec le PWM (LEDC)
Objetivos
Controlar un micro-servo con la biblioteca Servo (basada en el controlador PWM LEDC del ESP32-S3) y hacer que barre desde 0 hasta 180°. Comprender la alimentación: la placa no tiene ningún pin de 5 V, mientras que un servo estándar funciona a 4,8-6 V.
Material
- 1 × Arduino Nano ESP32
- 1 × micro-servo SG90: señal en D9, alimentación de 5 V externa (pilas o regulador), masa común obligatoria con la placa
- >
Código completo
#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); }
}
Verificación esperada
El brazo del servo barre 0 → 180 → 0° en un bucle fluido. Alimentado desde una fuente externa de 5 V con masa común, el movimiento es completo sin reinicios de la placa ni parpadeos del LED USB.
Errores frecuentes
- Servo alimentado por la placa: no hay ningún pin de 5 V (VBUS solo pasa desde USB) y los GPIO entregan un máximo de 40 mA — un servo consume demasiado.
- Masa no común entre la alimentación del servo y la placa: el servo vibra, zumba o no responde.
- Conexión directa a los 3,3 V de la placa: subalimentación, par motor ridículo, brown-out y reinicios.
- Confundir write (ángulo) y writeMicroseconds (anchura de pulso): write(1500) se limita a 180°.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino