🛠 Piloter un micro-servo avec le joystick

Arduino Esplora — Fiche de carte · intermediaire · Schéma : IMG-esplora-intermediaire-3-esplora-servo-joystick.svg — Esplora vue de dessus, joystick à gauche, câble vers un micro-servo branché sur la sortie externe D3 avec alimentation et masse annotées.

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

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

  1. 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.
  2. 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.
  3. 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.
  4. Oublier la zone 0/180 : certains servo-constructeurs admettent 10–170 ; si le servo cale en butée, réduisez la plage du map.
  5. Conflit de timer : la bibliothèque Servo et tone partagent 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

← Retour à la fiche 🛠 Tous les tutoriels