DIY 2WD robot car chassis kit with yellow TT gear motors, wheels, battery box, ESP32-S3 and TB6612FNG driver

ระดับกลาง

สร้างรถหุ่นยนต์สองล้อ

หุ่นยนต์มอเตอร์การเคลื่อนไหว

เปลี่ยนโค้ดให้เป็นการเคลื่อนไหว – เชื่อมต่อแผงวงจรขับเคลื่อนมอเตอร์และโครงจริงเข้าด้วยกัน แล้วดูโปรแกรมของคุณขับเคลื่อนบางสิ่งบางอย่างได้จริง

รวมชิ้นส่วนจริง 6 รายการ

ราคารวมชุดนี้: 1,568.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโครงการ

โครงการนี้เปลี่ยนแชสซีหุ่นยนต์ให้กลายเป็นสิ่งที่ขับเคลื่อนได้จริงด้วยโค้ดของคุณเอง โดยรวมตัวควบคุม, ตัวขับมอเตอร์ และมอเตอร์ DC สองตัวเข้าไว้ด้วยกันเป็นเครื่องจักรที่ทำงานประสานกัน เป็นโครงการแรกในเส้นทางหุ่นยนต์เนื่องจากเป็นการแนะนำการควบคุมมอเตอร์โดยเฉพาะ ซึ่งเป็นประเภทเอาต์พุตที่แตกต่างจากสวิตช์ไฟหรือการขับเคลื่อนจอแสดงผลโดยพื้นฐาน

สิ่งที่ตัวควบคุมทำ

ตัวควบคุมจะตัดสินใจว่าหุ่นยนต์ควรไปทางไหนและแปลการตัดสินใจนั้นเป็นสัญญาณที่ตัวขับมอเตอร์เข้าใจ ซึ่งก็คือทิศทางสำหรับแต่ละล้อและความเร็วสำหรับแต่ละล้อ โดยมีการอัปเดตอย่างต่อเนื่องในขณะที่โปรแกรมทำงาน ที่นี่ใช้ ESP32-S3 แทนที่จะเป็นบอร์ดขนาดเล็กกว่าอย่าง ESP32-C3 โดยเฉพาะอย่างยิ่งเพื่อเพิ่มพื้นที่ GPIO: ตัวขับมอเตอร์เพียงอย่างเดียวก็ต้องการขาหลายขาแล้ว และการเผื่อพื้นที่สำหรับการอัปเกรดเซ็นเซอร์ในอนาคต (เช่น แถบเซ็นเซอร์ของโครงการติดตามเส้น) ก็เป็นสิ่งสำคัญตั้งแต่เริ่มต้น

สิ่งที่ตัวขับมอเตอร์ทำ

TB6612FNG จะอยู่ระหว่างตัวควบคุมและมอเตอร์ และทำหน้าที่ขับเคลื่อนมอเตอร์จริง ๆ เป็นตัวขับเคลื่อนแบบ MOSFET ซึ่งมีประสิทธิภาพด้านพลังงานมากกว่าการออกแบบตัวขับเคลื่อนเชิงเส้นแบบเก่าอย่าง L298N อย่างแท้จริง ซึ่งช่วยลดการสูญเสียพลังงานในรูปของความร้อน ซึ่งมีความสำคัญโดยตรงกับแชสซีที่ใช้แบตเตอรี่ ตัวควบคุมจะไม่ขับเคลื่อนแหล่งจ่ายไฟกระแสสูงของมอเตอร์โดยตรง แต่จะส่งสัญญาณลอจิกพลังงานต่ำไปยังตัวขับเคลื่อนเท่านั้น

สิ่งที่แชสซีและมอเตอร์ทำ

แชสซีจะยึดมอเตอร์เกียร์ DC สองตัว ล้อ และกล่องแบตเตอรี่ไว้ในตำแหน่งทางกายภาพที่แน่นอน และจะแปลการหมุนของมอเตอร์แต่ละตัวเป็นการเคลื่อนที่จริงของหุ่นยนต์ โดยการเลี้ยวจะทำได้โดยการหมุนล้อแต่ละข้างด้วยความเร็วที่ต่างกันหรือในทิศทางที่ต่างกัน แทนที่จะใช้กลไกการบังคับเลี้ยวแยกต่างหาก

พื้นฐานการเดินสายตัวขับมอเตอร์

ช่องมอเตอร์แต่ละช่องบน TB6612FNG ต้องการสองสิ่งจากตัวควบคุม: สัญญาณทิศทาง (ล้อนี้ควรหมุนไปทางใด) และสัญญาณความเร็ว PWM (เร็วแค่ไหน) สิ่งที่สำคัญไม่แพ้กันคือการเดินสายที่แยกจากกัน: แหล่งจ่ายไฟของมอเตอร์ ซึ่งคือชุดแบตเตอรี่ 18650 จะจ่ายไฟให้กับมอเตอร์เอง ในขณะที่พลังงานลอจิกของตัวควบคุมมาจากพอร์ต USB การแยกพลังงานมอเตอร์และพลังงานลอจิกออกจากกันเป็นแนวปฏิบัติมาตรฐาน ซึ่งช่วยปกป้องขาลอจิกที่ไวต่อการรบกวนของตัวควบคุมจากสัญญาณรบกวนทางไฟฟ้าที่กระแสของมอเตอร์สามารถสร้างขึ้นได้

แนวคิดซอฟต์แวร์และไลบรารี

ไลบรารีตัวขับมอเตอร์ส่วนใหญ่จะเปิดเผยฟังก์ชันง่ายๆ ต่อมอเตอร์หนึ่งตัว: กำหนดทิศทางและค่าความเร็ว และไลบรารีจะจัดการ PWM พื้นฐานและตรรกะของขาควบคุมทิศทางให้คุณ เริ่มต้นด้วยการให้มอเตอร์แต่ละตัวหมุนได้อย่างอิสระและยืนยันว่าทั้งสองทิศทางทำงานได้ก่อนที่จะเขียนตรรกะการขับขี่ระดับสูงขึ้น (เดินหน้า, เลี้ยว, หยุด) ด้านบน

การทดสอบและการแก้ไขปัญหา

  • มอเตอร์ไม่หมุนเลย - ตรวจสอบแบตเตอรี่และการเดินสายตัวขับก่อนที่จะสรุปว่าเป็นข้อบกพร่องของโค้ด ตัวขับที่ไม่มีไฟเลี้ยงมอเตอร์จะยอมรับคำสั่งอย่างเงียบๆ และไม่ทำอะไรเลย
  • มอเตอร์ตัวหนึ่งหมุนผิดทิศทาง - สลับสายสองเส้นของมอเตอร์ตัวนั้นที่ตัวขับ หรือกลับตรรกะทิศทางของมอเตอร์ตัวนั้นในโค้ด การแก้ไขทั้งสองวิธีนั้นถูกต้องเท่าเทียมกัน
  • การเคลื่อนที่ผิดปกติหรือไม่แน่นอน - ตรวจสอบระดับการชาร์จและแรงดันไฟฟ้าของแบตเตอรี่ การจ่ายไฟไม่เพียงพอเป็นสาเหตุที่พบบ่อยมากที่ถูกเข้าใจผิดว่าเป็นปัญหาของโค้ด
  • หุ่นยนต์ขับเป็นเส้นโค้งแทนที่จะเป็นเส้นตรง - ตรวจสอบให้แน่ใจว่ามอเตอร์ทั้งสองตัวได้รับค่าความเร็วเท่ากัน เนื่องจากความแตกต่างเล็กน้อยระหว่างมอเตอร์ DC สองตัวก็สามารถทำให้แชสซีสองล้อขับออกนอกเส้นตรงได้

การอัปเกรดเสริมในอนาคต: หุ่นยนต์ติดตามเส้น

แชสซีและตัวขับ TB6612FNG ชุดนี้ถูกนำกลับมาใช้โดยตรงในโครงการหุ่นยนต์ติดตามเส้น ซึ่งเพิ่มชุดเซ็นเซอร์ติดตามเส้นบนฐานขับเคลื่อนเดียวกัน เมื่อคุณคุ้นเคยกับการควบคุมมอเตอร์พื้นฐานในที่นี้แล้ว นี่คือขั้นตอนต่อไปที่เป็นธรรมชาติแทนที่จะเป็นการเริ่มต้นใหม่

การเดินสาย

  • TB6612FNG VM → กล่องใส่แบตเตอรี่ 18650 (+) — ผ่านสวิตช์เปิดปิดของกล่อง — แหล่งจ่ายไฟมอเตอร์ ซึ่งแยกจากแหล่งจ่ายไฟลอจิก
  • TB6612FNG GND → กล่องใส่แบตเตอรี่ (−) และ ESP32-S3 GND — ต้องมีกราวด์ร่วมกันระหว่างแบตเตอรี่, ตัวขับ และตัวควบคุม
  • TB6612FNG VCC → ESP32-S3 3V3 — แหล่งจ่ายไฟระดับลอจิกสำหรับชิปตัวขับ
  • TB6612FNG STBY → ESP32-S3 GPIO7 — ต้องถูกขับ HIGH เพื่อให้ตัวขับออกจากโหมดสแตนด์บาย
  • TB6612FNG AIN1 → ESP32-S3 GPIO4 — ทิศทางมอเตอร์ A
  • TB6612FNG AIN2 → ESP32-S3 GPIO5 — ทิศทางมอเตอร์ A
  • TB6612FNG PWMA → ESP32-S3 GPIO6 — ความเร็ว/เปิดใช้งานมอเตอร์ A
  • TB6612FNG BIN1 → ESP32-S3 GPIO15 — ทิศทางมอเตอร์ B
  • TB6612FNG BIN2 → ESP32-S3 GPIO16 — ทิศทางมอเตอร์ B
  • TB6612FNG PWMB → ESP32-S3 GPIO17 — ความเร็ว/เปิดใช้งานมอเตอร์ B
  • TB6612FNG A01/A02 → มอเตอร์เกียร์ DC ซ้าย (ชุดแชสซี) — สายสองเส้น, ขั้วใดก็ได้ (สลับหากหมุนผิดทาง)
  • TB6612FNG B01/B02 → มอเตอร์เกียร์ DC ขวา (ชุดแชสซี)
  • บอร์ดพัฒนา ESP32-S3 → สาย USB-C → คอมพิวเตอร์ (สำหรับเขียนโปรแกรมเท่านั้น; ทำงานแบบไม่ต้องต่อสายจากกล่องแบตเตอรี่เมื่อแฟลชแล้ว)

หมายเลข GPIO ด้านบนเป็นทางเลือกทั่วไปที่ปลอดภัย — บอร์ดพัฒนา ESP32-S3 แตกต่างกันไปตามผู้ผลิต ดังนั้นโปรดยืนยันแต่ละขาเทียบกับแผนผังขาของบอร์ดเฉพาะของคุณ และหลีกเลี่ยงขาใดๆ ที่ทำเครื่องหมายว่าสงวนไว้สำหรับแฟลช/PSRAM (โดยทั่วไปคือ GPIO26-32 บนบอร์ดที่มี octal PSRAM) หรือ USB (GPIO19/20 บนบอร์ด S3 จำนวนมาก) โค้ดเริ่มต้นนี้จะขับขา PWMA/PWMB ให้เป็น HIGH เต็มที่สำหรับการเคลื่อนที่ด้วยความเร็วเต็มที่คงที่ แทนที่จะใช้ PWM แบบปรับความเร็วได้ ซึ่งทำให้ตัวอย่างง่ายขึ้นและหลีกเลี่ยงความคลุมเครือระหว่าง API PWM ของ ESP32 Arduino core ที่แตกต่างกัน — สลับไปใช้การควบคุมความเร็ว `ledcAttach()`/`ledcWrite()` เมื่อคุณพร้อมที่จะก้าวข้ามการเปิด/ปิด STBY จะต้องเป็น HIGH ก่อนที่มอเตอร์จะตอบสนองเลย และควรเดินสาย/ทดสอบขานั้นก่อนเมื่อเริ่มใช้งานตัวขับ การเพิ่มอินพุตระยะไกล (BLE หรือ Wi-Fi) หรือส่วนเสริมเซ็นเซอร์ติดตามเส้น (ดูโครงการหุ่นยนต์ติดตามเส้น) เป็นขั้นตอนต่อไปที่เป็นธรรมชาติเมื่อรูปแบบนี้ทำงานได้อย่างน่าเชื่อถือ

แผนภาพการต่อสาย

VM GND VCC → 3V3 STBY → GPIO7 AIN1 → GPIO4 AIN2 → GPIO5 PWMA → GPIO6 BIN1 → GPIO15 BIN2 → GPIO16 PWMB → GPIO17 A01/A02 B01/B02 ESP32-S3 TB6612FNG USB-C cable 18650 battery holder battery holder left DC gear motor right DC gear motor

โค้ดเริ่มต้น

// Two-Wheel Robot Car — ESP32-S3 + TB6612FNG
// Basic starter: runs a fixed forward/stop/turn test pattern on loop.

// --- Pins — adjust to match your specific ESP32-S3 dev board's pinout ---
#define STBY 7
#define AIN1 4
#define AIN2 5
#define PWMA 6
#define BIN1 15
#define BIN2 16
#define PWMB 17

void motorA(bool forward, bool run) {
  digitalWrite(AIN1, run ? (forward ? HIGH : LOW) : LOW);
  digitalWrite(AIN2, run ? (forward ? LOW : HIGH) : LOW);
  digitalWrite(PWMA, run ? HIGH : LOW); // full speed when running
}

void motorB(bool forward, bool run) {
  digitalWrite(BIN1, run ? (forward ? HIGH : LOW) : LOW);
  digitalWrite(BIN2, run ? (forward ? LOW : HIGH) : LOW);
  digitalWrite(PWMB, run ? HIGH : LOW);
}

void stopMotors() {
  motorA(true, false);
  motorB(true, false);
}

void driveForward() {
  motorA(true, true);
  motorB(true, true);
}

void turnLeft() {
  // Left motor reverse/stopped, right motor forward = pivot left
  motorA(false, true);
  motorB(true, true);
}

void turnRight() {
  motorA(true, true);
  motorB(false, true);
}

void setup() {
  pinMode(STBY, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(PWMA, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMB, OUTPUT);

  digitalWrite(STBY, HIGH); // take the driver out of standby
  stopMotors();
}

void loop() {
  driveForward();
  delay(1500);

  stopMotors();
  delay(500);

  turnRight();
  delay(600);

  stopMotors();
  delay(500);

  turnLeft();
  delay(600);

  stopMotors();
  delay(1000);
}

ไม่แน่ใจขั้นตอนไหน? ถามเรา