สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
Mecanum Robot - โครงการที่ฉันอยากจะสร้างตั้งแต่ฉันเห็นมันในบล็อก gread mechatronics ของ Dejan: howtomechatronics.com
Dejan ทำได้ดีจริงๆ ครอบคลุมทุกด้านตั้งแต่ฮาร์ดแวร์ การพิมพ์ 3 มิติ อุปกรณ์อิเล็กทรอนิกส์ โค้ด และแอป Android (ผู้ประดิษฐ์แอปของ MIT)
นี่เป็นโครงการยกเครื่องที่ยอดเยี่ยมที่จะรีเฟรชทักษะทั้งหมดของผู้ทำ
ฉันมีการเปลี่ยนแปลงเล็กน้อยที่ต้องทำกับโครงการ
ฉันไม่ต้องการใช้ PCB แบบกำหนดเองที่เขาใช้ แต่มีโล่ GRBL แบบเก่าที่ฉันมีที่บ้าน
ฉันต้องการใช้ BlueTooth
ดังนั้น:
เสบียง
Arduino Uno + GRBL Shield
สเต็ปเปอร์มอเตอร์
HC-06 โมดูลบลูทูธ
แบตเตอรี่ Lipo 12V
ขั้นตอนที่ 1: ฮาร์ดแวร์
พิมพ์ล้อและประกอบเข้าด้วยกันดังนี้:
เชื่อมต่อสเต็ปเปอร์มอเตอร์ 4 ตัวเข้ากับแชสซี (ในกรณีของฉันลิ้นชักที่ไม่ได้ใช้คว่ำลง)
เดินสายเคเบิลไปที่ด้านบนของหุ่นยนต์
ขั้นตอนที่ 2: อุปกรณ์อิเล็กทรอนิกส์
ฉันใช้โมดูล HC-06 BT ของฉัน
ส่วนที่ยากที่สุดคือการตั้งค่าชิลด์ GRBL ให้ทำงานกับสเต็ปเปอร์มอเตอร์ 4 ตัว เนื่องจากไม่มีแนวทางที่ดี
จำเป็นต้องใส่จัมเปอร์ดังที่เห็นในภาพที่แนบมา เพื่อให้เอาต์พุต "เครื่องมือ" ของชิลด์ควบคุมสเต็ปเปอร์มอเตอร์ได้ด้วย ต้องใส่ "Enable" Jumper ด้วย
เดินสายสเต็ปเปอร์ 4 ตัว เท่านี้ก็เรียบร้อย
ฉันยังจ่ายไฟจากแบตเตอรี่ 12V - สองสเต็ป - หนึ่งอันสำหรับ Arduino และอีกอันสำหรับ GRBl Shield
ขั้นตอนที่ 3: รหัส Arduino
/* === Arduino Mecanum Wheels Robot === การควบคุมสมาร์ทโฟนผ่าน Bluetooth โดย Dejan, www. HowToMechatronics.com ห้องสมุด: RF24, www. HowToMechatronics.com AccelStepper โดย Mike McCauley: www. HowToMechatronics.com
*/ /* 2019-11-12 Gilad Meller (https://www.keerbot.com - แก้ไขโค้ดเพื่อทำงานกับ GRBL arduino motor shield มอเตอร์สเต็ปในชิลด์ถูกแมปเป็น (ขั้นตอน/ทิศทาง): 2/5 3 /6 4/7 12/13 ใช้ไดรเวอร์ A4988 12V
รหัสของ Dejan ใช้ SoftwareSerial และของฉันจะใช้ RX, TX pins (0, 1) มาตรฐานของ Arduino Uno หมายเหตุ: ตรวจสอบให้แน่ใจว่าได้ถอดหมุด RX TX ออกเมื่อทำการอัพร่างไปยัง Arduino ไม่เช่นนั้นการอัปโหลดจะล้มเหลว
*/ #รวม
// กำหนดสเต็ปเปอร์มอเตอร์และพินที่จะใช้ AccelStepper LeftBackWheel(1, 2, 5); // (ประเภท:ไดรเวอร์, STEP, DIR) - Stepper1 AccelStepper LeftFrontWheel(1, 3, 6); // Stepper2 AccelStepper RightBackWheel (1, 4, 7); // Stepper3 AccelStepper RightFrontWheel (1, 12, 13); // Stepper4
int ขาเข้าไบต์ = 0, c; // สำหรับข้อมูลอนุกรมขาเข้า int wheelSpeed = 100;
การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); // เปิดพอร์ตอนุกรมกำหนดอัตราข้อมูลเป็น 9600 bps // ตั้งค่าเริ่มต้นเริ่มต้นสำหรับ steppers LeftFrontWheel.setMaxSpeed (600); LeftBackWheel.setMaxSpeed(600); ล้อหน้าขวา.setMaxSpeed(600); RightBackWheel.setMaxSpeed(600);
}
วงเป็นโมฆะ () { ถ้า (Serial.available () > 0) { // อ่านไบต์ที่เข้ามา: incomingByte = Serial.read ();
c = ไบต์ขาเข้า; สวิตช์ (c) { กรณีที่ 71: Serial.println ("ฉันได้รับ Rotate right W"); หมุนขวา (); หยุดพัก; กรณีที่ 65: Serial.println("ฉันได้รับ Rotate left Q"); หมุนซ้าย(); หยุดพัก; กรณีที่ 1: Serial.println("ฉันได้รับ BK/LFT "); moveRightBackward(); หยุดพัก; กรณีที่ 2: Serial.println("ฉันได้รับ BK "); ย้ายย้อนกลับ(); หยุดพัก; กรณีที่ 3: Serial.println("ฉันได้รับ BK/RT "); moveRightBackward(); หยุดพัก; กรณีที่ 4: Serial.println("ฉันได้รับ LEFT "); ย้ายข้างซ้าย();
หยุดพัก; กรณีที่ 5: Serial.println("ฉันได้รับ STOP "); หยุดการเคลื่อนไหว (); หยุดพัก; กรณีที่ 6: Serial.println("ฉันได้รับ RT "); ย้ายข้างขวา (); หยุดพัก; กรณีที่ 7: Serial.println("ฉันได้รับ FWD/LFT "); ย้ายซ้ายไปข้างหน้า (); หยุดพัก; กรณีที่ 8: Serial.println("ฉันได้รับ FWD "); ก้าวไปข้างหน้า(); หยุดพัก; กรณีที่ 9: Serial.println("ฉันได้รับ FWD/RT "); moveRightForward(); หยุดพัก; ค่าเริ่มต้น: Serial.print("ไม่ใช่คำสั่ง"); Serial.println (ไบต์ขาเข้า, ธ.ค.); หยุดพัก; } } //moveBackward(); moveRobot();
}
โมฆะ moveRobot () { LeftBackWheel.runSpeed (); LeftFrontWheel.runSpeed(); RightFrontWheel.runSpeed(); RightBackWheel.runSpeed(); }
โมฆะ moveForward () { LeftFrontWheel.setSpeed (ความเร็วล้อ); LeftBackWheel.setSpeed(ความเร็วล้อ); RightFrontWheel.setSpeed(ความเร็วล้อ); RightBackWheel.setSpeed(ความเร็วล้อ); } โมฆะ moveBackward () { LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed(-ความเร็วล้อ); RightFrontWheel.setSpeed(-ความเร็วล้อ); RightBackWheel.setSpeed(-ความเร็วล้อ); } โมฆะ moveSidewaysRight () { LeftFrontWheel.setSpeed (ความเร็วล้อ); LeftBackWheel.setSpeed(-ความเร็วล้อ); RightFrontWheel.setSpeed(-ความเร็วล้อ); RightBackWheel.setSpeed(ความเร็วล้อ); } โมฆะ moveSidewaysLeft () { LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed(ความเร็วล้อ); RightFrontWheel.setSpeed(ความเร็วล้อ); RightBackWheel.setSpeed(-ความเร็วล้อ); } เป็นโมฆะ turnsLeft () { LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed(-ความเร็วล้อ); RightFrontWheel.setSpeed(ความเร็วล้อ); RightBackWheel.setSpeed(ความเร็วล้อ); } โมฆะการหมุนขวา () { LeftFrontWheel.setSpeed (ความเร็วล้อ); LeftBackWheel.setSpeed(ความเร็วล้อ); RightFrontWheel.setSpeed(-ความเร็วล้อ); RightBackWheel.setSpeed(-ความเร็วล้อ); } โมฆะ moveRightForward () { LeftFrontWheel.setSpeed (ความเร็วล้อ); LeftBackWheel.setSpeed(0); ล้อหน้าขวา.setSpeed(0); RightBackWheel.setSpeed(ความเร็วล้อ); } โมฆะ moveRightBackward () { LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed(-ความเร็วล้อ); RightFrontWheel.setSpeed(-ความเร็วล้อ); RightBackWheel.setSpeed(0); } โมฆะ moveLeftForward () { LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed(ความเร็วล้อ); RightFrontWheel.setSpeed(ความเร็วล้อ); RightBackWheel.setSpeed(0); } เป็นโมฆะ moveLeftBackward () { LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed(0); ล้อหน้าขวา.setSpeed(0); RightBackWheel.setSpeed(-ความเร็วล้อ); } โมฆะ stopMoving () { LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed(0); ล้อหน้าขวา.setSpeed(0); RightBackWheel.setSpeed(0); }
ขั้นตอนที่ 4: Appinventor
แอพ appinventor ใหม่พร้อมฟังก์ชันการทำงานที่แตกต่างและเรียบง่ายกว่า (ไม่มีการบันทึก)
กรุณาส่งข้อความและฉันส่งถึงคุณ - การอัปโหลดล้มเหลว
ดูแล.