การเคลื่อนไหว#
การแนะนำ#
มอเตอร์ควบคุมการเคลื่อนที่ของชิ้นส่วนต่างๆ ของหุ่นยนต์ มอเตอร์สามารถใช้ยกแขน หมุนกรงเล็บ หมุนล้อ หรือเคลื่อนย้ายส่วนอื่นๆ ของโครงสร้างได้ มอเตอร์สองตัวสามารถทำงานร่วมกันเป็น ระบบขับเคลื่อน เพื่อเคลื่อนย้ายและหมุนหุ่นยนต์ทั้งตัว
มอเตอร์แต่ละตัวจะถูกกำหนดค่าในหน้าต่างอุปกรณ์ ชื่อมอเตอร์อาจเปลี่ยนแปลงได้ขึ้นอยู่กับเวอร์ชันของหุ่นยนต์ ตัวอย่างเช่น เวอร์ชัน Competition Advanced 2.0 จะมีมอเตอร์ชื่อ arm_motorหุ่นยนต์ที่ออกแบบเองอาจใช้ชื่อมอเตอร์ที่แตกต่างออกไป
โดยค่าเริ่มต้น FORWARD จะหมุนมอเตอร์ทวนเข็มนาฬิกา และ REVERSE จะหมุนมอเตอร์ตามเข็มนาฬิกา หากตั้งค่ามอเตอร์ให้หมุนกลับทิศทางในหน้าต่างอุปกรณ์ ทิศทางการหมุนเหล่านั้นจะสลับกัน
มีวิธีการเขียนโค้ดสำหรับมอเตอร์อยู่หลายวิธี ด้านล่างนี้คือรายการวิธีการเคลื่อนที่ทั้งหมด:
การดำเนินการ — หยุดและหมุนมอเตอร์
spin— หมุนมอเตอร์ไปข้างหน้าหรือถอยหลังตลอดไปspin_for— หมุนมอเตอร์เป็นระยะทางที่กำหนดspin_to_position— หมุนมอเตอร์ไปยังตำแหน่งที่กำหนดstop— หยุดมอเตอร์ไม่ให้หมุน
ตัวปรับค่า — ปรับการตั้งค่ามอเตอร์
set_velocity— บอกมอเตอร์ให้หมุนเร็วแค่ไหนset_max_torque— กำหนดว่ามอเตอร์สามารถผลักได้แรงแค่ไหนในขณะที่หมุนset_position— เปลี่ยนตำแหน่งปัจจุบันของมอเตอร์เป็นค่าใหม่set_stopping— กำหนดวิธีการหยุดการเคลื่อนที่ของมอเตอร์: โดยการเบรก การปล่อยให้ไหลไปเอง หรือการหยุดนิ่งset_timeout— ตั้งค่าระยะเวลาที่มอเตอร์จะพยายามทำการเคลื่อนไหวให้เสร็จสิ้น
ตัวตรวจสอบสถานะมอเตอร์ — ตรวจสอบสถานะมอเตอร์
get_position— ส่งคืนตำแหน่งปัจจุบันของมอเตอร์get_velocity— ส่งคืนความเร็วในการหมุนของมอเตอร์เป็นเปอร์เซ็นต์ตั้งแต่ -100% ถึง 100%get_current— ส่งคืนพลังงานที่มอเตอร์ใช้จากแบตเตอรี่เป็นเปอร์เซ็นต์ตั้งแต่ 0% ถึง 100%is_stopped— ส่งคืนค่าบูลีนว่ามอเตอร์หยุดเคลื่อนที่แล้วหรือไม่is_moving— ส่งคืนว่ามอเตอร์กำลังหมุนอยู่หรือไม่ ในรูปแบบค่าบูลีน
การกระทำ#
spin#
คำสั่ง spin จะหมุนมอเตอร์ไปข้างหน้าหรือถอยหลังอย่างไม่มีที่สิ้นสุด มอเตอร์จะหมุนต่อไปจนกว่าจะได้รับคำสั่งอื่น เช่น หมุนไปในทิศทางอื่นหรือหยุด
Usage:
arm_motor.spin(direction)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ทิศทางการหมุนของมอเตอร์: |
# Build Used: Competition Advanced 2.0
def main():
# Raise the ArmMotor, then stop
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
spin_for#
คำสั่ง spin_for จะหมุนมอเตอร์เป็นระยะทางที่กำหนด การหมุนนั้นสัมพันธ์กับตำแหน่งปัจจุบันของมอเตอร์ โปรเจ็กต์จะรอจนกว่ามอเตอร์จะหยุดหมุนก่อนที่โค้ดบรรทัดถัดไปจะทำงาน
Usage:
arm_motor.spin_for(direction, angle, units, wait)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ทิศทางการหมุนของมอเตอร์: |
|
ระยะทางที่มอเตอร์หมุน |
|
เลือกได้ หน่วยระยะทาง: |
|
ตัวเลือกเสริม |
# Build Used: Competition Advanced 2.0
def main():
# Raise and lower the ArmMotor
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
arm_motor.spin_for(FORWARD, 180, DEGREES)
# Start threads — Do not delete
start_thread(main)
spin_to_position#
spin_to_position หมุนมอเตอร์ไปยังตำแหน่งที่กำหนด
ตำแหน่งของมอเตอร์คือระยะที่มอเตอร์หมุน โดยวัดเป็น DEGREES หรือ TURNSหนึ่งรอบเท่ากับ 360 องศา ในตอนเริ่มต้นโครงการ ตำแหน่งของมอเตอร์จะถูกตั้งค่าเป็น 0 องศา นอกจากนี้ยังสามารถตั้งค่าตำแหน่งของมอเตอร์ได้โดยใช้เมธอด set_position
ค่าตำแหน่งเป็นค่าสัมบูรณ์ ซึ่งหมายความว่าทิศทางการหมุนขึ้นอยู่กับตำแหน่งปัจจุบันของมอเตอร์
ตัวอย่างเช่น หากมอเตอร์เริ่มหมุนที่ 0 องศาและหมุนไปที่ตำแหน่ง 720 องศา มันจะหมุนไปข้างหน้าสองรอบ หากจากนั้นมันหมุนไปที่ตำแหน่ง 360 องศา มันจะหมุนถอยหลังหนึ่งรอบ เพราะ 360 น้อยกว่า 720
Usage:
arm_motor.spin_to_position(angle, units, wait)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ค่าตำแหน่งที่มอเตอร์จะหมุนไป |
|
เลือกได้ตามต้องการ หน่วยตำแหน่ง: |
|
ตัวเลือกเสริม |
# Build Used: Competition Advanced 2.0
def main():
# Return ArmMotor to 0 degrees after raising
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
arm_motor.spin_to_position(0, DEGREES)
# Start threads — Do not delete
start_thread(main)
stop#
stop หยุดมอเตอร์ไม่ให้หมุน
Usage:
arm_motor.stop()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Build Used: Competition Advanced 2.0
def main():
# Raise the ArmMotor
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
ตัวกลายพันธุ์#
set_velocity#
คำสั่ง set_velocity จะบอกมอเตอร์ว่าควรหมุนเร็วแค่ไหน ค่าเปอร์เซ็นต์ที่สูงขึ้นจะทำให้มอเตอร์หมุนเร็วขึ้น และค่าเปอร์เซ็นต์ที่ต่ำลงจะทำให้มอเตอร์หมุนช้าลง
ทุกโปรเจกต์เริ่มต้นด้วยมอเตอร์แต่ละตัวหมุนด้วยความเร็ว 50% เป็นค่าเริ่มต้น
หมายเหตุ: ความเร็วที่สูงขึ้นจะทำให้มอเตอร์หมุนเร็วขึ้น แต่ความแม่นยำอาจลดลง ความเร็วที่ต่ำลงจะทำให้มอเตอร์หมุนช้าลง แต่ความแม่นยำอาจเพิ่มขึ้น
Usage:
arm_motor.set_velocity(velocity)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ความเร็วในการหมุนสามารถกำหนดได้ตั้งแต่ 0% ถึง 100% โดยสามารถเป็นจำนวนเต็ม |
# Build Used: Competition Advanced 2.0
def main():
# Move the ArmMotor at different velocities
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
# Move slow
arm_motor.set_velocity(20)
arm_motor.spin_for(FORWARD, 180, DEGREES)
wait(1, SECONDS)
# Move fast
arm_motor.set_velocity(100)
arm_motor.spin_for(REVERSE, 180, DEGREES)
# Start threads — Do not delete
start_thread(main)
set_max_torque#
แรงบิดคือแรงหมุน มันแสดงให้เห็นว่ามอเตอร์สามารถผลักหรือดึงได้แรงแค่ไหนเมื่อมันหมุน
set_max_torque กำหนดแรงบิดสูงสุดที่มอเตอร์สามารถใช้ได้
ค่าเปอร์เซ็นต์ที่สูงขึ้นจะทำให้มอเตอร์ออกแรงมากขึ้น เช่น เมื่อยกของหนัก ค่าเปอร์เซ็นต์ที่ต่ำลงจะจำกัดแรงที่มอเตอร์สามารถออกได้ ซึ่งจะช่วยป้องกันหุ่นยนต์ได้หากมอเตอร์ติดขัดหรือเคลื่อนที่ไปจนถึงขีดจำกัดสูงสุด
ทุกโปรเจกต์เริ่มต้นด้วยแรงบิดของมอเตอร์แต่ละตัวที่ 50% เป็นค่าเริ่มต้น
Usage:
arm_motor.set_max_torque(value)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
แรงบิดสูงสุดที่มอเตอร์สามารถใช้ได้ตั้งแต่ 0% ถึง 100% ค่านี้สามารถเป็นจำนวนเต็ม |
# Build Used: Competition Advanced 2.0
def main():
# Move the ArmMotor at different torques
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
# Move with less torque
arm_motor.set_max_torque(20)
arm_motor.spin_for(FORWARD, 180, DEGREES)
wait(1, SECONDS)
# Move with maximum torque
arm_motor.set_max_torque(100)
arm_motor.spin_for(REVERSE, 180, DEGREES)
# Start threads — Do not delete
start_thread(main)
set_position#
ตำแหน่งของมอเตอร์คือระยะที่มอเตอร์หมุนไป โดยวัดเป็น DEGREES หรือ TURNSหนึ่งรอบเท่ากับ 360 องศา set_position เปลี่ยนตำแหน่งปัจจุบันของมอเตอร์เป็นค่าใหม่
ตัวอย่างเช่น หากมอเตอร์หมุนไปถึง 180 องศา การตั้งตำแหน่งเป็น 0 องศาจะรีเซ็ตตำแหน่งนั้นจาก 180 องศาเป็น 0 องศา จากนั้นมอเตอร์จะสามารถหมุนไปยังตำแหน่งต่างๆ ตามค่าใหม่นั้นได้
Usage:
arm_motor.set_position(position, units)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ค่าตำแหน่งที่จะตั้งค่าสำหรับมอเตอร์ |
|
เลือกได้ตามต้องการ หน่วยตำแหน่ง: |
# Build Used: Competition Advanced 2.0
def main():
# Return ArmMotor to 0 degrees after raising
arm_motor.set_position(0, DEGREES)
arm_motor.spin_for(REVERSE, 180, DEGREES)
wait(1, SECONDS)
arm_motor.spin_to_position(0, DEGREES)
# Start threads — Do not delete
start_thread(main)
set_stopping#
set_stopping กำหนดวิธีการหยุดมอเตอร์: โดยการเบรก การปล่อยให้ไหลไปเอง หรือการหยุดนิ่ง
Usage:
arm_motor.set_stopping(mode)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
วิธีที่มอเตอร์จะหยุด:
|
For example, if a Competition Advanced 2.0 build is used and arm_motor is set to HOLD, the motor will hold the arm at its current position until another arm movement happens. This means the motor will work against gravity to keep the arm in the air if the motor was stopped with the arm raised.
หากไม่ใช้วิธีนี้ มอเตอร์จะใช้ BRAKE เมื่อหยุด
# Build Used: Competition Advanced 2.0
def main():
# Move the ArmMotor, then coast to a stop
arm_motor.set_velocity(20)
arm_motor.set_stopping(COAST)
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
set_timeout#
set_timeout กำหนดเวลาที่มอเตอร์จะพยายามทำการเคลื่อนไหวให้เสร็จสิ้น หากมอเตอร์ไม่สามารถทำการเคลื่อนไหวให้เสร็จสิ้นภายในเวลาที่กำหนด มันจะหยุดพยายามและไปยังบรรทัดโค้ดถัดไป ซึ่งจะช่วยป้องกันไม่ให้มอเตอร์ติดขัดในการเคลื่อนไหว
Usage:
arm_motor.set_timeout(value, units)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ระยะเวลาที่มอเตอร์สามารถพยายามทำการเคลื่อนที่ให้เสร็จสิ้นได้ ค่านี้อาจเป็นจำนวนเต็มบวก |
|
เลือกได้ หน่วยเวลา: |
# Build Used: Competition Advanced 2.0
def main():
# Move ArmMotor as far as possible for 1 second before resetting
arm_motor.set_position(0, DEGREES)
arm_motor.set_timeout(1, SECONDS)
arm_motor.spin_for(REVERSE, 180, DEGREES)
arm_motor.spin_to_position(0, DEGREES)
# Start threads — Do not delete
start_thread(main)
ผู้รับ#
get_position#
ตำแหน่งของมอเตอร์คือระยะที่มอเตอร์หมุนไป โดยวัดเป็น DEGREES หรือ TURNSหนึ่งรอบเท่ากับ 360 องศา get_position จะส่งคืนตำแหน่งปัจจุบันของมอเตอร์
ในตอนเริ่มต้นโครงการ ตำแหน่งของมอเตอร์จะถูกตั้งไว้ที่ 0 องศา หากมอเตอร์หมุนไปข้างหน้าหนึ่งรอบ ตำแหน่งจะเปลี่ยนเป็น 360 องศา หรือ 1 รอบ หากมอเตอร์หมุนไปในทิศทางตรงกันข้าม ตำแหน่งจะเปลี่ยนเป็นค่าลบ
Usage:
arm_motor.get_position(units)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ตัวเลือกเสริม หน่วยสำหรับปรับตำแหน่งมอเตอร์กลับไปที่: |
# Build Used: Competition Advanced 2.0
def main():
# Display how far the ArmMotor moves after one second
arm_motor.set_position(0, DEGREES)
console.print("Start: ")
console.print(arm_motor.get_position(DEGREES))
console.new_line()
arm_motor.spin(REVERSE)
wait(1, SECONDS)
arm_motor.stop()
console.print("After: ")
console.print(arm_motor.get_position(DEGREES))
# Start threads — Do not delete
start_thread(main)
get_velocity#
get_velocity จะส่งคืนค่าความเร็วในการหมุนของมอเตอร์เป็นเปอร์เซ็นต์ ตั้งแต่ -100% ถึง 100%
ค่าบวกหมายความว่ามอเตอร์หมุนไปข้างหน้า ค่าลบหมายความว่ามอเตอร์หมุนย้อนกลับ
Usage:
arm_motor.get_velocity()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Build Used: Competition Advanced 2.0
def main():
# Display the ArmMotor's velocity when it moves
console.print("Resting: ")
console.print(arm_motor.get_velocity())
console.new_line()
arm_motor.spin(REVERSE)
wait(1, SECONDS)
console.print("Moving: ")
console.print(arm_motor.get_velocity())
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
get_current#
get_current จะส่งคืนค่ากำลังไฟฟ้าที่มอเตอร์ใช้จากแบตเตอรี่เป็นเปอร์เซ็นต์ ตั้งแต่ 0% ถึง 100%
ค่ากระแสไฟฟ้าที่สูงขึ้นหมายความว่ามอเตอร์กำลังใช้พลังงานมากขึ้น ซึ่งอาจเกิดขึ้นเมื่อมอเตอร์กำลังยกของหนัก ดันกับวัตถุ หรือพยายามเคลื่อนที่เมื่อติดอยู่
Usage:
arm_motor.get_current()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Build Used: Competition Advanced 2.0
def main():
# Display the motor's current when it moves
console.print("Resting: ")
console.print(arm_motor.get_current())
console.new_line()
arm_motor.spin(REVERSE)
wait(1, SECONDS)
console.print("Moving: ")
console.print(arm_motor.get_current())
arm_motor.stop()
# Start threads — Do not delete
start_thread(main)
is_stopped#
is_stopped จะส่งคืนค่าบูลีนว่ามอเตอร์หยุดเคลื่อนที่แล้วหรือไม่ ค่านี้สามารถใช้ควบคุมจังหวะเวลาของพฤติกรรมอื่นๆ โดยอิงจากการเคลื่อนที่ของมอเตอร์ได้
True— มอเตอร์หยุดทำงานแล้วFalse— มอเตอร์ยังคงหมุนอยู่
วิธีนี้ทำงานร่วมกับเมธอด Motion ต่อไปนี้ที่มีพารามิเตอร์ wait : spin_for และ spin_to_position
Usage:
arm_motor.is_stopped()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Build Used: Competition Advanced 2.0
def main():
# Turn the Eye Sensor's light on while ArmMotor is moving
arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
wait(0.1, SECONDS)
while True:
if arm_motor.is_stopped():
eye.set_light(OFF)
else:
eye.set_light(ON)
# Start threads — Do not delete
start_thread(main)
is_moving#
is_moving จะส่งคืนค่าบูลีนว่ามอเตอร์กำลังหมุนอยู่หรือไม่ ค่านี้สามารถใช้ควบคุมจังหวะเวลาของพฤติกรรมอื่นๆ โดยอิงจากการเคลื่อนที่ของมอเตอร์ได้
True— มอเตอร์กำลังหมุนFalse— มอเตอร์ไม่หมุน
วิธีนี้ทำงานร่วมกับเมธอด Motion ต่อไปนี้ที่มีพารามิเตอร์ wait : spin_for และ spin_to_position
Usage:
arm_motor.is_moving()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Build Used: Competition Advanced 2.0
def main():
# Turn the Eye Sensor's light on while ArmMotor is moving
arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
wait(0.1, SECONDS)
while True:
if arm_motor.is_moving():
eye.set_light(ON)
else:
eye.set_light(OFF)
# Start threads — Do not delete
start_thread(main)