🛠 Piloter un micro-servo avec la bibliothèque Servo
Objectifs
Commander un micro-servo (type SG90) en position avec la bibliothèque Servo, en balayant quelques angles prédéfinis. Rappel important sur le Nano Every : le PWM est sur 3, 5, 6, 9, 10 — on prend la broche 9. Le cœur megaAVR rempile les timers, donc les bibliothèques qui détournent un timer (anciens pilotes servo ou encodeurs RF bit-bang) peuvent nécessiter une version à jour.
Matériel
- 1 × Arduino Nano Every
- 1 × micro-servo SG90 (ou MG90S)
- Alimentation externe 5 V conseillée si plusieurs servo-moteurs (le 5 V USB chauffe vite avec 2 servo-moteurs)
- Fils mâle-femelle, câble micro-USB
Code complet
// 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]));
}
}
Vérification attendue
Le bras du servo se déplace chaque seconde vers 0°, 45°, 90°, 135°, 180°, puis recommence. Le moniteur série affiche l'angle courant. En fin de course, le servo grogne légèrement (consigne hors plage) : c'est normal avec write aux bornes.
Erreurs fréquentes
- Servo sur une broche non PWM (11 par réflexe Uno) : la bibliothèque Servo génère ses propres impulsions, mais gardez une broche PWM propre pour la lisibilité et la compatibilité.
- Alimenter un gros servo directement depuis la broche 5 V : chutes de tension, redémarrages de la carte — utilisez une alimentation séparée avec masse commune.
- Oublier la masse commune entre alimentation externe et carte : le servo vibre ou ne répond pas.
attachsur une broche déjà utilisée par d'autres bibliothèques de timer : sur megaAVR, vérifiez les conflits de timer si vous combinez servo + PWM + buzzer.- Servo qui tremble en position : consigne intermittente ; cadencez les
writeavecmilliscomme ci-dessus plutôt qu'à chaqueloop.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
multi-serie.inoArduinoadc-filtre.inoArduinointerrupt-bouton.inoArduinonvm-consignes.inoArduinosommeil-every.inoArduinowatchdog-secours.inoArduino