Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Robot Mecanum - Projekt, który chciałem zbudować, odkąd zobaczyłem go na wspaniałym blogu Mechatroniki Dejana: howtomechatronics.com
Dejan naprawdę wykonał dobrą robotę, obejmując wszystkie aspekty, od sprzętu, drukowania 3D, elektroniki, kodu i aplikacji na Androida (wynalazca aplikacji MIT)
To świetny projekt overhoul, który odświeża wszystkie umiejętności twórcy.
Miałem kilka zmian do wykonania w projektach
Nie chciałem używać wykonanej na zamówienie płytki drukowanej, której użył, ale starej osłony GRBL, którą miałem w domu.
Chciałem użyć BlueTooth
Więc:
Kieszonkowe dzieci
Arduino Uno + Tarcza GRBL
Silniki krokowe
Moduł HC-06 BlueTooth
Akumulator Lipo 12 V
Krok 1: Sprzęt
Wydrukowałem koła i zmontowałem je jak tutaj:
Podłączone 4 silniki krokowe do podwozia (w moim przypadku nieużywana szuflada do góry nogami)
Poprowadziłem kable do górnej części robota.
Krok 2: Elektronika
użyłem mojego modułu HC-06 BT, Najtrudniejszą częścią było ustawienie osłony GRBL do pracy z 4 silnikami krokowymi, ponieważ nie ma dobrego przewodnika do tego, Istnieje potrzeba umieszczenia zworek, jak widać na załączonym obrazku, aby wyjście "Narzędzia" tarczy również sterowało silnikiem krokowym. należy również umieścić zworkę "Włącz"
okablowanie 4 stepperów i to wszystko.
Dostarczyłem też zasilanie z akumulatorów 12V - dwa stesy - jeden do Arduino i jeden do GRBl Shield
Krok 3: Kod Arduino
/* === Arduino Mecanum Wheels Robot === Sterowanie smartfonem przez Bluetooth przez Dejana, www. HowToMechatronics.com Biblioteki: RF24, www. HowToMechatronics.com AccelStepper przez Mike McCauley: www. HowToMechatronics.com
*/ /* 12.11.2019 Gilad Meller (https://www.keerbot.com - zmodyfikuj kod do pracy z osłoną silnika arduino GRBL Silniki krokowe w osłonie są odwzorowane jako (krok/kierunek): 2/5 3 /6 4/7 12/13 za pomocą sterownika A4988 12V
Kod Dejana używa SoftwareSerial, a mój użyje standardowych pinów RX, TX (0, 1) Arduino Uno Uwaga: Upewnij się, że rempve piny RX TX podczas przesyłania szkicu do arduino lub przesyłanie się nie powiedzie.
*/ #włączać
// Zdefiniuj silniki krokowe i piny, które będą używać 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 przychodzącyByte = 0, c; // dla przychodzących danych szeregowych int wheelSpeed = 100;
void setup() { Serial.begin(9600); // otwiera port szeregowy, ustawia szybkość transmisji danych na 9600 bps // ustawia początkowe wartości początkowe dla stepperów LeftFrontWheel.setMaxSpeed(600); LeftBackWheel.setMaxSpeed(600); Prawoprzednie koło.setMaxSpeed(600); RightBackWheel.setMaxSpeed(600);
}
void loop() { if (Serial.available() > 0) { // odczytaj przychodzący bajt: initialByte = Serial.read();
c = bajt przychodzący; switch (c) { przypadek 71: Serial.println("Otrzymałem Obróć w prawo W"); Obróć w prawo(); przerwa; case 65: Serial.println("Otrzymałem Obróć w lewo Q"); obrót w lewo(); przerwa; przypadek 1: Serial.println("Otrzymałem BK/LFT"); przesuńw prawo do tyłu(); przerwa; przypadek 2: Serial.println("Otrzymałem BK"); przesuńWstecz(); przerwa; przypadek 3: Serial.println("Otrzymałem BK/RT"); przesuńw prawo do tyłu(); przerwa; przypadek 4: Serial.println("Otrzymałem LEWO"); przesuńW BokW Lewo();
przerwa; przypadek 5: Serial.println("Otrzymałem STOP"); przestań sięruszać(); przerwa; przypadek 6: Serial.println("Otrzymałem RT"); przesuń na boki w prawo(); przerwa; przypadek 7: Serial.println("Otrzymałem FWD/LFT"); ruch w lewo do przodu(); przerwa; przypadek 8: Serial.println("Otrzymałem FWD"); ruszaj naprzód(); przerwa; przypadek 9: Serial.println("Otrzymałem FWD/RT"); przesuńw prawo do przodu(); przerwa; domyślnie: Serial.print("Nie jest to polecenie"); Serial.println(bajt przychodzący, DEC); przerwa; } } //przesuńWstecz(); moveRobot();
}
void moveRobot() { LeftBackWheel.runSpeed(); LeweKołoPrzednie.runSpeed(); RightFrontWheel.runSpeed(); PrawoBackWheel.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); }
Krok 4: Wynalazca aplikacji
Nowa aplikacja appinventor z inną i prostszą funkcjonalnością (bez nagrań)
Proszę wyślij msg, a ja wyślę do Ciebie - przesyłanie nie powiodło się.
Trzymaj się.