Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Componentes y materiales

Componente Cantidad Notas
Arduino UNO 1
Controlador de motores dual H-Bridge L298 (SparkFun) 1
Kit robot tanque DIY 1 Incluye 2 motores DC, engranajes, orugas, tornillos, tuercas
Mando inalámbrico Sony PS2 1 Con receptor
Baterías 18650 3.7V 3 En serie para 11.1V (motores 12V)
Soporte 3S para baterías 18650 1
Cargador de baterías 18650 1
Cables jumper Varios 6 macho-hembra (señales), 2 macho-macho (5V/GND)
Cable USB tipo B 1 Para subir código
Plancha de soldar y estaño 1 Los motores ya traen cables, pero pueden romperse
Lámina de goma EVA 1 Material no conductor para aislar placas del chasis metálico
Cinta de doble cara 1 Para fijar goma EVA y módulo H-Bridge
Tijeras 1 Para cortar rectángulos de goma EVA

Aplicaciones y servicios online

Sobre el proyecto

En este tutorial te mostraré cómo usar un joystick inalámbrico de PlayStation 2 (PS2) para pilotar un tanque robótico. Se utilizó una placa Arduino Uno como núcleo del proyecto. Recibe comandos del mando inalámbrico y establece la velocidad de los motores. Otras placas de desarrollo también podrían usarse (NodeMCU, Firebeetle, etc.), y los principios presentados aquí pueden aplicarse a otros modelos de robots y gadgets.

Previamente diseñé un tanque robótico controlado por Blynk. Se conecta a una red Wi-Fi y recibe comandos del servidor Blynk. Se usó un smartphone con la app Blynk como mando a distancia, con diferentes métodos de entrada: botones, barras deslizantes e incluso el acelerómetro del smartphone. Más info: enlace

También hice experimentos con comandos de voz. Útil para controlar un robot remotamente sin usar las manos, o hacerlo accesible para personas con movilidad reducida. Se usó un kit robótico DIY junto con Adafruit.io, IFTTT y Arduino IDE. Instrucciones completas: enlace

Puedes usar diferentes kits o incluso diseñar tus propios robots con materiales simples, sin necesidad de impresoras 3D ni corte láser. Ejemplo: enlace

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Paso 1: Herramientas y materiales

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Ver tabla de componentes arriba. Los enlaces son solo sugerencias; siéntete libre de buscar en tu tienda local u online favorita.

Paso 2: Montaje del robot

La primera parte fue ensamblar la estructura del robot. En proyectos previos desarrollé mi propia estructura con materiales accesibles (sin herramientas complejas). Ver: enlace

Luego probé un kit robótico de tienda online: enlace al chasis. Lo usé en otros dos tutoriales. Al principio parecía complejo, ¡pero el kit me sorprendió! Todas las piezas son de buena calidad e incluyen repuestos (tornillos extra), lo cual es excelente para principiantes. Incluye todas las herramientas necesarias (llaves Allen y destornillador).

Como punto negativo: falta de documentación. El manual (hoja de cálculo en chino) no es muy amigable y hay pocos tutoriales online para este tanque. Por eso documenté el proceso de montaje en el video. Ojo: la base es de aluminio, lo que puede causar cortocircuitos si los pines de las placas tocan el chasis. Usé lámina de goma EVA entre placas y chasis para evitarlo.

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Paso 3: Cableado del circuito

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

El pack de tres baterías 18650 se instaló en la parte trasera. Proporciona 11.1V (3 × 3.7V), suficiente para los motores DC de 12V.

Se usó un H-Bridge dual L298N para controlar los motores. Recibe señales de 5V del Arduino y entrega voltajes mayores a los motores. Permite girar en ambas direcciones según la combinación de señales de entrada.

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Lista de conexiones de pines:

Arduino Uno (entradas/salidas):

H-Bridge (entradas/salidas):

Receptor PS2:

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Paso 4: Configurar Arduino IDE

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
  1. Descargar e instalar Arduino IDE última versión desde arduino.cc
  2. Añadir librerías: Usamos librería Arduino PS2X. Descargar en GitHub, descomprimir y copiar carpetas a libraries/tools de Arduino IDE.

Paso 5: Librería PS2 Wireless Controller explicada

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Un mando PS2 inalámbrico es una gran herramienta para robótica: 20 botones digitales y 2 joysticks analógicos. Usé la librería PS2X de Bill Porter (GitHub) para interconectar el mando con Arduino Uno.

Define una clase PS2X con métodos para leer entradas analógicas y digitales. Se crea un objeto:

PS2X ps2x;

Y se vincula a pines I/O de Arduino:

error = ps2x.config_gamepad(clock, command, attention, data, pressure?, rumble?);

Funciones principales:

Mapeo de botones:

Direccionales (D-pad): PSB_PAD_UP, PSB_PAD_DOWN, PSB_PAD_LEFT, PSB_PAD_RIGHT

Botones de acción: PSB_GREEN/PSB_TRIANGLE (triángulo verde), PSB_RED/PSB_CIRCLE (círculo rojo), PSB_BLUE/PSB_CROSS (X azul), PSB_PINK/PSB_SQUARE (cuadrado rosa)

Gatillos: PSB_L1, PSB_R1, PSB_L2, PSB_R2

Joysticks (pulsación): PSB_L3, PSB_R3

Menú: PSB_SELECT, PSB_START

Ejes analógicos:

Paso 6: Sketch #1 - Botones D-pad

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Emula controles de videojuegos clásicos (SEGA, SNES). Botones direccionales binarios (on/off) para movimientos básicos: adelante, atrás, girar izquierda/derecha. Motores a velocidad fija (máxima). Al girar, motores giran en direcciones opuestas para rotar sobre su eje.

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Código Arduino (extracto clave):

#include <PS2X_lib.h>
#define ENA 3
#define MOTORA_1 4
#define MOTORA_2 5
#define MOTORB_1 8
#define MOTORB_2 7
#define ENB 6

PS2X ps2x;
int error = 0;
byte type = 0;
byte vibrate = 0;

void setup() {
  pinMode(ENA, OUTPUT); pinMode(MOTORA_1, OUTPUT); pinMode(MOTORA_2, OUTPUT);
  pinMode(ENB, OUTPUT); pinMode(MOTORB_1, OUTPUT); pinMode(MOTORB_2, OUTPUT);
  digitalWrite(ENA,0); digitalWrite(ENB,0);
  Serial.begin(57600);
  error = ps2x.config_gamepad(13,11,10,12, true, true);
  // ... manejo de errores y tipo de mando ...
}

void loop() {
  if(error == 1) return;
  ps2x.read_gamepad(false, vibrate);
  
  if(ps2x.Button(PSB_PAD_UP)) { // ADELANTE
    digitalWrite(MOTORA_1,LOW); digitalWrite(MOTORA_2,HIGH);
    digitalWrite(MOTORB_1,HIGH); digitalWrite(MOTORB_2,LOW);
    analogWrite(ENB, 1023); analogWrite(ENA, 1023);
  }
  if(ps2x.Button(PSB_PAD_RIGHT)) { // DERECHA
    digitalWrite(MOTORA_1,HIGH); digitalWrite(MOTORA_2,LOW);
    digitalWrite(MOTORB_1,HIGH); digitalWrite(MOTORB_2,LOW);
    analogWrite(ENB, 1023); analogWrite(ENA, 1023);
  }
  if(ps2x.Button(PSB_PAD_LEFT)) { // IZQUIERDA
    digitalWrite(MOTORA_1,LOW); digitalWrite(MOTORA_2,HIGH);
    digitalWrite(MOTORB_1,LOW); digitalWrite(MOTORB_2,HIGH);
    analogWrite(ENB, 1023); analogWrite(ENA, 1023);
  }
  if(ps2x.Button(PSB_PAD_DOWN)) { // ATRÁS
    digitalWrite(MOTORA_1,HIGH); digitalWrite(MOTORA_2,LOW);
    digitalWrite(MOTORB_1,LOW); digitalWrite(MOTORB_2,HIGH);
    analogWrite(ENB, 1023); analogWrite(ENA, 1023);
  }
  if (!ps2x.Button(PSB_PAD_DOWN) && !ps2x.Button(PSB_PAD_UP) && 
      !ps2x.Button(PSB_PAD_RIGHT) && !ps2x.Button(PSB_PAD_LEFT)) {
    analogWrite(ENB, 0); analogWrite(ENA, 0);
  }
  delay(50);
}

Paso 7: Sketch #2 - Joystick analógico + botones L2/R2

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Configuración estilo juegos de carreras (Mario Kart): joystick analógico izquierdo para dirección, botones L2/R2 como acelerador/freno-reversa. R2 = adelante, L2 = reversa, dirección según eje X joystick izquierdo.

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Lógica principal:

int nJoyL = ps2x.Analog(PSS_LX); // leer joystick izq eje X
nJoyL = map(nJoyL, 0, 255, 1023, -1023);
int motor_right_speed = 1023;
int motor_left_speed = 1023;
if (nJoyL < 0) motor_right_speed += nJoyL;
if (nJoyL > 0) motor_left_speed -= nJoyL;

if(ps2x.Button(PSB_R2)) { // ADELANTE
  digitalWrite(MOTORA_1,LOW); digitalWrite(MOTORA_2,HIGH);
  digitalWrite(MOTORB_1,HIGH); digitalWrite(MOTORB_2,LOW);
  analogWrite(ENA, motor_right_speed); analogWrite(ENB, motor_left_speed);
}
if(ps2x.Button(PSB_L2)) { // REVERSA
  digitalWrite(MOTORA_1,HIGH); digitalWrite(MOTORA_2,LOW);
  digitalWrite(MOTORB_1,LOW); digitalWrite(MOTORB_2,HIGH);
  analogWrite(ENA, motor_right_speed); analogWrite(ENB, motor_left_speed);
}
if(!ps2x.Button(PSB_L2) && !ps2x.Button(PSB_R2)) {
  analogWrite(ENA, 0); analogWrite(ENB, 0);
}

Paso 8: Sketch #3 - Dos joysticks analógicos (tracción diferencial)

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Mi forma favorita: ambos joysticks controlan cada oruga independientemente. Izquierdo → oruga izquierda, derecho → oruga derecha. Sensación de controlar máquina real.

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Lógica principal:

int nJoyL = ps2x.Analog(PSS_LY); // joystick izq eje Y
int nJoyR = ps2x.Analog(PSS_RY); // joystick der eje Y
nJoyL = map(nJoyL, 0, 255, 1023, -1023);
nJoyR = map(nJoyR, 0, 255, -1023, 1023);

// Motor A (derecho)
if(nJoyR > 50) { digitalWrite(MOTORA_1,HIGH); digitalWrite(MOTORA_2,LOW); analogWrite(ENA, 1023); }
if(nJoyR < -50) { digitalWrite(MOTORA_1,LOW); digitalWrite(MOTORA_2,HIGH); analogWrite(ENA, 1023); }
if(abs(nJoyR) < 50) analogWrite(ENA, 0);

// Motor B (izquierdo)
if(nJoyL > 50) { digitalWrite(MOTORB_1,HIGH); digitalWrite(MOTORB_2,LOW); analogWrite(ENB, 1023); }
if(nJoyL < -50) { digitalWrite(MOTORB_1,LOW); digitalWrite(MOTORB_2,HIGH); analogWrite(ENB, 1023); }
if(abs(nJoyL) < 50) analogWrite(ENB, 0);

Paso 9: Sketch #4 - Solo joystick analógico izquierdo

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Un solo joystick controla todo. Óptimo en recursos (botones libres para otras acciones), pero más difícil de dominar. Velocidad de cada oruga depende de ejes X e Y. Código derivado de: impulseadventure.com

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Paso 10: Consideraciones finales

Puse mucho esfuerzo para que sea claro y educativo. Si te gustó, dale a "me gusta" y compártelo. Tu apoyo es muy importante.

Otros tutoriales de robótica:

Código completo

Los 4 sketches completos están disponibles en la sección de código del proyecto original.

Esquemas

Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2
Tanque Robot Arduino Controlado por Joystick Inalámbrico PS2

Proceso de manufactura

  1. Construya un robot con streaming de vídeo controlado por Internet con Arduino y Raspberry Pi
  2. Unopad: Controlador MIDI Arduino para Ableton Live sin complicaciones
  3. Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04
  4. Controla tu Roomba Create 2 con Arduino y Android: Guía Completa
  5. Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
  6. Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
  7. Construye un volante joystick personalizado con Arduino para gaming
  8. Crea un Robot de Batalla Controlado a Distancia con un Mando PS2
  9. Controla tu brazo robótico Arduino con app Android dedicada
  10. Robot comedero con Arduino Nano: Guía paso a paso
  11. Robot de 4 Ruedas con Arduino Controlado por App Dabble