🛠 Piloter un micro-servo avec la bibliothèque Servo
Objetivos
Controlar un micro-servo (tipo SG90) en posición con la biblioteca Servo, barriendo algunos ángulos predefinidos. Recordatorio importante sobre el Nano Every: el PWM está en los pines 3, 5, 6, 9, 10 — usamos el pin 9. El núcleo megaAVR reorganiza los temporizadores, por lo que las bibliotecas que desvían un temporizador (antiguos controladores de servo o codificadores RF bit-bang) pueden requerir una versión actualizada.
Material
- 1 × Arduino Nano Every
- 1 × micro-servo SG90 (o MG90S)
- Se recomienda alimentación externa de 5 V si hay varios servomotores (el 5 V del USB se calienta rápidamente con 2 servomotores)
- Cables macho-hembra, cable micro-USB
Código completo
// Balayage de positions sur servo, broche 9 (broche PWM valide)
#include <Servo.h>
Servo myservo;
const uint8_t BROCHE_SERVO = 9;
const uint8_t positions[] = {0, 45, 90, 135, 180};
uint8_t index = 0;
uint32_t tPrecedente = 0;
void setup {
myservo.attach(BROCHE_SERVO); // impulsions 1 a 2 ms
Serial.begin(9600);
Serial.println(F("Servo pret"));
}
void loop {
if (millis - tPrecedente >= 1000) {
tPrecedente = millis;
myservo.write(positions[index]);
Serial.print(F("angle="));
Serial.println(positions[index]);
index = (index + 1) % (sizeof(positions) / sizeof(positions[0]));
}
}
Verificación esperada
El brazo del servo se mueve cada segundo hacia 0°, 45°, 90°, 135°, 180°, y luego comienza de nuevo. El monitor serie muestra el ángulo actual. En el final del recorrido, el servo emite un ligero zumbido (consigna fuera de rango): esto es normal con write en los límites.
Errores frecuentes
> SIN VERIFICAR: comportamiento exacto de la biblioteca Servo en cada temporizador del 4809 según el pin — pruebe antes de un proyecto multi-servo.
- Servo en un pin no PWM (11 por reflejo de Uno): la biblioteca Servo genera sus propios impulsos, pero mantenga un pin PWM limpio para la legibilidad y la compatibilidad.
- Alimentar un servo grande directamente desde el pin de 5 V: caídas de tensión, reinicios de la placa — utilice una alimentación separada con masa común.
- Olvidar la masa común entre la alimentación externa y la placa: el servo vibra o no responde.
attachen un pin ya utilizado por otras bibliotecas de temporizador: en megaAVR, verifique los conflictos de temporizador si combina servo + PWM + zumbador.- Servo que tiembla en posición: consigna intermitente; cadencie las llamadas a
writeconmilliscomo se muestra arriba en lugar de en cadaloop.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
multi-serie.inoArduinoadc-filtre.inoArduinointerrupt-bouton.inoArduinonvm-consignes.inoArduinosommeil-every.inoArduinowatchdog-secours.inoArduino