Skip to main content

ตัวควบคุม: การสำรวจการขับเคลื่อนถัง - Python

ไอคอนกล่องเครื่องมือครู กล่องเครื่องมือสำหรับครู - วัตถุประสงค์ของส่วนนี้

การใช้โครงการตัวอย่างการควบคุมถังช่วยให้นักเรียนสามารถควบคุม Clawbot ได้โดยใช้ตัวควบคุม นักเรียนจะต้องปรับพารามิเตอร์ในคำสั่ง left_motor.set_velocity(), right_motor.set_velocity(), left_motor.spin(), right_motor.spin(), left_motor_speed = controller_1.axis3.position() และ right_motor_speed = controller_1.axis2.position() เพื่อควบคุมความเร็วสำหรับมอเตอร์แต่ละตัวของ Clawbot และเปิดใช้งานตัวควบคุมเพื่อควบคุมฟังก์ชันของมอเตอร์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำแนะนำใดๆ โปรดไปที่ส่วนวิธีใช้ Python ใน VEXcode V5

ต่อไปนี้เป็นโครงร่างของสิ่งที่นักเรียนจะทำในกิจกรรมนี้:

  1. สำรวจโครงการตัวอย่างการควบคุมถัง
  2. เข้าใจการใช้โครงสร้าง while True infinite loop 
  3. ทำภารกิจ Robo-Slalom ให้สำเร็จ!

ไอคอนเคล็ดลับสำหรับครู เคล็ดลับสำหรับครู

หากนี่เป็นครั้งแรกที่นักเรียนใช้ VEXcode V5 พวกเขาสามารถเข้าถึงบทความที่มีประโยชน์มากมายในไลบรารี VEX ได้ บทความ 

วัสดุที่ต้องใช้:
ปริมาณ วัสดุที่ต้องใช้
1

ชุดเริ่มต้นห้องเรียน VEX V5 (พร้อมเฟิร์มแวร์ล่าสุด)

1

VEXcode V5 (เวอร์ชันล่าสุด, Windows, macOS)

1

สมุดบันทึกวิศวกรรม

1

ตัวอย่างโครงการควบคุมถัง

2 ขึ้นไป

วัตถุในห้องเรียนที่จะใช้เป็นอุปสรรค

ไอคอนเคล็ดลับสำหรับครู เคล็ดลับสำหรับครู - การใช้การกรอกอัตโนมัติ

การกรอกข้อความอัตโนมัติเป็นคุณลักษณะใน VEXcode V5 ที่ทำนายส่วนที่เหลือของคำสั่งที่คุณกำลังพิมพ์ เนื่องจากนักเรียนกำลังทำงานใน VEXcode V5 โปรดสนับสนุนให้พวกเขาใช้คุณลักษณะการกรอกอัตโนมัติเพื่อช่วยในเรื่องไวยากรณ์ Python คุณอาจสังเกตเห็นฟังก์ชั่นการกรอกอัตโนมัติขณะที่คุณเริ่มพิมพ์คำสั่ง ใช้ปุ่ม “ขึ้น” และ “ลง” เพื่อเลือกชื่อที่คุณต้องการ จากนั้นกด “Tab” หรือ (Enter/Return) บนแป้นพิมพ์ของคุณเพื่อเลือก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ โปรดดูPython

พิมพ์ VEXcode V5 พร้อมคำสั่งเริ่มต้น Drivetrain ทางด้านซ้าย และพิมพ์รายการตัวเลือกกรอกอัตโนมัติแบบเลื่อนได้สำหรับคำสั่งนั้นทางด้านขวา

กิจกรรมนี้จะให้เครื่องมือแก่คุณในการตั้งโปรแกรมคอนโทรลเลอร์ของคุณ 

  • คำสั่ง VEXcode V5 Python ที่จะใช้ในการสำรวจนี้:
    • มอเตอร์ซ้าย.ตั้งค่าความเร็ว()
    • มอเตอร์ขวา.ตั้งค่าความเร็ว()
    • มอเตอร์ซ้ายหมุน()
    • มอเตอร์หมุนขวา()
    • ตัวควบคุม_1.แกน2.ตำแหน่ง()
    • ตัวควบคุม_1.แกน3.ตำแหน่ง()
    • ในขณะที่จริง: 
    • รอ (5, วินาที)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำแนะนำใดๆ โปรดไปที่ส่วน Python วิธีใช้  ใน VEXcode V5 

VEXcode V5 จะแสดงโดยมีกล่องเครื่องมือเปิดอยู่ทางด้านซ้ายสุด และคำสั่งวิธีใช้สำหรับไดรฟ์เปิดอยู่ทางด้านขวาสุด ความช่วยเหลือจะแสดงคำจำกัดความของคำสั่งและข้อมูลเกี่ยวกับวิธีการใช้งาน

ขั้นตอนที่ 1: มาเริ่มการเขียนโปรแกรมคอนโทรลเลอร์กัน

  • เลือกไฟล์และเปิดตัวอย่าง
  • แถบเครื่องมือ VEXcode V5 พร้อมเมนูไฟล์ที่เปิดอยู่และเปิดตัวอย่างที่เน้นด้วยกล่องสีแดง เปิดตัวอย่างเป็นรายการเมนูที่สี่ภายใต้ โปรเจ็กต์บล็อกใหม่ โปรเจ็กต์ข้อความใหม่ และ เปิด
  • เลื่อนดูโครงการตัวอย่าง ที่แตกต่างกัน เลือกโครงการตัวอย่างการควบคุมถัง

โครงการตัวอย่างใน VEXcode V5 พร้อมกล่องสีแดงรอบ ๆ ฟิลเตอร์ Sensing ที่ด้านบน และไอคอนโครงการตัวอย่าง Tank Control ที่ด้านล่างขวา

  • เปิดโครงการตัวอย่างการควบคุมถัง โครงการตัวอย่างนี้จะกำหนดค่าระบบส่งกำลังและตัวควบคุม โค้ดจะมีลักษณะดังตัวอย่างต่อไปนี้:

	# Library imports
	from vex import *

	# Begin project code
	# Main Controller loop to set motors to controller axis postiions
	while True:
		left_motor.set_velocity(controller_1.axis3.position(), PERCENT)
		right_motor.set_velocity(controller_1.axis2.position(), PERCENT)
		left_motor.spin(FORWARD)
		right_motor.spin(FORWARD)
		wait(5, MSEC)

ดำเนินการดังต่อไปนี้ในสมุดบันทึกวิศวกรรมของคุณ:

  1. ทำนายว่าโครงการจะให้ Clawbot ทำสิ่งใด อธิบายเพิ่มเติมถึงข้อเท็จจริงที่ว่าโครงการใช้งาน Controller
  2. จอยสติ๊กทำให้หุ่นยนต์เคลื่อนไหวได้อย่างไร? Clawbot กำลังทำอะไรอยู่?

ไอคอนกล่องเครื่องมือครู กล่องเครื่องมือสำหรับครู - คำตอบ

  1. โปรเจ็กต์นี้จะใช้โครงสร้างลูปอนันต์ ในขณะที่ True เพื่อตรวจสอบอย่างต่อเนื่องว่าตำแหน่งของจอยสติ๊กซ้ายและขวาอยู่ที่ใด เมื่อจอยสติ๊กซ้าย (หรือขวา) ถูกดันขึ้น ความเร็วจะถูกตั้งตามระยะห่างที่จอยสติ๊กถูกดันไปข้างหน้า 
  2. ดังนั้น ยิ่งผลักจอยสติ๊กไปข้างหน้ามากขึ้นเท่าไร ความเร็วก็จะยิ่งถูกปรับเร็วขึ้นเท่านั้น และมอเตอร์ก็จะเคลื่อนที่เร็วขึ้นเท่านั้น แนวคิดเดียวกันนี้ใช้ได้กับการผลักจอยสติ๊กกลับ ยิ่งผลักจอยสติ๊กไปข้างหลังมากขึ้นเท่าไร มอเตอร์ก็จะเคลื่อนที่ถอยหลังเร็วขึ้นเท่านั้น
  • ตั้งชื่อโครงการ TankControl บันทึก ดาวน์โหลด และเรียกใช้โครงการ Python TankControl

กล่องโต้ตอบชื่อโครงการใน VEXcode V5 จะอ่านว่า Tank Control และแสดงว่าได้เลือกสล็อต 1 แล้ว

  • หากต้องการข้อมูลความช่วยเหลือเพิ่มเติม โปรดดูวิดีโอการสอนใน VEXcode V5 ที่อธิบายวิธีการดาวน์โหลดและเรียกใช้โปรเจ็กต์

แถบเครื่องมือใน VEXcode V5 พร้อมกล่องสีแดงรอบไอคอนบทช่วยสอน แถบเครื่องมือจะแสดงโลโก้ V5 จากซ้ายไปขวา ไอคอนโลก ไฟล์ และบทช่วยสอน

  • ตรวจสอบคำอธิบายของโครงการในสมุดบันทึกวิศวกรรมของคุณ และเพิ่มบันทึกเพื่อแก้ไขตามความจำเป็น

ขั้นตอนที่ 2: ตัวควบคุม:  การควบคุมถัง

ไอคอนกล่องเครื่องมือครู กล่องเครื่องมือสำหรับครู - โครงสร้างลูปอนันต์ที่แท้จริง

ขั้นตอนนี้จะกล่าวถึงความสำคัญของโครงสร้างวงจรอนันต์ ในขณะที่เป็นจริง คุณควรตรวจสอบข้อมูลเป็นชั้นเรียน คุณสามารถสร้างแบบจำลองพฤติกรรมด้วย Clawbot และ Controller ของคุณ หรือหากมีเวลา ให้ให้ผู้เรียนรันโปรแกรมโดยไม่ต้องใช้โครงสร้างวงจรอนันต์ while True

หากนักเรียนต้องการความช่วยเหลือเพิ่มเติมในการทำความเข้าใจลูปอินฟินิตี้ ในขณะที่เป็นจริง โปรดคลิก ที่นี่

ประโยชน์จากการใช้โครงสร้างลูปอนันต์ while True มีอะไรบ้าง?

นี่คือโครงการของเราโดยไม่มีโครงสร้างลูปอนันต์ while True:

# Library imports
	from vex import *
	
	# Begin project code
	# Main Controller loop to set motors to controller axis postiions
	
	left_motor.set_velocity(controller_1.axis3.position(), PERCENT)
	right_motor.set_velocity(controller_1.axis2.position(), PERCENT)
	left_motor.spin(FORWARD)
	right_motor.spin(FORWARD)


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

ไอคอนกล่องเครื่องมือครู กล่องเครื่องมือสำหรับครู - ทำความเข้าใจโครงสร้าง

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

ในทำนองเดียวกัน สมมติว่าคุณเลื่อนจอยสติ๊กซ้ายขึ้นจนสุดตามแกน 3 และค้างไว้ที่นั่น หากคุณรันโปรเจ็กต์ด้านบน มอเตอร์ด้านซ้ายจะเคลื่อนที่ด้วยความเร็วเต็มที่และจะคงความเร็วเท่าเดิมแม้ว่าคุณจะเลื่อนจอยสติ๊กลงมาตามแกน 3 ก็ตาม เนื่องจาก Clawbot จะได้รับคำสั่งเริ่มต้นจาก Controller ทันทีที่รันโครงการ อย่างไรก็ตาม หากไม่มี Loop ค่าเริ่มต้นนั้นจะไม่สามารถอัปเดตได้

ลูปอนันต์ ในขณะที่เป็น True จะบอก Clawbot ให้อัปเดตความเร็วอย่างต่อเนื่องและทำงานตลอดระยะเวลาของโครงการ กล่าวอีกนัยหนึ่ง ลูปอินฟินิตี้ ในขณะที่เป็น True ในโปรเจ็กต์นี้ช่วยให้คุณสามารถเปลี่ยนความเร็วของมอเตอร์แต่ละตัวได้โดยการเลื่อนจอยสติ๊กไปตามแกน 2 หรือ 3 และ Clawbot จะตอบสนองตามนั้นจนกว่าคุณจะหยุดโปรเจ็กต์หรือปิด Clawbot

# Library imports
	from vex import *
	
	# Begin project code
	# Main Controller loop to set motors to controller axis postiions
	while True:
		left_motor.set_velocity(controller_1.axis3.position(), PERCENT)
		right_motor.set_velocity(controller_1.axis2.position(), PERCENT)
		left_motor.spin(FORWARD)
		right_motor.spin(FORWARD)
		wait(5, MSEC)

นำทางเส้นทางสลาลอม!

ไอคอนกล่องเครื่องมือครู กล่องเครื่องมือสำหรับครู - ตั้งค่ากิจกรรม

แบ่งกลุ่มนักเรียนออกเป็นกลุ่มย่อยๆ ละ 2 หรือ 4 คน นักเรียนหนึ่งคนควรได้รับการกำหนดให้เป็นคนขับ ซึ่งเป็นคนที่จะใช้ตัวควบคุมเพื่อควบคุม Clawbot

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

หากมีเวลา ให้ให้เด็กๆ สลับบทบาทกันเพื่อให้คนอื่นมีโอกาสขับ Clawbot คุณสามารถเปลี่ยนสิ่งนี้ให้เป็นการแข่งขันภายในกลุ่มหรือระหว่างกลุ่มได้ โดยดูว่าแต่ละคนสามารถขับสลาลอมได้เร็วแค่ไหน

นักเล่นสโนว์บอร์ดกำลังแข่งขันลงเนินบนเนินที่ปกคลุมไปด้วยหิมะ โดยต้องผ่านประตูสีแดงและสีน้ำเงินที่ตั้งเรียงกันเป็นลายซิกแซก

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

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

ภาพประกอบสนามสลาลอมบนหิมะ พร้อมป้าย 'เริ่มต้น' ที่ด้านบน และเส้นชัยที่ด้านล่าง ในระหว่างนั้น เส้นทางซิกแซกแบบจุดๆ จะทอระหว่างธงสีน้ำเงินและสีแดงสลับกัน

ใช้ตัวควบคุมเพื่อเคลื่อนย้าย Clawbot ของคุณไปตามด้านนอกของ "ธง" แต่ละอัน เส้นทางของหุ่นยนต์จะต้องไม่สัมผัสกับธงใด ๆ และต้องสามารถผ่านเส้นชัยได้

  • รันโครงการและขับ Clawbot ไปข้างหน้าและถอยหลัง และเลี้ยวซ้ายและขวาโดยใช้จอยสติ๊กทั้งสองอัน
  • กำหนดเวลาที่ Clawbot ใช้ในการจบหลักสูตร บันทึกเวลาไว้ในสมุดบันทึกวิศวกรรม
  • คุณสามารถผ่านหลักสูตร Slalom ด้วย Clawbot ได้เร็วแค่ไหน?
     

ไอคอนสร้างแรงจูงใจในการสนทนา กระตุ้นให้เกิดการสนทนา - การสะท้อนถึงกิจกรรม

ถาม: Clawbot ตอบสนองต่อตัวควบคุมตามที่คุณคาดหวังไว้หรือไม่

A: คำตอบจะแตกต่างกันไป อย่างไรก็ตาม เป้าหมายของคำถามนี้คือเพื่อส่งเสริมการคิดเชิงองค์ความรู้ นักเรียนเริ่มต้นด้วยการทำนายพฤติกรรมก่อนที่จะทดสอบ บันทึกผลลัพธ์ และสะท้อนกลับ

ถาม: ความท้าทายที่ใหญ่ที่สุดในการเคลื่อน Clawbot ไปข้างหน้าหรือถอยหลังเป็นเส้นตรงคืออะไร

A: แม้ว่าคำตอบอาจแตกต่างกันไป แต่การตอบสนองทั่วไปควรเป็นว่าจอยสติ๊กทั้งสองอันจะต้องเคลื่อนที่พร้อมกันเพื่อให้แน่ใจว่ามอเตอร์ของ Clawbot กำลังเคลื่อนที่ไปในทิศทางเดียวกันและด้วยความเร็วเท่ากัน

ถาม: การใช้ลูปอินฟินิตี้ ขณะเป็น True ช่วยให้คุณสามารถใช้คอนโทรลเลอร์เพื่อเคลื่อน Clawbot ได้อย่างต่อเนื่องอย่างไร

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