ตัวควบคุม: การสำรวจการขับเคลื่อนถัง - C++
กล่องเครื่องมือสำหรับครู
-
วัตถุประสงค์ของกิจกรรมนี้
การใช้โครงการตัวอย่างการควบคุมถังช่วยให้นักเรียนสามารถควบคุม Clawbot ได้โดยใช้ตัวควบคุม นักเรียนจะต้องปรับพารามิเตอร์ในคำสั่ง LeftMotor.setVelocity(), RightMotor.setVelocity(), LeftMotor.spin(), RightMotor.spin(), leftMotorSpeed = Controller1.Axis3.position(), และ rightMotorSpeed = Controller1.Axis2.position() เพื่อควบคุมความเร็วสำหรับมอเตอร์แต่ละตัวของ Clawbot และเปิดใช้งาน Controller เพื่อทำการควบคุมฟังก์ชันของมอเตอร์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำแนะนำใดๆ โปรดไปที่ส่วนวิธีใช้ ในส่วน C++ ใน VEXcode V5
ต่อไปนี้เป็นโครงร่างของสิ่งที่นักเรียนจะทำในกิจกรรมนี้:
-
สำรวจโครงการตัวอย่างการควบคุมถัง
-
เข้าใจการใช้โครงสร้าง while True infinite loop
-
ทำภารกิจ Robo-Slalom ให้สำเร็จ!
| ปริมาณ | วัสดุที่ต้องใช้ |
|---|---|
| 1 |
ชุดเริ่มต้นห้องเรียน VEX V5 (พร้อมเฟิร์มแวร์ล่าสุด) |
| 1 |
VEXcode V5 (เวอร์ชันล่าสุด, Windows, macOS) |
| 1 |
สมุดบันทึกวิศวกรรม |
| 1 |
ตัวอย่างโครงการควบคุมถัง |
| 2 ขึ้นไป |
สิ่งของในห้องเรียนที่นำมาใช้เป็นอุปสรรค |
เคล็ดลับสำหรับครู
-
การใช้การกรอกอัตโนมัติ
การกรอกข้อความอัตโนมัติเป็นคุณลักษณะใน VEXcode V5 ที่ทำนายส่วนที่เหลือของคำสั่งที่คุณกำลังพิมพ์ เนื่องจากนักเรียนกำลังทำงานใน VEXcode V5 โปรดสนับสนุนให้พวกเขาใช้คุณลักษณะการกรอกอัตโนมัติเพื่อช่วยในเรื่องรูปแบบ บทความ การกรอกอัตโนมัติ ครอบคลุมถึงวิธีการใช้คุณลักษณะการกรอกอัตโนมัติ

กิจกรรมนี้จะให้เครื่องมือแก่คุณในการตั้งโปรแกรมคอนโทรลเลอร์ของคุณ
ขั้นตอนที่ 1: มาเริ่มการเขียนโปรแกรมคอนโทรลเลอร์กัน
- เปิดโครงการตัวอย่าง Tank Control
-

ดำเนินการต่อไปนี้ในสมุดบันทึกวิศวกรรมของคุณ:
คาดการณ์ว่าโครงการนี้จะให้ Clawbot ทำสิ่งใด อธิบายเพิ่มเติมถึงข้อเท็จจริงที่ว่าโครงการใช้ Controller
จอยสติ๊กเคลื่อนที่หุ่นยนต์ได้อย่างไร Clawbot กำลังทำอะไรอยู่?int main() { // Initializing Robot Configuration. DO NOT REMOVE! vexcodeInit(); // Begin project code. // Main Controller loop to set motors to controller axis positions while (true) { LeftMotor.setVelocity(Controller1.Axis3.position(), percent); RightMotor.setVelocity(Controller1.Axis2.position(), percent); LeftMotor.spin(forward); RightMotor.spin(forward); wait(5, msec); } return 0; }
กล่องเครื่องมือสำหรับครู
-
คำตอบ
- โปรเจ็กต์นี้จะใช้โครงสร้างลูปอนันต์ ในขณะที่ True เพื่อตรวจสอบอย่างต่อเนื่องว่าตำแหน่งของจอยสติ๊กซ้ายและขวาอยู่ที่ใด เมื่อจอยสติ๊กซ้าย (หรือขวา) ถูกดันขึ้น ความเร็วจะถูกตั้งตามระยะห่างที่จอยสติ๊กถูกดันไปข้างหน้า
- ดังนั้น ยิ่งผลักจอยสติ๊กไปข้างหน้ามากขึ้นเท่าไร ความเร็วก็จะยิ่งถูกปรับเร็วขึ้นเท่านั้น และมอเตอร์ก็จะเคลื่อนที่เร็วขึ้นเท่านั้น แนวคิดเดียวกันนี้ใช้ได้กับการผลักจอยสติ๊กกลับ ยิ่งผลักจอยสติ๊กไปข้างหลังมากขึ้นเท่าไร มอเตอร์ก็จะเคลื่อนที่ถอยหลังเร็วขึ้นเท่านั้น
- บันทึก ดาวน์โหลด และ โครงการตัวอย่าง Tank Control (C++)
-
หากต้องการความ โปรดดูส่วนไลบรารี VEX ใน C++ หรือดูบทช่วยสอนใน VEXcode V5 ที่อธิบายวิธีการดาวน์โหลดและเรียกใช้โปรเจ็กต์

- ตรวจสอบคำอธิบายของโครงการในสมุดบันทึกวิศวกรรมของคุณ และเพิ่มบันทึกเพื่อแก้ไขตามความจำเป็น
ขั้นตอนที่ 2: ตัวควบคุม: การควบคุมถัง
กล่องเครื่องมือสำหรับครู
-
โครงสร้างลูปอนันต์ที่แท้จริง
ขั้นตอนนี้จะกล่าวถึงความสำคัญของโครงสร้างวงจรอนันต์ ในขณะที่เป็นจริง คุณควรตรวจสอบข้อมูลเป็นชั้นเรียน คุณสามารถสร้างแบบจำลองพฤติกรรมด้วย Clawbot และ Controller ของคุณ หรือหากมีเวลา ให้ให้ผู้เรียนรันโปรแกรมโดยไม่ต้องใช้โครงสร้างวงจรอนันต์ while True
ประโยชน์จากการใช้โครงสร้างลูปอนันต์ while True มีอะไรบ้าง?
นี่คือโครงการของเราโดยไม่มีโครงสร้างลูปอนันต์ while True:
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code.
// Main Controller loop to set motors to controller axis postiions
LeftMotor.setVelocity(Controller1.Axis3.position(), percent);
RightMotor.setVelocity(Controller1.Axis2.position(), percent);
LeftMotor.spin(forward);
RightMotor.spin(forward);
}
คุณคิดว่าจะเกิดอะไรขึ้นถ้าโปรแกรมนี้ถูกเรียกใช้? หารือกันเป็นกลุ่ม จดบันทึกคำทำนายของคุณลงในสมุดบันทึกวิศวกรรม
กล่องเครื่องมือสำหรับครู
-
ทำความเข้าใจโครงสร้าง
หากไม่มีการวนซ้ำแบบไม่มีที่สิ้นสุด while True ค่าความเร็วของมอเตอร์แต่ละตัวจะถูกตั้งค่าทันทีที่โครงการทำงาน และค่าดังกล่าวจะคงที่จนกว่าโครงการจะหยุด กล่าวอีกนัยหนึ่ง หากคุณรันโปรเจ็กต์โดยไม่ขยับจอยสติ๊กใดๆ เนื่องจากตำแหน่งเริ่มต้นบนแกนของจอยสติ๊กคือ 0 ความเร็วของมอเตอร์ทั้งสองจะยังคงอยู่ที่ 0 แม้ว่าคุณจะขยับจอยสติ๊กก็ตาม
ในทำนองเดียวกัน สมมติว่าคุณเลื่อนจอยสติ๊กซ้ายขึ้นจนสุดตามแกน 3 และค้างไว้ที่นั่น หากคุณรันโปรเจ็กต์ด้านบน มอเตอร์ด้านซ้ายจะเคลื่อนที่ด้วยความเร็วเต็มที่และจะคงความเร็วเท่าเดิมแม้ว่าคุณจะเลื่อนจอยสติ๊กลงมาตามแกน 3 ก็ตาม เนื่องจาก Clawbot จะได้รับคำสั่งเริ่มต้นจาก Controller ทันทีที่รันโครงการ อย่างไรก็ตาม หากไม่มี Loop ค่าเริ่มต้นนั้นจะไม่สามารถอัปเดตได้
ลูปอนันต์ ในขณะที่เป็น True จะบอก Clawbot ให้อัปเดตความเร็วอย่างต่อเนื่องและทำงานตลอดระยะเวลาของโครงการ กล่าวอีกนัยหนึ่ง ลูปอินฟินิตี้ ในขณะที่เป็น True ในโปรเจ็กต์นี้ช่วยให้คุณสามารถเปลี่ยนความเร็วของมอเตอร์แต่ละตัวได้โดยการเลื่อนจอยสติ๊กไปตามแกน 2 หรือ 3 และ Clawbot จะตอบสนองตามนั้นจนกว่าคุณจะหยุดโปรเจ็กต์หรือปิด Clawbot
ขั้นตอนที่ 3: นำทางหลักสูตรสลาลอม!
กล่องเครื่องมือสำหรับครู
-
ตั้งค่ากิจกรรม
แบ่งกลุ่มนักเรียนออกเป็นกลุ่มย่อยๆ ละ 2 หรือ 4 คน นักเรียนหนึ่งคนควรได้รับการกำหนดให้เป็นคนขับ ซึ่งเป็นคนที่จะใช้ตัวควบคุมเพื่อควบคุม Clawbot
ให้เด็กนักเรียนทำสลาลอมนี้ให้เสร็จโดยใช้ตัวควบคุมเพื่อเคลื่อนย้าย Clawbot ไปตามด้านนอกของ "ธง" แต่ละอัน เส้นทางของ Clawbot จะต้องป้องกันไม่ให้มันสัมผัสธงใดๆ และต้องให้มันข้ามเส้นชัยได้ คุณสามารถนำธงมาใช้กับห้องเรียนหรืออุปกรณ์ใดๆ ก็ได้ที่คุณมีอยู่ในมือ (ยางลบ ม้วนเทป กล่องทิชชู่) และสามารถตั้งให้เข้าที่ก่อนจะใช้งาน Clawbot ได้
หากมีเวลา ให้ให้เด็กๆ สลับบทบาทกันเพื่อให้คนอื่นมีโอกาสขับ Clawbot คุณสามารถเปลี่ยนสิ่งนี้ให้เป็นการแข่งขันภายในกลุ่มหรือระหว่างกลุ่มได้ โดยดูว่าแต่ละคนสามารถขับสลาลอมได้เร็วแค่ไหน

สลาลอมเป็นสนามที่ผู้เข้าร่วมจะต้องเคลื่อนที่ไปรอบๆ ธงหรือเครื่องหมายที่กำหนด สกีสลาลอมเป็นกีฬาฤดูหนาวยอดนิยมและรวมอยู่ในโอลิมปิกฤดูหนาว
ตอนนี้ Controller จับคู่กับ แล้ว และโครงการ C++ ดาวน์โหลดเป็น คุณพร้อมที่จะเคลื่อนย้าย Clawbot ของคุณโดยใช้ Controller แล้ว!
- รวบรวมอุปกรณ์ห้องเรียนทั้งสี่ชิ้นที่คุณจะใช้เป็นธงในการสลาลอมจากครู
- ร่วมมือกันกำหนดธงเพื่อให้คนขับสามารถนำทาง Clawbot ไปตามแผนผังสลาลอม
- ดาวน์โหลดโครงการตัวอย่างการควบคุมถัง หากมีคำถามเกี่ยวกับวิธีการดาวน์โหลดโครงการ โปรดดูบทช่วยสอนการดาวน์โหลดและเรียกใช้โครงการ
ขั้นตอนที่ 4: โรโบสลาลอม

ใช้ตัวควบคุมเพื่อเคลื่อนย้าย Clawbot ของคุณไปตามด้านนอกของ "ธง" แต่ละอัน เส้นทางของหุ่นยนต์จะต้องไม่สัมผัสกับธงใด ๆ และต้องสามารถผ่านเส้นชัยได้
- รันโครงการและขับ Clawbot ไปข้างหน้าและถอยหลัง และเลี้ยวซ้ายและขวาโดยใช้จอยสติ๊กทั้งสองอัน
- กำหนดเวลาที่ Clawbot ใช้ในการจบหลักสูตร บันทึกเวลาไว้ในสมุดบันทึกวิศวกรรม
- คุณสามารถผ่านหลักสูตร Slalom ด้วย Clawbot ได้เร็วแค่ไหน?
กระตุ้นให้เกิดการสนทนา
-
การสะท้อนถึงกิจกรรม
ถาม: Clawbot ตอบสนองต่อตัวควบคุมตามที่คุณคาดหวังไว้หรือไม่
ก: คำตอบจะแตกต่างกันไป อย่างไรก็ตาม เป้าหมายของคำถามนี้คือเพื่อส่งเสริมการคิดเชิงองค์ความรู้ นักเรียนเริ่มต้นด้วยการทำนายพฤติกรรมก่อนที่จะทดสอบ บันทึกผลลัพธ์ และสะท้อนกลับ
ถาม: ความท้าทายที่ใหญ่ที่สุดในการเคลื่อน Clawbot ไปข้างหน้าหรือถอยหลังเป็นเส้นตรงคืออะไร
A: แม้ว่าคำตอบอาจแตกต่างกันไป แต่การตอบสนองทั่วไปควรเป็นว่าจอยสติ๊กทั้งสองอันจะต้องเคลื่อนที่พร้อมกันเพื่อให้แน่ใจว่ามอเตอร์ของ Clawbot กำลังเคลื่อนที่ไปในทิศทางเดียวกันและด้วยความเร็วเท่ากัน
ถาม: การใช้ลูปอินฟินิตี้ ในขณะที่เป็น True ช่วยให้คุณสามารถใช้คอนโทรลเลอร์เพื่อเคลื่อน Clawbot ได้อย่างต่อเนื่องอย่างไร
A: หากไม่มีการวนซ้ำแบบไม่มีที่สิ้นสุด ในขณะที่เป็น True Clawbot จะดำเนินการตามพฤติกรรมที่กำหนดโดยคำแนะนำในโปรเจ็กต์เพียงครั้งเดียวเท่านั้น ลูปอินฟินิตี้ while True จะสั่งให้ Clawbot อัปเดตความเร็วอย่างต่อเนื่องและทำงานตลอดระยะเวลาของโครงการ กล่าวอีกนัยหนึ่ง การวนซ้ำแบบไม่มีที่สิ้นสุด ในขณะที่เป็น True ช่วยให้คุณสามารถใช้ตัวควบคุมเพื่อเคลื่อนย้าย Clawbot ได้อย่างไม่มีกำหนดเวลา หรือจนกว่าแบตเตอรี่จะหมด