Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Mecanum Robot: un proyecto que quería construir desde que lo vi en el blog de mecatrónica de Dejan: howtomechatronics.com
Dejan realmente hizo un buen trabajo cubriendo todos los aspectos del hardware, la impresión 3D, la electrónica, el código y una aplicación para Android (inventor de la aplicación del MIT)
Este es un gran proyecto de overhoul que actualiza todas las habilidades de un creador.
Tenía pocos cambios que hacer en los proyectos.
No quería usar el PCB hecho a medida que usaba, sino un viejo escudo GRBL que tenía en casa.
Quería usar BlueTooth
Entonces:
Suministros
Escudo Arduino Uno + GRBL
Motores paso a paso
Módulo HC-06 BlueTooth
Batería de 12V Lipo
Paso 1: hardware
Imprimí las ruedas y las ensamblé como aquí:
4 motores paso a paso conectados al chasis (en mi caso, un cajón sin usar boca abajo)
Enrute los cables a la parte superior del robot.
Paso 2: Electrónica
Usé mi módulo HC-06 BT, La parte más difícil fue configurar el escudo GRBL para que funcione con 4 motores paso a paso, ya que no hay una buena guía para eso, Es necesario colocar puentes como se puede ver en la imagen adjunta, para que la salida "Herramienta" del escudo también controle un motor paso a paso. también es necesario poner el puente "Habilitar"
cableado de los 4 steppers y eso es todo.
También suministré la energía de baterías de 12 V, dos estaciones, una para Arduino y otra para GRBl Shield
Paso 3: Código Arduino
/ * === Arduino Mecanum Wheels Robot === Control de teléfono inteligente a través de Bluetooth por Dejan, www. HowToMechatronics.com Bibliotecas: RF24, www. HowToMechatronics.com AccelStepper por Mike McCauley: www. HowToMechatronics.com
* / / * 2019-11-12 Gilad Meller (https://www.keerbot.com - modificar el código para que funcione con el escudo del motor arduino GRBL Los motores paso a paso en el escudo están mapeados como (paso / dirección): 2/5 3 / 6 4/7 12/13 usando el controlador A4988 12V
El código de Dejan usa SoftwareSerial y el mío usará los pines estándar RX, TX (0, 1) del Arduino Uno Nota: Asegúrese de cambiar los pines RX TX cuando suba el boceto al arduino o la carga fallará.
* / #include
// Defina los motores paso a paso y los pines que usará AccelStepper LeftBackWheel (1, 2, 5); // (Tipo: controlador, PASO, DIR) - Stepper1 AccelStepper LeftFrontWheel (1, 3, 6); // Stepper2 AccelStepper RightBackWheel (1, 4, 7); // Stepper3 AccelStepper RightFrontWheel (1, 12, 13); // Stepper4
int entranteByte = 0, c; // para datos seriales entrantes int wheelSpeed = 100;
configuración vacía () {Serial.begin (9600); // abre el puerto serie, establece la velocidad de datos en 9600 bps // Establece los valores de semilla iniciales para los steppers LeftFrontWheel.setMaxSpeed (600); LeftBackWheel.setMaxSpeed (600); RightFrontWheel.setMaxSpeed (600); RightBackWheel.setMaxSpeed (600);
}
void loop () {if (Serial.available ()> 0) {// leer el byte entrante: entranteByte = Serial.read ();
c = entranteByte; switch (c) {caso 71: Serial.println ("Recibí Girar a la derecha W"); Gira a la derecha(); rotura; caso 65: Serial.println ("Recibí Rotate left Q"); girar a la izquierda(); rotura; caso 1: Serial.println ("Recibí BK / LFT"); moveRightBackward (); rotura; caso 2: Serial.println ("Recibí BK"); mover hacia atrás(); rotura; caso 3: Serial.println ("Recibí BK / RT"); moveRightBackward (); rotura; caso 4: Serial.println ("Recibí IZQUIERDA"); moveSidewaysLeft ();
rotura; caso 5: Serial.println ("Recibí STOP"); stopMoving (); rotura; caso 6: Serial.println ("Recibí RT"); moveSidewaysRight (); rotura; caso 7: Serial.println ("Recibí FWD / LFT"); moveLeftForward (); rotura; caso 8: Serial.println ("Recibí FWD"); moveForward (); rotura; caso 9: Serial.println ("Recibí FWD / RT"); moveRightForward (); rotura; predeterminado: Serial.print ("No es un comando"); Serial.println (entranteByte, DEC); rotura; } } //mover hacia atrás(); moveRobot ();
}
void moveRobot () {LeftBackWheel.runSpeed (); LeftFrontWheel.runSpeed (); RightFrontWheel.runSpeed (); RightBackWheel.runSpeed (); }
void moveForward () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (wheelSpeed); } void moveBackward () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (-wheelSpeed); } void moveSidewaysRight () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (wheelSpeed); } void moveSidewaysLeft () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (-wheelSpeed); } void rotateLeft () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (wheelSpeed); } void rotateRight () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (-wheelSpeed); } void moveRightForward () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (0); RightFrontWheel.setSpeed (0); RightBackWheel.setSpeed (wheelSpeed); } void moveRightBackward () {LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (0); } void moveLeftForward () {LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (0); } void moveLeftBackward () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (0); RightFrontWheel.setSpeed (0); RightBackWheel.setSpeed (-wheelSpeed); } void stopMoving () {LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed (0); RightFrontWheel.setSpeed (0); RightBackWheel.setSpeed (0); }
Paso 4: Appinventor
Una nueva aplicación appinventor con una funcionalidad diferente y más simple (sin grabaciones)
Por favor envíe msg y yo se lo envío - la carga falla.
Cuídate.