Descripción Módulo Joystick Arduino:
Este módulo está diseñado para llevar el control de joystick a su proyecto. Este es un módulo de palanca que se puede usar para proporcionar posiciones X e Y para uso potencial en la entrada de control. Además, como con los pulgares de la consola de juegos, este módulo incluye un interruptor de presión cuando se presiona el stick. Como un medio para agregar control a su proyecto, no hay un método más intuitivo que el que hoy en día nos ha acostumbrado a través de las consolas de juegos. Hay muchos tutoriales y guías disponibles para su uso con microcontroladores como el Ard. . Los pines se adaptan a los zócalos estándar con un paso de pines de 2,54 mm. Descripción del Pin GND 0V 5V 5V DC Posición VRx X Posición VRy Y SW cambiar estado.
⚙️ Características principales
Módulo de un solo joystick
34 x 27 x 35 mm (l x w x h)
Potenciómetro para movimientos X e Y
Conexión de 5 pines
Presiona el botón
Joystick de retorno de primavera
Palillo de goma
Rápido tiempo de activación
M3.5 27 / 20mm orificios de montaje separados
Diseñado para ser compatible con tomas estándar de 2.54 mm.
Tipos de controles joystick
Joystick analógico:
- Detecta movimiento en varias direcciones (generalmente en 360°).
- Puede medir la intensidad del movimiento, no solo la dirección.
- Muy común en controles de consolas (como los sticks de PlayStation o Xbox).
Joystick digital:
- Solo detecta direcciones fijas (arriba, abajo, izquierda, derecha, y diagonales).
- No mide la intensidad del movimiento.
- Más usado en controles antiguos o en ciertos juegos arcade.
Joystick industrial o profesional:
- Usado para manejar maquinaria, grúas, drones, o en simuladores de vuelo.
- Puede tener múltiples ejes y botones programables.
Partes comunes de un joystick
- Palanca (stick): Se mueve en distintas direcciones.
- Base: Parte fija donde se ancla la palanca.
- Botones: Para acciones adicionales (disparar, saltar, etc.).
- Sensores: Detectan la posición y el movimiento de la palanca.
Usos del joystick
- Videojuegos: Controlar personajes, vehículos, o cámaras.
- Simuladores de vuelo: Reproducen el control de un avión.
- Aplicaciones industriales: Controlar robots, grúas o maquinaria pesada.
- Accesibilidad: Como método alternativo de control para personas con movilidad reducida.
🕹️ ¿Cómo se usa un joystick en la programación?
Usar un joystick en la programación significa leer su entrada (movimiento y botones) desde el hardware y usarla para controlar algo, como un personaje en un juego, un robot, o una interfaz. Dependiendo del lenguaje y la plataforma (PC, microcontrolador, consola, etc.), se utilizan diferentes bibliotecas o APIs.
En videojuegos de PC (con Python y Pygame)
import pygame
pygame.init()
pygame.joystick.init()
# Detectar joystick
joystick = pygame.joystick.Joystick(0)
joystick.init()
# Leer entrada del joystick
for event in pygame.event.get():
if event.type == pygame.JOYAXISMOTION:
eje_x = joystick.get_axis(0)
eje_y = joystick.get_axis(1)
print(f”Movimiento: X={eje_x}, Y={eje_y}”)
if event.type == pygame.JOYBUTTONDOWN:
print(f”Botón {event.button} presionado”)
En microcontroladores (Arduino con un joystick analógico)
int pinX = A0;
int pinY = A1;
int buttonPin = 2;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
int x = analogRead(pinX);
int y = analogRead(pinY);
int button = digitalRead(buttonPin);
Serial.print(“X: “);
Serial.print(x);
Serial.print(” | Y: “);
Serial.print(y);
Serial.print(” | Botón: “);
Serial.println(button == LOW ? “Presionado” : “Libre”);
delay(200);
}
En Unity (C# para videojuegos)
void Update() {
float x = Input.GetAxis(“Horizontal”);
float y = Input.GetAxis(“Vertical”);
if (Input.GetButtonDown(“Fire1”)) {
Debug.Log(“Botón de acción presionado”);
}
transform.Translate(new Vector3(x, 0, y) * Time.deltaTime * speed);
}
📋 ¿Qué puedes hacer con un joystick en programación?
- Mover personajes o cámaras.
- Controlar drones o robots.
- Usarlo como interfaz personalizada (accesibilidad, simuladores).
- Juegos retro con controles físicos.
✅ Requisitos comunes
- Conocer qué tipo de joystick estás usando (analógico, digital, USB, etc.).
- Librerías para manejar entradas (como pygame, SDL, InputSystem, etc.).
- Configurar correctamente el hardware si es un proyecto físico (Arduino, Raspberry Pi).
🎮 ¿Qué es el Módulo Joystick para Arduino?
Es un joystick analógico de dos ejes (X e Y) con un botón tipo pulsador integrado al presionar el stick hacia abajo. Funciona como dos potenciómetros (uno para cada eje), proporcionando valores analógicos de posición.
🛠️ ¿Qué se puede hacer con este módulo?
- Controlar robots o vehículos RC.
- Crear interfaces de usuario interactivas.
- Controlar el movimiento de servomotores.
- Jugar con menús en pantallas LCD u OLED.
- Crear un mouse o gamepad personalizado.
✅Ejemplo con servos y motores
¡Perfecto! Aquí tienes un ejemplo completo de cómo usar un módulo joystick con Arduino para controlar un servo y un motor DC. Este es un proyecto clásico para aprender control básico de movimiento con entradas analógicas y digitales.
🎯 Objetivo del Proyecto
- Usar el eje X del joystick para controlar un servo motor (rotación de 0° a 180°).
- Usar el eje Y y el botón del joystick para controlar la velocidad y dirección de un motor DC (vía un puente H L298N).
- El botón del joystick puede servir como freno o apagado del motor.
🧰 Materiales necesarios
- Arduino UNO (u otro modelo)
- Módulo Joystick analógico
- Servo motor (ej: SG90 o MG996R)
- Módulo puente H L298N
- Motor DC (pequeño)
- Fuente de alimentación externa para el motor
- Cables y protoboard
⚙️ Conexiones
🔘 Joystick
Módulo Joystick | Arduino |
GND | GND |
+5V | 5V |
VRx | A0 |
VRy | A1 |
SW | D2 |
🔁 Servo
Servo | Arduino |
Señal (naranja) | D9 |
VCC (rojo) | 5V |
GND (marrón) | GND |
⚡ Motor DC (con L298N)
L298N | Arduino |
IN1 | D4 |
IN2 | D5 |
ENA | D3 (PWM) |
+12V (motor) | Fuente externa |
GND (motor y Arduino) | GND |
OUT1/OUT2 | Motor DC |
🧠 Código completo de ejemplo
#include <Servo.h>
const int VRx = A0;
const int VRy = A1;
const int SW = 2;
const int motorIN1 = 4;
const int motorIN2 = 5;
const int motorENA = 3;
const int servoPin = 9;
Servo myServo;
void setup() {
Serial.begin(9600);
pinMode(SW, INPUT_PULLUP);
pinMode(motorIN1, OUTPUT);
pinMode(motorIN2, OUTPUT);
pinMode(motorENA, OUTPUT);
myServo.attach(servoPin);
}
void loop() {
int xValue = analogRead(VRx);
int yValue = analogRead(VRy);
int buttonState = digitalRead(SW);
// === Control de Servo ===
int angle = map(xValue, 0, 1023, 0, 180);
myServo.write(angle);
// === Control de Motor DC ===
int speed = map(yValue, 0, 1023, -255, 255);
if (buttonState == LOW) {
// Botón presionado → detener motor
analogWrite(motorENA, 0);
digitalWrite(motorIN1, LOW);
digitalWrite(motorIN2, LOW);
} else {
if (speed > 10) {
// Adelante
analogWrite(motorENA, speed);
digitalWrite(motorIN1, HIGH);
digitalWrite(motorIN2, LOW);
} else if (speed < -10) {
// Atrás
analogWrite(motorENA, -speed);
digitalWrite(motorIN1, LOW);
digitalWrite(motorIN2, HIGH);
} else {
// Zona muerta: parar
analogWrite(motorENA, 0);
digitalWrite(motorIN1, LOW);
digitalWrite(motorIN2, LOW);
}
}
delay(100);
}
📌 ¿Qué hace este código?
- El servo gira en función del eje X del joystick (izquierda/derecha).
- El motor DC acelera hacia adelante o atrás con el eje Y (arriba/abajo).
- Si se presiona el botón del joystick, se frena el motor.
🚀 ¿Qué más puedes hacer?
- Agregar un segundo motor para control de un robot.
- Usar el botón para cambiar de modo (servo/motor).
- Añadir una pantalla LCD u OLED para mostrar el ángulo o la velocidad.