🛠 Asservir un servo moteur avec un potentiomètre (PWM)
Objectifs
Commander un servo moteur standard (signal de largeur d'impulsion) depuis la Leonardo à l'aide de la bibliothèque Servo, piloté par un potentiomètre. Vous repérerez les 7 broches PWM de la carte (3, 5, 6, 9, 10, 11, 13, en PWM 8 bits via analogWrite) — la bibliothèque Servo génère de son côté les impulsions par timers matériels — et surtout les règles d'alimentation d'un servo.
Matériel
- 1 Arduino Leonardo + câble micro-USB
- 1 micro servo (type SG90/MG90S)
- 1 potentiomètre sur A0 (5V/GND)
- Alimentation externe 5-6 V pour le servo si plusieurs servos ou charge ; jamais depuis la broche 3V3 (50 mA maximum)
Code complet
#include <Servo.h>
Servo monServo;
const uint8_t POT_PIN = A0;
const uint8_t SERVO_PIN = 9; // broche PWM (3, 5, 6, 9, 10, 11 ou 13)
void setup {
monServo.attach(SERVO_PIN); // impulse ~50 Hz, 1 a 2 ms
}
void loop {
int brut = analogRead(POT_PIN); // 0..1023
int angle = map(brut, 0, 1023, 0, 180); // 0..180 degres
monServo.write(angle);
delay(15);
}
Vérification attendue
Le bras du servo suit le potentiomètre entre ses deux butées mécaniques (~0° et ~180°). Le moteur bourdonne légèrement en position : normal pour un servo standard. Alimentez le servo depuis le 5V de la carte pour un petit SG90 unique ; dès qu'il chauffe ou que la carte redémarre par manque de courant, passez à une alimentation externe avec GND commun.
Erreurs fréquentes
- Alimenter le servo depuis 3V3 : cette broche est limitée à 50 mA, un servo en pointe en demande bien plus ; la carte se réinitialise.
- Masse non commune : sans GND relié entre alimentation externe et Leonardo, le servo vibre ou ne répond pas.
- Courant par broche : les valeurs officielles divergent (40 mA sur la page boutique contre 10 mA dans tech-specs.yml ; vérifiez la fiche ATmega32u4 avant de concevoir) — ne tirez jamais un servo directement d'une broche numérique.
- Oublier que la bibliothèque Servo occupe des timers : sur ATmega32u4, certains canaux PWM (
analogWritesur 3/5/6/9/10/11/13) et autres bibliothèques peuvent entrer en conflit de timer. - Broche non PWM pour un
analogWrite: les LED clignotent par tout-ou-rien au lieu de varier ; seules 3/5/6/9/10/11/13 sont PWM.
Autres tutoriels pour cette carte
- Faire clignoter la LED intégrée (broche 13)
- Bouton et console série : Serial (USB) vs Serial1 (broches 0/1)
- Lire un capteur analogique : potentiomètre et ADC 10 bits
- Clavier USB : taper du texte avec la bibliothèque Keyboard
- Souris USB : déplacer le curseur avec la bibliothèque Mouse
- Programmer aux registres : interruption Timer/Counter1
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino