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
- Manual de Ensamble
- Datasheet
- Dimensiones
- Pinout
INFORMACIÓN ADICIONAL
Conexiones
A continuación se muestra la conexión del sistema entre los dispositivos involucrados; Arduino UNO R3 conectado al porta baterías 18650 y la conexión con el shield de expansión para poder realizar la conexión de los cuatro motores y el receptor PS2.
Código
Con el siguiente programa podrás realiza el manejo del chasis con las siguientes funcionalidades: adelante, atrás, derecha , izquierda, giro a la derecha-izquierda, todo a través del control PS2. En el código encontraras unas líneas comentadas con la intención de dejar opcional habilitar la lectura de movimientos por medio del joystick PS2.
#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.