INFORMACIÓN
El Kit Chasis de Metal MC300 con Llantas Omnidireccional + Joystick ofrece todo para la construcción de un carro o robot móvil con la movilidad en cualquier dirección por control inalámbrico y programación en Arduino; ya que incluye:
Chasis
|
Nota: No incluye baterías 18650 |
Bolsa de Tornillos
|
Electrónica
|
El Kit Chasis de Metal MC300 con Llantas Omnidireccional + Joystick es ideal para aplicaciones que requieren movimientos complejos y precisos como,: competiciones de robótica, investigación y desarrollo de prototipos o educación en tecnología
permite una fácil integración de los motores, controladores y sensores, lo que lo convierte en una opción versátil tanto para aficionados como para profesionales en robótica.
Las llantas omnidireccionales incluidas en el Kit Chasis de Metal MC300 permiten al robot moverse en cualquier dirección sin necesidad de girar sobre su eje, ofreciendo una maniobrabilidad excepcional. El joystick proporciona un control intuitivo y preciso del movimiento del robot, permitiendo al usuario dirigirlo con facilidad.
ESPECIFICACIONES Y CARACTERÍSTICAS
Chasis
|
Motor
|
Llantas
|
DOCUMENTACIÓN Y RECURSOS
Datasheet
INFORMACIÓN ADICIONAL
Instrucciones para el manejo Robot Omnidireccional con Control PS2
Conexiones
A continuación se detallan las conexiones entre los dispositivos involucrados:
- Arduino UNO R3: Conectado al Shield y al porta baterías 18650 para suministrar energía y control.
- Shield de expansión: Se utiliza para realizar las conexiones de los cuatro motores y el receptor PS2, asegurando que todo funcione correctamente.
Código
Con el siguiente programa podrás controlar el movimiento de tu robot mediante el control PS2, con las siguientes funcionalidades:
- Adelante
- Atrás
- Derecha
- Izquierda
- Giro a la derecha/izquierda
Para que este código funcione correctamente, necesitas descargar e importar la siguiente librería en tu entorno de desarrollo Arduino IDE:
- Librería: Librería PS2X_lib.h
En el código, encontrarás algunas líneas comentadas. Estas líneas permiten habilitar la opción de leer los movimientos a través del joystick PS2, si deseas agregar esta funcionalidad.
#include "PS2X_lib.h" PS2X ps2x; // create PS2 Controller Class //en este momento, la biblioteca NO admite controladores conectables en caliente, es decir //siempre debes reiniciar tu Arduino después de conectar el controlador, //o llamar a config_gamepad(pins) nuevamente después de conectar el controlador. int error = 0; byte type = 0; byte vibrate = 0; // U1 Driver // Motor 1 Izquierda #define U1AN1 8 #define U1AN2 9 // Motor 2 Derecha #define U1BN1 7 #define U1BN2 6 // U2 Driver // Motor 3 IZquierda #define U2AN1 4 #define U2AN2 5 // Motor 4 #define U2BN1 2 #define U2BN2 3 // FRENTE // U2BN1 U2AN1 // U2BN2 U2AN2 // U1BN1 U1AN1 // U1BN2 U1AN2 // TRASERA void adelante() { digitalWrite(U1AN1,HIGH); digitalWrite(U1AN2,LOW); digitalWrite(U1BN1,HIGH); digitalWrite(U1BN2,LOW); digitalWrite(U2AN1,HIGH); digitalWrite(U2AN2,LOW); digitalWrite(U2BN1,HIGH); digitalWrite(U2BN2,LOW); } void atras() { digitalWrite(U1AN1,LOW); digitalWrite(U1AN2,HIGH); digitalWrite(U1BN1,LOW); digitalWrite(U1BN2,HIGH); digitalWrite(U2AN1,LOW); digitalWrite(U2AN2,HIGH); digitalWrite(U2BN1,LOW); digitalWrite(U2BN2,HIGH); } void der() { digitalWrite(U1AN1,HIGH); digitalWrite(U1AN2,LOW); digitalWrite(U1BN1,LOW); digitalWrite(U1BN2,HIGH); digitalWrite(U2AN1,LOW); digitalWrite(U2AN2,HIGH); digitalWrite(U2BN1,HIGH); digitalWrite(U2BN2,LOW); } void izq() { digitalWrite(U1AN1,LOW); digitalWrite(U1AN2,HIGH); digitalWrite(U1BN1,HIGH); digitalWrite(U1BN2,LOW); digitalWrite(U2AN1,HIGH); digitalWrite(U2AN2,LOW); digitalWrite(U2BN1,LOW); digitalWrite(U2BN2,HIGH); } void giro_izq() { digitalWrite(U1AN1,LOW); digitalWrite(U1AN2,HIGH); digitalWrite(U1BN1,LOW); digitalWrite(U1BN2,HIGH); digitalWrite(U2AN1,HIGH); digitalWrite(U2AN2,LOW); digitalWrite(U2BN1,LOW); digitalWrite(U2BN2,HIGH); } void giro_der() { digitalWrite(U1AN1,LOW); digitalWrite(U1AN2,HIGH); digitalWrite(U1BN1,HIGH); digitalWrite(U1BN2,LOW); digitalWrite(U2AN1,LOW); digitalWrite(U2AN2,HIGH); digitalWrite(U2BN1,HIGH); digitalWrite(U2BN2,LOW); } void alto() { digitalWrite(U1AN1,LOW); digitalWrite(U1AN2,LOW); digitalWrite(U1BN1,LOW); digitalWrite(U1BN2,LOW); digitalWrite(U2AN1,LOW); digitalWrite(U2AN2,LOW); digitalWrite(U2BN1,LOW); digitalWrite(U2BN2,LOW); } void setup(){ pinMode(U2AN1, OUTPUT); pinMode(U2AN2, OUTPUT); pinMode(U2BN1, OUTPUT); pinMode(U2BN2, OUTPUT); pinMode(U1AN1, OUTPUT); pinMode(U1AN2, OUTPUT); pinMode(U1BN1, OUTPUT); pinMode(U1BN2, OUTPUT); Serial.begin(115200); error = ps2x.config_gamepad(12,11,10,13, true, false); // GamePad(clock, command, attention, data, Pressures?, Rumble?) if(error == 0){ Serial.println("Controlador encontrado, configurado exitosamente"); Serial.println("Pruebe todos los botones, X hará vibrar el controlador más rápido a medida que presione más fuerte;"); Serial.println("Si mantienes presionado L1 o R1, se imprimirán los valores del joystick analógico."); } else if(error == 1) Serial.println("No se encontró ningún controlador, verifique el cableado, consulte el archivo readme.txt para habilitar la depuración"); else if(error == 2) Serial.println("Controlador encontrado pero no acepta comandos. consulte readme.txt para habilitar la depuración. "); else if(error == 3) Serial.println("Es posible que el controlador se niegue a ingresar al modo de presiones y no lo admita."); type = ps2x.readType(); switch(type) { case 0: Serial.println("Tipo de controlador desconocido"); break; case 1: Serial.println("Controlador DualShock encontrado"); break; case 2: Serial.println("Controlador GuitarHero encontrado"); break; default: break; } alto(); } void loop(){ /* Debes leer Gamepad para obtener nuevos valores Leer GamePad y establecer valores de vibración ps2x.read_gamepad (encendido/apagado de motor pequeño, potencia de motor más grande de 0 a 255) si no habilita el ruido, use ps2x.read_gamepad(); sin valores deberías llamar a esto al menos una vez por segundo */ ps2x.read_gamepad(true, vibrate); //lea el controlador y configure el motor grande para que gire a velocidad de "vibración" if(ps2x.Button(PSB_START)) //será VERDADERO siempre que se presione el botón { Serial.println("Start presionado"); } if(ps2x.Button(PSB_SELECT)) { Serial.println("Select presionado"); } if(ps2x.Button(PSB_PAD_UP)) { //será VERDADERO siempre que se presione el botón Serial.println("Arriba presionado"); adelante(); } if(ps2x.Button(PSB_PAD_RIGHT)){ Serial.println("Derecha presionado"); der(); } if(ps2x.Button(PSB_PAD_LEFT)){ Serial.println("Izquierda presionado"); izq(); } if(ps2x.Button(PSB_PAD_DOWN)){ Serial.println("Abajo presionado"); atras(); } if (ps2x.NewButtonState()) //será VERDADERO si algún botón cambia de estado (encendido a apagado o apagado a encendido) { if(ps2x.Button(PSB_L3)) Serial.println("L3 presionado"); if(ps2x.Button(PSB_R3)) Serial.println("R3 presionado"); if(ps2x.Button(PSB_L2)) Serial.println("L2 presionado"); alto(); if(ps2x.Button(PSB_R2)) Serial.println("R2 presionado"); } if(ps2x.ButtonPressed(PSB_RED)) { Serial.println("Círculo recién presionado"); giro_der(); } if(ps2x.ButtonReleased(PSB_RED)) { Serial.println("Círculo recién lanzado"); } if(ps2x.ButtonPressed(PSB_PINK)) { Serial.println("Cuadrado presionado "); giro_izq(); } if(ps2x.ButtonReleased(PSB_PINK)) { Serial.println("Cuadrado recién lanzado"); } if(ps2x.ButtonPressed(PSB_GREEN)) { Serial.println("Triangulo presionado"); } //Puedes habilitar este para hacer lectura de los jostick // if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // Serial.print("Stick Values:"); // Serial.print(ps2x.Analog(PSS_LY), DEC); // LY // Serial.print(","); // Serial.print(ps2x.Analog(PSS_LX), DEC); // LX // Serial.print(","); // Serial.print(ps2x.Analog(PSS_RY), DEC); // RY // Serial.print(","); // Serial.println(ps2x.Analog(PSS_RX), DEC); // RX delay(500); }
Valoraciones
No hay valoraciones aún.