🛠 Piloter un micro-servo moteur
Objectifs
Commander un micro-servo (type SG90) avec la bibliothèque Servo : le servo attend une trame de 20 ms dont l'impulsion de 1 à 2 ms définit l'angle. On programme un balayage 0-180° et on aborde la bonne alimentation (le 5 V du Nano suffit pour UN petit servo, jamais pour plusieurs).
Matériel
- 1 × Arduino Nano classique (ATmega328P)
- 1 × micro-servo SG90 ou MG90S
- Alimentation externe 5 V conseillée si plusieurs servos ; masse commune obligatoire avec le Nano
- >
Code complet
// 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
}
Vérification attendue
Le bras du servo balaie régulièrement de 0° à 180° et revient, en douceur, sans jitter excessif ni bourdonnement permanent. Le moniteur série affiche la consigne d'angle croissante puis décroissante. À l'arrêt sur une position, le servo tient son couple sans trembler en boucle.
Erreurs fréquentes
- Alimenter plusieurs servos depuis le 5 V du Nano : les pics de courant font brownouter l'ATmega328P (reset en boucle) ; alimenter le servo séparément et relier les masses.
- Oublier la masse commune entre alimentation externe et Nano : le servo vibre dans tous les sens, position aléatoire.
- attach sur une broche occupée par SoftwareSerial ou un autre périphérique : conflit d'interruptions, signal PWM corrompu.
- Forcer mécaniquement au-delà de 180° : le potentiomètre interne du servo arrive en butée et le moteur chauffe.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
buzzer-melodie.inoArduinoservo-sweep.inoArduinoultrason-hcsr04.inoArduinolcd-i2c.inoArduinoeeprom-contre.inoArduinosommeil-watchdog.inoArduino