Ir al contenido
← Volver a Formación Arduino Intermedio

18. Control de servo con joystick

Mueve un servo girando un joystick. La base del control manual de robots y mecanismos.

Dificultad: Intermedio · Tiempo: 45 min · Cerebro: Arduino Uno

🧰 Lista de materiales

Arduino Uno R3 (ATmega328P)
Arduino Uno R3 (ATmega328P)
Lee el joystick, manda el servo
Joystick analógico doble eje HW-504
Joystick analógico doble eje HW-504
Control de posición (2 ejes + botón)
Microservo SG90 9 g
Microservo SG90 9 g
Se mueve según el eje X
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

A leer un joystick analógico (dos potenciómetros + botón) y traducir su posición en ángulo de servo. Es el ladrillo del control manual: brazos, torretas, cámaras.

📚 Teoría: el joystick por dentro

Un joystick HW-504 son dos potenciómetros perpendiculares (ejes X e Y) y un pulsador al presionarlo. En reposo, cada eje da ~512 (centro de 0–1023). Mapeamos ese rango al ángulo del servo (0–180°).

🔌 Conexiones

JoystickPin
VCC / GND5 V / GND
VRxA0
VRyA1
SW (botón)D2
Servo señalD9 (~)
Servo VCC/GND5 V / GND

💻 Código completo

// Servo controlado por el eje X de un joystick
#include 

Servo servo;
const int VRX = A0;
const int SW  = 2;

void setup() {
  servo.attach(9);
  pinMode(SW, INPUT_PULLUP);
}

void loop() {
  int x = analogRead(VRX);              // 0..1023
  int angulo = map(x, 0, 1023, 0, 180); // a grados
  servo.write(angulo);

  if (digitalRead(SW) == LOW) {
    servo.write(90);   // centra al pulsar
    delay(300);
  }
  delay(15);   // da tiempo al servo
}
💡 ConsejoSi el servo «vibra» en reposo, añade una zona muerta alrededor del centro (ignora valores entre 480 y 540).

🛠️ Montaje paso a paso

  1. Cablea el joystick (VCC, GND, VRx→A0, VRy→A1, SW→D2).
  2. Conecta el servo (señal→D9, alimentación 5 V/GND).
  3. Sube el sketch y mueve el joystick en horizontal.
  4. Pulsa el joystick para centrar.

🧩 Resolución de problemas

SíntomaCausaSolución
Servo al revésEje invertidoCambia map(...,180,0)
Tiembla paradoRuido analógicoAñade zona muerta central
Se reinicia el ArduinoServo tira mucha corrienteAliméntalo aparte

🚀 Para ir más lejos

  • Usa el eje Y para un segundo servo (proyecto 19, pan-tilt).
  • Sustituye el SG90 por el MG90S de engranaje metálico para más par.
← Volver a Formación Arduino