Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Robô Mecanum - Um projeto que eu queria construir desde que o vi no blog de mecatrônica gread do Dejan: howtomechatronics.com
Dejan realmente fez um bom trabalho cobrindo todos os aspectos de hardware, impressão 3D, eletrônica, código e um aplicativo Android (inventor do aplicativo do MIT)
Este é um grande projeto de overhoul que atualiza todas as habilidades de um criador.
Tive poucas mudanças a fazer nos projetos
Eu não queria usar o PCB customizado que ele usava, mas um escudo GRBL antigo que eu tinha em casa.
Eu queria usar o BlueTooth
Então:
Suprimentos
Arduino Uno + Escudo GRBL
Motores de passo
Módulo HC-06 BlueTooth
Bateria lipo 12V
Etapa 1: Hardware
Imprimiu as rodas e as montou como aqui:
4 motores de passo conectados ao chassi (no meu caso, uma gaveta não utilizada de cima para baixo)
Passei os cabos até o topo do robô.
Etapa 2: Eletrônica
Usei meu módulo HC-06 BT, A parte mais difícil foi configurar a blindagem GRBL para funcionar com motores de 4 passos, uma vez que não há um bom guia para isso, Há a necessidade de colocar Jumpers como pode ser visto na foto em anexo, para que a saída "Ferramenta" da blindagem também controle um motor de passo. também precisa colocar "Enable" Jumper
a fiação dos 4 steppers e pronto.
Eu também forneci a energia de baterias de 12 V - duas stes - uma para o Arduino e outra para o GRBl Shield
Etapa 3: Código Arduino
/ * === Arduino Mecanum Wheels Robot === Controle do smartphone via Bluetooth da Dejan, www. HowToMechatronics.com Bibliotecas: RF24, www. HowToMechatronics.com AccelStepper de Mike McCauley: www. HowToMechatronics.com
* / / * 2019-11-12 Gilad Meller (https://www.keerbot.com - modifique o código para funcionar com a blindagem do motor arduino GRBL Os motores de passo na blindagem são mapeados como (passo / direção): 2/5 3 / 6 4/7 12/13 usando driver A4988 12V
O código de Dejan usa SoftwareSerial e o meu usará os pinos RX, TX padrão (0, 1) do Arduino Uno Nota: Certifique-se de rempve os pinos RX TX ao fazer o upload do esboço para o arduino ou o upload falhará.
*/ #incluir
// Defina os motores de passo e os pinos que usarão AccelStepper LeftBackWheel (1, 2, 5); // (Tipo: driver, STEP, DIR) - Stepper1 AccelStepper LeftFrontWheel (1, 3, 6); // Stepper2 AccelStepper RightBackWheel (1, 4, 7); // Stepper3 AccelStepper RightFrontWheel (1, 12, 13); // Stepper4
int entrandoByte = 0, c; // para dados seriais de entrada int wheelSpeed = 100;
void setup () {Serial.begin (9600); // abre a porta serial, define a taxa de dados para 9600 bps // Define os valores iniciais para os steppers LeftFrontWheel.setMaxSpeed (600); LeftBackWheel.setMaxSpeed (600); RightFrontWheel.setMaxSpeed (600); RightBackWheel.setMaxSpeed (600);
}
void loop () {if (Serial.available ()> 0) {// ler o byte de entrada: EntryByte = Serial.read ();
c = Byte de entrada; switch (c) {case 71: Serial.println ("Recebi Rotate right W"); vire à direita(); pausa; caso 65: Serial.println ("Recebi Rotate left Q"); vire à esquerda(); pausa; caso 1: Serial.println ("Recebi BK / LFT"); moveRightBackward (); pausa; caso 2: Serial.println ("Recebi BK"); mover para trás(); pausa; caso 3: Serial.println ("Recebi BK / RT"); moveRightBackward (); pausa; caso 4: Serial.println ("Recebi ESQUERDA"); moveSidewaysLeft ();
pausa; caso 5: Serial.println ("Recebi STOP"); pare de se mexer(); pausa; caso 6: Serial.println ("Recebi RT"); moveSidewaysRight (); pausa; caso 7: Serial.println ("Recebi FWD / LFT"); moveLeftForward (); pausa; caso 8: Serial.println ("Recebi FWD"); Siga em frente(); pausa; caso 9: Serial.println ("Recebi FWD / RT"); moveRightForward (); pausa; padrão: Serial.print ("Não é um comando"); Serial.println (entrandoByte, DEC); pausa; } } //mover para trá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); }
Etapa 4: Appinventor
Um novo aplicativo appinventor com funcionalidade diferente e mais simples (sem gravações)
Por favor, envie a mensagem e eu envio para você - o upload falha.
Tome cuidado.