🛠 Piloter un micro-servo moteur
Objetivos
Controlar un micro-servo (tipo SG90) con la biblioteca Servo: el servo espera una trama de 20 ms cuyo pulso de 1 a 2 ms define el ángulo. Se programa un barrido de 0 a 180° y se aborda la correcta alimentación (los 5 V del Nano son suficientes para UN servo pequeño, nunca para varios).
Material
- 1 × Arduino Nano clásico (ATmega328P)
- 1 × micro-servo SG90 o MG90S
- Se recomienda una fuente de alimentación externa de 5 V si se usan varios servos; la masa común con el Nano es obligatoria
- >
Código completo
// Balayage servo 0-180 degres sur la broche 9
#include <Servo.h>
Servo myservo;
uint8_t angle = 0;
bool sens = true;
void setup {
myservo.attach(9); // signal sur broche 9
myservo.write(0);
Serial.begin(9600);
}
void loop {
angle += sens ? 5 : -5; // pas de 5 degres
if (angle >= 180) sens = false;
if (angle <= 0) sens = true;
myservo.write(angle); // 0..180
Serial.println(angle);
delay(50); // vitesse du balayage
}
Verificación esperada
El brazo del servo barre regularmente de 0° a 180° y vuelve, suavemente, sin jitter excesivo ni zumbido permanente. El monitor serie muestra la consigna de ángulo creciente y luego decreciente. Al detenerse en una posición, el servo mantiene su par sin temblar en bucle.
Errores frecuentes
- Alimentar varios servos desde los 5 V del Nano: los picos de corriente provocan un brownout del ATmega328P (reset en bucle); alimentar el servo por separado y conectar las masas.
- Olvidar la masa común entre la fuente de alimentación externa y el Nano: el servo vibra en todas direcciones, posición aleatoria.
- Usar attach en un pin ocupado por SoftwareSerial u otro periférico: conflicto de interrupciones, señal PWM corrupta.
- Forzar mecánicamente más allá de 180°: el potenciómetro interno del servo llega al tope y el motor se calienta.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
buzzer-melodie.inoArduinoservo-sweep.inoArduinoultrason-hcsr04.inoArduinolcd-i2c.inoArduinoeeprom-contre.inoArduinosommeil-watchdog.inoArduino