2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Mecanum Robot - Dejan'ın büyük mekatronik blogunda gördüğümden beri inşa etmek istediğim bir proje: howtomechatronics.com
Dejan, donanım, 3D baskı, elektronik, kod ve bir Android uygulamasından (MIT'nin Uygulama mucidi) tüm yönleri kapsayan gerçekten iyi bir iş çıkardı.
Bu, bir yapımcının tüm becerilerini tazeleyen harika bir revizyon projesidir.
Projelerde yapmam gereken birkaç değişiklik vardı
Kullandığı özel yapım PCB'yi kullanmak istemedim, ama evde sahip olduğum eski bir GRBL kalkanı.
BlueTooth'u kullanmak istedim
Yani:
Gereçler
Arduino Uno + GRBL Kalkanı
step motorlar
HC-06 BlueTooth modülü
12V Lipo Pil
Adım 1: Donanım
Tekerlekleri yazdırdı ve buradaki gibi birleştirdi:
Kasaya bağlı 4 Step motor (benim durumumda kullanılmayan bir çekmece yukarı bakacak şekilde)
Kabloları robotun üst kısmına yönlendirdi.
2. Adım: Elektronik
HC-06 BT modülümü kullandım, En zor kısım, bunun için iyi bir kılavuz olmadığı için GRBL kalkanını 4 Step motorla çalışacak şekilde ayarlamaktı.
Kalkanın "Alet" çıkışının bir step motoru da kontrol etmesini sağlamak için ekteki resimde görüldüğü gibi Jumper'ların yerleştirilmesine ihtiyaç vardır. ayrıca "Etkinleştir" Jumper'ını da koymanız gerekir
4 stepper kablolama ve bu kadar.
Ayrıca 12V pillerden güç sağladım - iki stes - biri Arduino için ve diğeri GRBl Shield için
Adım 3: Arduino Kodu
/* === Arduino Mecanum Wheels Robot === Bluetooth aracılığıyla akıllı telefon kontrolü, Dejan, www. HowToMechatronics.com Kitaplıklar: RF24, www. HowToMechatronics.com AccelStepper, Mike McCauley: www. HowToMechatronics.com
*/ /* 2019-11-12 Gilad Meller (https://www.keerbot.com - kodu GRBL arduino motor kalkanıyla çalışacak şekilde değiştirin Ekrandaki step motorlar şu şekilde eşlenir (adım/yön): 2/5 3 /6 4/7 12/13 A4988 sürücüsü 12V kullanılarak
Dejan'ın kodu SoftwareSerial'ı kullanır ve benimki Arduino Uno'nun standart RX, TX pinlerini (0, 1) kullanacak Not: Çizimi arduinoya yüklerken RX TX pinlerini değiştirdiğinizden emin olun, aksi takdirde yükleme başarısız olur.
*/ #Dahil etmek
// AccelStepper LeftBackWheel(1, 2, 5); // (Type:driver, STEP, DIR) - Step1 AccelStepper LeftFrontWheel(1, 3, 6); // Stepper2 AccelStepper RightBackWheel(1, 4, 7); // Stepper3 AccelStepper RightFrontWheel(1, 12, 13); // Stepper4
int gelenByte = 0, c; // gelen seri veriler için int tekerlekHızı = 100;
geçersiz kurulum() { Serial.begin(9600); // seri portu açar, veri hızını 9600 bps'ye ayarlar // Stepperler için başlangıç tohum değerlerini ayarlar LeftFrontWheel.setMaxSpeed(600); LeftBackWheel.setMaxSpeed(600); RightFrontWheel.setMaxSpeed(600); RightBackWheel.setMaxSpeed(600);
}
void loop() { if (Serial.available() > 0) { // gelen baytı oku: incomingByte = Serial.read();
c = gelenByte; switch (c) { case 71: Serial.println("Sağa Döndürmeyi Aldım"); döndürmeSağ(); kırmak; case 65: Serial.println("Sola Döndür Q'yu aldım"); sola dön(); kırmak; durum 1: Serial.println("BK/LFT aldım"); moveRightBackward(); kırmak; durum 2: Serial.println("BK aldım"); Geriye doğru hareket(); kırmak; durum 3: Serial.println("BK/RT aldım"); moveRightBackward(); kırmak; durum 4: Serial.println("SOL aldım"); moveSidewaysLeft();
kırmak; durum 5: Serial.println("STOP aldım"); hareket etmeyi kes(); kırmak; durum 6: Serial.println("RT aldım"); moveSidewaysRight(); kırmak; durum 7: Serial.println("FWD/LFT aldım"); moveLeftForward(); kırmak; durum 8: Serial.println("FWD aldım"); ileri hareket(); kırmak; durum 9: Serial.println("FWD/RT aldım"); moveRightForward(); kırmak; varsayılan: Serial.print("Komut değil"); Serial.println(gelenByte, DEC); kırmak; } } //moveBackward(); hareketRobot();
}
void moveRobot() { LeftBackWheel.runSpeed(); LeftFrontWheel.runSpeed(); RightFrontWheel.runSpeed(); RightBackWheel.runSpeed(); }
void moveForward() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(tekerlekHızı); RightFrontWheel.setSpeed(tekerlekHızı); RightBackWheel.setSpeed(tekerlekHızı); } 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(tekerlekHızı); } void moveSidewaysLeft() { LeftFrontWheel.setSpeed(-wheelSpeed); LeftBackWheel.setSpeed(tekerlekHızı); RightFrontWheel.setSpeed(tekerlekHızı); RightBackWheel.setSpeed(-wheelSpeed); } void döndürmeLeft() { LeftFrontWheel.setSpeed(-wheelSpeed); LeftBackWheel.setSpeed(-wheelSpeed); RightFrontWheel.setSpeed(tekerlekHızı); RightBackWheel.setSpeed(tekerlekHızı); } void döndürmeRight() { LeftFrontWheel.setSpeed(tekerlek Hızı); LeftBackWheel.setSpeed(tekerlekHızı); RightFrontWheel.setSpeed(-wheelSpeed); RightBackWheel.setSpeed(-wheelSpeed); } void moveRightForward() { LeftFrontWheel.setSpeed(wheelSpeed); LeftBackWheel.setSpeed(0); RightFrontWheel.setSpeed(0); RightBackWheel.setSpeed(tekerlekHızı); } void moveRightBackward() { LeftFrontWheel.setSpeed(0); LeftBackWheel.setSpeed(-wheelSpeed); RightFrontWheel.setSpeed(-wheelSpeed); RightBackWheel.setSpeed(0); } void moveLeftForward() { LeftFrontWheel.setSpeed(0); LeftBackWheel.setSpeed(tekerlekHızı); RightFrontWheel.setSpeed(tekerlekHızı); 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); }
Adım 4: Uygulamacı
Farklı ve daha basit işlevselliğe sahip yeni bir appinventor uygulaması (Kayıt Yok)
Lütfen msj gönderin ve size göndereyim - yüklemeler başarısız olur.
Dikkatli ol.