🛠 Piloter un micro-servo avec le joystick
Objectifs
Sortir du tout-embarqué : l'Esplora ne laisse que très peu de broches libres (A0–A6, A11, D5, D6, D9, D10 et D13 sont consommées par le matériel interne), et les commentaires de la bibliothèque n'exposent officiellement que D3 et D11 comme sorties externes. Ce tutoriel utilise D3 pour commander un micro-servo d'angle avec le joystick analogique — le geste « manette » version mécanique.
Matériel
- Arduino Esplora + câble micro-USB.
- 1 micro-servo type SG90 (attention : ne pas dépasser le budget courant du port USB, protégé par un polyfuse ~500 mA ; un seul SG90 léger passe).
- 3 fils mâle-femelle : signal → D3, +5 V, GND.
- Bibliothèques Esplora et Servo.
Code complet
/* Joystick -> servo sur la sortie externe D3 (seules D3 et D11 sont
documentees comme sorties externes sur Esplora). */
#include <Esplora.h>
#include <Servo.h>
const byte BROCHE_SERVO = 3; // sortie externe documentee
Servo moteur;
void setup {
moteur.attach(BROCHE_SERVO); // la lib Servo utilise un timer de l'ATmega32u4
moteur.write(90); // position neutre
Serial.begin(9600);
}
void loop {
int x = Esplora.readJoystickX; // -512 (gauche) .. 511 (droite)
// Mise a l'echelle vers 0..180 degres avec zone morte centrale
if (abs(x) < 20) x = 0;
int angle = map(x, -512, 511, 0, 180);
moteur.write(angle);
Serial.print("joyX="); Serial.print(x);
Serial.print(" angle="); Serial.println(angle);
// Bonus : le buzzer (D6) bipe proportionnellement a l'angle
if (Esplora.readButton(SWITCH_UP) == PRESSED) Esplora.tone(200 + angle * 4);
else Esplora.noTone;
delay(20);
}
Vérification attendue
Poussez le joystick à gauche : le servo tourne vers 0°. À droite : 180°. Au centre (zone morte de ±20), il maintient 90° sans bourdonner. Le moniteur série confirme la correspondance joystick/angle. Appuyez sur le bouton haut : le buzzer émet un son dont la hauteur suit l'angle.
Erreurs fréquentes
- Brancher sur une broche occupée : D5/D6/D9/D10 (RVB + buzzer) et D13 (LED L) sont prises ; A0–A6/A11 servent au multiplexeur et à l'accéléromètre. N'utilisez que D3 ou D11.
- Servo qui grésille au centre : sans zone morte, le bruit du joystick (±10) fait vibrer le servo ; le
if (abs(x) < 20) x = 0;est indispensable. - Alimentation par le rail 5 V trop gourmand : plusieurs servos ou un gros modèle fait chuter l'USB et déclenche le polyfuse ; alimentez-les par une source externe commune avec la masse reliée à celle de l'Esplora.
- Oublier la zone 0/180 : certains servo-constructeurs admettent 10–170 ; si le servo cale en butée, réduisez la plage du
map. - Conflit de timer : la bibliothèque Servo et
tonepartagent des timers de l'ATmega32u4 ; sur cette carte les deux fonctionnent ensemble, mais si vous ajoutez des bibliothèques PWM supplémentaires, vérifiez les conflits de timer déclarés par chacune.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
joystick-couleur.inoArduinojeu-boutons.inoArduinoslider-luminosite.inoArduinothermometre-couleur.inoArduinosonometre.inoArduinoaccelerometre-tilt.inoArduino