Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
Mecanum Robot - Un progetto che volevo realizzare sin da quando l'ho visto sul grande blog di meccatronica di Dejan: howtomechatronics.com
Dejan ha davvero fatto un buon lavoro coprendo tutti gli aspetti dall'hardware, la stampa 3D, l'elettronica, il codice e un'app Android (inventore dell'app del MIT)
Questo è un grande progetto di revisione che rinfresca tutte le abilità di un creatore.
Ho avuto poche modifiche da fare ai progetti
Non volevo usare il PCB personalizzato che usava, ma un vecchio scudo GRBL che avevo a casa.
Volevo usare BlueTooth
Così:
Forniture
Arduino Uno + Scudo GRBL
Motori passo-passo
Modulo HC-06 BlueTooth
Batteria Lipo 12V
Passaggio 1: hardware
Stampato le ruote e assemblato come qui:
Collegati 4 motori passo passo allo chassis (nel mio caso un cassetto inutilizzato capovolto)
Instradato i cavi nella parte superiore del robot.
Passaggio 2: elettronica
Ho usato il mio modulo HC-06 BT, La parte più difficile è stata impostare lo scudo GRBL per funzionare con 4 motori passo-passo poiché non esiste una buona guida per questo, C'è bisogno di mettere dei Jumper come si può vedere nell'immagine allegata, in modo da rendere l'uscita "Tool" dello shield per controllare anche un motore passo-passo. anche bisogno di mettere "Abilita" Jumper
cablare i 4 stepper e basta.
Ho anche fornito l'alimentazione da batterie da 12V - due ste - una per l'Arduino e una per il GRBl Shield
Passaggio 3: codice Arduino
/* === Arduino Mecanum Wheels Robot === Controllo smartphone tramite Bluetooth di Dejan, www. HowToMechatronics.com Librerie: RF24, www. HowToMechatronics.com AccelStepper di Mike McCauley: www. HowToMechatronics.com
*/ /* 2019-11-12 Gilad Meller (https://www.keerbot.com - modificare il codice per funzionare con GRBL arduino motor shield I motori passo passo nello shield sono mappati come (passo/direzione): 2/5 3 /6 4/7 12/13 con driver A4988 12V
Il codice di Dejan utilizza SoftwareSerial e il mio utilizzerà i pin standard RX, TX (0, 1) di Arduino Uno Nota: assicurati di ripristinare i pin RX TX quando carichi lo schizzo su arduino o il caricamento non riuscirà.
*/ #includere
// Definisce i motori passo passo ei pin che utilizzeranno 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 byte in entrata = 0, c; // per i dati seriali in entrata int wheelSpeed = 100;
void setup() { Serial.begin(9600); // apre la porta seriale, imposta la velocità dei dati a 9600 bps // imposta i valori iniziali del seme per gli stepper LeftFrontWheel.setMaxSpeed(600); LeftBackWheel.setMaxSpeed(600); RightFrontWheel.setMaxSpeed(600); RightBackWheel.setMaxSpeed(600);
}
void loop() { if (Serial.available() > 0) { // legge il byte in arrivo: incomingByte = Serial.read();
c = byte in entrata; switch (c) { case 71: Serial.println("Ho ricevuto Ruota a destra W"); ruota a destra(); rottura; caso 65: Serial.println("Ho ricevuto Ruota Q a sinistra"); gira a sinistra(); rottura; caso 1: Serial.println("Ho ricevuto BK/LFT "); moveRightBackward(); rottura; caso 2: Serial.println("Ho ricevuto BK"); tornare indietro(); rottura; caso 3: Serial.println("Ho ricevuto BK/RT "); moveRightBackward(); rottura; caso 4: Serial.println("Ho ricevuto LEFT"); moveSidewaysLeft();
rottura; caso 5: Serial.println("Ho ricevuto STOP"); fermati(); rottura; caso 6: Serial.println("Ho ricevuto RT"); moveSidewaysRight(); rottura; caso 7: Serial.println("Ho ricevuto FWD/LFT "); moveLeftForward(); rottura; caso 8: Serial.println("Ho ricevuto FWD"); moveForward(); rottura; caso 9: Serial.println("Ho ricevuto FWD/RT "); moveRightForward(); rottura; default: Serial.print("Non è un comando"); Serial.println(incomingByte, DEC); rottura; } } //tornare indietro(); 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); }
Passaggio 4: Appinventor
Una nuova app appinventor con funzionalità diverse e più semplici (Nessuna registrazione)
Si prega di inviare un messaggio e te lo invio - i caricamenti falliscono.
Stai attento.