Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Mecanum Robot - Un projet que je voulais construire depuis que je l'ai vu sur le grand blog mécatronique de Dejan: howtomechatronics.com
Dejan a vraiment fait du bon travail en couvrant tous les aspects du matériel, de l'impression 3D, de l'électronique, du code et d'une application Android (inventeur de l'application du MIT)
Il s'agit d'un grand projet de refonte qui rafraîchit toutes les compétences d'un fabricant.
J'ai eu peu de changements à faire sur les projets
Je ne voulais pas utiliser le PCB sur mesure qu'il utilisait, mais un vieux shield GRBL que j'avais à la maison.
Je voulais utiliser BlueTooth
Donc:
Fournitures
Bouclier Arduino Uno + GRBL
Moteurs pas à pas
Module Bluetooth HC-06
Batterie Lipo 12V
Étape 1: Matériel
J'ai imprimé les roues et je les ai assemblées comme ici:
Connecté 4 moteurs pas à pas au châssis (dans mon cas un tiroir inutilisé à l'envers)
Acheminer les câbles vers le haut du robot.
Étape 2: Électronique
J'ai utilisé mon module HC-06 BT, La partie la plus difficile a été de configurer le blindage GRBL pour qu'il fonctionne avec 4 moteurs pas à pas car il n'y a pas de bon guide pour cela, Il est nécessaire de mettre des cavaliers comme on peut le voir sur l'image ci-jointe, afin de faire en sorte que la sortie "Outil" du bouclier contrôle également un moteur pas à pas. également besoin de mettre le cavalier "Activer"
câblage des 4 steppers et c'est tout.
J'ai également fourni l'alimentation à partir de batteries 12V - deux étapes - une pour l'Arduino et une pour le GRBl Shield
Étape 3: Code Arduino
/* === Robot Arduino Mecanum Wheels === Contrôle par smartphone via Bluetooth par Dejan, www. HowToMechatronics.com Bibliothèques: RF24, www. HowToMechatronics.com AccelStepper par Mike McCauley: www. HowToMechatronics.com
*/ /* 2019-11-12 Gilad Meller (https://www.keerbot.com - modifiez le code pour qu'il fonctionne avec GRBL arduino motor shield Les moteurs pas à pas dans le shield sont mappés comme (pas/direction): 2/5 3 /6 4/7 12/13 utilisant le pilote A4988 12V
Le code de Dejan utilise SoftwareSerial et le mien utilisera les broches RX, TX standard (0, 1) de l'Arduino Uno.
*/ #comprendre
// Définir les moteurs pas à pas et les broches qui utiliseront AccelStepper LeftBackWheel(1, 2, 5); // (Type:driver, STEP, DIR) - Stepper1 AccelStepper LeftFrontWheel (1, 3, 6); // Stepper2 AccelStepper RightBackWheel (1, 4, 7); // Stepper3 AccelStepper RightFrontWheel (1, 12, 13); // Stepper4
int octet entrant = 0, c; // pour les données série entrantes int wheelSpeed = 100;
void setup() { Serial.begin(9600); // ouvre le port série, définit le débit de données à 9600 bps // définit les valeurs de départ initiales pour les steppers LeftFrontWheel.setMaxSpeed(600); LeftBackWheel.setMaxSpeed(600); RightFrontWheel.setMaxSpeed(600); RightBackWheel.setMaxSpeed(600);
}
void loop() { if (Serial.available() > 0) { // lit l'octet entrant: entrantByte = Serial.read();
c = octet entrant; switch (c) { case 71: Serial.println("J'ai reçu Rotate right W"); tourner à droite(); Pause; case 65: Serial.println("J'ai reçu Rotate left Q"); tourne à gauche(); Pause; case 1: Serial.println("J'ai reçu BK/LFT "); moveRightBackward(); Pause; case 2: Serial.println("J'ai reçu BK "); recule(); Pause; case 3: Serial.println("J'ai reçu BK/RT "); moveRightBackward(); Pause; case 4: Serial.println("J'ai reçu LEFT "); moveSidewaysLeft();
Pause; case 5: Serial.println("J'ai reçu STOP "); arrête de bouger(); Pause; case 6: Serial.println("J'ai reçu RT "); moveSidewaysRight(); Pause; case 7: Serial.println("J'ai reçu FWD/LFT "); moveLeftForward(); Pause; case 8: Serial.println("J'ai reçu FWD "); Avance(); Pause; case 9: Serial.println("J'ai reçu FWD/RT "); moveRightForward(); Pause; par défaut: Serial.print("Pas une commande "); Serial.println(incomingByte, DEC); Pause; } } //recule(); 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); }
Étape 4: Appinventeur
Une nouvelle application appinventor avec des fonctionnalités différentes et plus simples (pas d'enregistrements)
Veuillez envoyer un message et je vous l'envoie - les téléchargements échouent.
Prends soin.