🛠 Piloter un micro-servo avec le joystick

Arduino Esplora — Ficha de placa · 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.

Objetivos

Salir de todo lo integrado: la Esplora deja muy pocos pines libres (A0–A6, A11, D5, D6, D9, D10 y D13 están consumidos por el hardware interno), y los comentarios de la biblioteca exponen oficialmente solo D3 y D11 como salidas externas. Este tutorial utiliza D3 para controlar un micro-servo de ángulo con el joystick analógico — el gesto de «mando» en versión mecánica.

Material

Código completo

/* 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);
}

Verificación esperada

Empuje el joystick hacia la izquierda: el servo gira hacia 0°. Hacia la derecha: 180°. En el centro (zona muerta de ±20), mantiene 90° sin zumbar. El monitor serie confirma la correspondencia joystick/ángulo. Pulse el botón superior: el zumbador emite un sonido cuya altura sigue el ángulo.

Errores frecuentes

  1. Conectar en un pin ocupado: D5/D6/D9/D10 (RGB + zumbador) y D13 (LED L) están tomados; A0–A6/A11 sirven para el multiplexor y el acelerómetro. Use solo D3 o D11.
  2. Servo que zumba en el centro: sin zona muerta, el ruido del joystick (±10) hace vibrar el servo; el if (abs(x) < 20) x = 0; es indispensable.
  3. Alimentación por el riel de 5 V demasiado exigente: varios servos o un modelo grande hacen caer el USB y disparan el polyfuse; aliméntelos con una fuente externa común con la masa conectada a la de la Esplora.
  4. Olvidar la zona 0/180: algunos fabricantes de servos admiten 10–170; si el servo se atasca en el tope, reduzca el rango del map.
  5. Conflicto de temporizador: la biblioteca Servo y tone comparten temporizadores del ATmega32u4; en esta placa ambos funcionan juntos, pero si añade bibliotecas PWM adicionales, verifique los conflictos de temporizador declarados por cada una.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales