VEX IQ Smart Motor มีฟังก์ชันมากมายให้ใช้เมื่อเขียนโค้ดใน VEXcode IQ สิ่งนี้มีประโยชน์เมื่อเขียนโค้ดแขน กรงเล็บ และไอดี รวมถึงระบบขับเคลื่อนและกลไกอื่นๆ ที่สร้างขึ้นโดยใช้ VEX IQ การทำความเข้าใจว่าสามารถเขียนโค้ดมอเตอร์ได้อย่างไรจะช่วยบรรเทาปัญหาต่างๆ เช่น โครงการหยุดทำงานหรือมอเตอร์ไม่ทำงานตามที่ตั้งใจไว้
ตัวเข้ารหัสมอเตอร์
VEX IQ Smart Motor ไม่เพียงแต่เปลี่ยนพลังงานไฟฟ้าเป็นพลังงานกล เช่นเดียวกับที่มอเตอร์ส่วนใหญ่ทำ แต่ยังมีคุณสมบัติที่มอเตอร์ส่วนใหญ่ไม่มี ซึ่งทำให้ "อัจฉริยะ" คุณสมบัติหลักประการหนึ่งคือตัวเข้ารหัสพื้นที่สี่เหลี่ยมจัตุรัส ตัวเข้ารหัสนี้ติดตั้งอยู่ที่ด้านในของมอเตอร์เพื่อติดตามความเร็วและ/หรือตำแหน่งของเพลามอเตอร์
รายงานจากตัวเข้ารหัสของ VEX IQ Smart Motor ช่วยให้ทราบ:
- ทิศทางการหมุนของมอเตอร์ (เดินหน้า/ถอยหลัง หรือ เปิด/ปิด)
- ตำแหน่งของมอเตอร์และจำนวนการหมุนและตำแหน่งของมอเตอร์ (ไม่ว่าจะเป็นรอบหรือองศา)
- ความเร็วรอบของมอเตอร์ (ขึ้นอยู่กับตำแหน่งของตัวเข้ารหัสในช่วงเวลาหนึ่ง)
เนื่องจากตัวเข้ารหัสรายงานสถานะของมอเตอร์ จึงสามารถนำมาใช้ในการคำนวณเบื้องหลังเพื่อให้คำสั่งการเคลื่อนไหวและการตรวจจับจำนวนมากทำงานภายใน VEXcode IQ
การเข้ารหัสมอเตอร์ส่วนบุคคล
ก่อนที่จะเริ่มเขียนโค้ดสมาร์ทมอเตอร์แต่ละตัวใน VEXcode IQ คุณต้องกำหนดค่ามอเตอร์ก่อน มอเตอร์แต่ละตัวมักใช้สำหรับกลไกเพิ่มเติม เช่น ทางเข้า แขน และกรงเล็บ อย่างไรก็ตาม ข้อมูลทั้งหมดยังคงนำไปใช้กับกลไกอื่นๆ ที่ใช้มอเตอร์แต่ละตัว
ทำตามขั้นตอนในบทความนี้ เพื่อกำหนดค่ามอเตอร์แต่ละตัวของคุณใน VEXcode IQ
เมื่อกำหนดค่ามอเตอร์ตัวเดียว คำสั่งเพื่อควบคุมมอเตอร์นั้นจะปรากฏในกล่องเครื่องมือ คุณจะสังเกตเห็นว่ามีคำสั่งหลายประเภท: การรอและการไม่รอ
การรอกับคำสั่งที่ไม่รอ
โปรดทราบว่ารูปภาพทั้งหมดที่นี่แสดงบล็อก โปรเจ็กต์ทั้งหมดนี้สามารถสร้างใหม่ได้ใน Python หรือ C++ และมีฟังก์ชันการทำงานเหมือนกับบล็อก
คำสั่งที่รอจะบล็อกโปรเจ็กต์ไม่ให้ดำเนินการต่อจนกว่าลักษณะการทำงานจะเสร็จสมบูรณ์ ซึ่งรวมถึงคำสั่งต่างๆ เช่น [หมุนเพื่อ] และ [หมุนไปยังตำแหน่ง]
โปรเจ็กต์ที่แสดงที่นี่ใช้เทมเพลต Clawbot (2 มอเตอร์) และคำสั่งทั้งหมดกำลังรออยู่ ดังนั้นในอนุกรม มอเตอร์กรงเล็บจะปิด 90 องศา หุ่นยนต์จะขับถอยหลัง จากนั้นแขนจะหมุนขึ้นไปถึงตำแหน่ง 180 องศา
ในทางตรงกันข้ามมีคำสั่งที่ไม่รอ คำสั่งที่ไม่รอจะดำเนินการพฤติกรรมดังกล่าวโดยไม่มีกำหนดหรือจนกว่าจะบอกให้เปลี่ยนเป็นพฤติกรรมอื่น ซึ่งรวมถึงคำสั่งต่างๆ เช่น [หมุน]
โปรเจ็กต์ที่แสดงไว้ที่นี่ใช้ BaseBot พร้อมช่องรับเข้าที่เพิ่มเข้ามา ตรงนี้มอเตอร์ไอดีจะเริ่มหมุน คำสั่ง [Wait] เป็นคำสั่งรอ ดังนั้นการนำเข้าจะยังคงหมุนต่อไปจนกระทั่งครบ 2 วินาที จากนั้นจึงย้ายไปยังคำสั่งถัดไปในโปรเจ็กต์ซึ่งเป็นคำสั่ง [Stop] แล้วมอเตอร์ก็หยุดหมุน
มอเตอร์หมดเวลา
เมื่อเขียนโค้ดมอเตอร์โดยเป็นส่วนหนึ่งของแขนหรือกรงเล็บ สิ่งสำคัญคือต้องจดจำความแตกต่างระหว่างบล็อกรอและบล็อกไม่รอ และผลกระทบเหล่านั้นจะส่งผลต่อการเคลื่อนไหวของหุ่นยนต์ของคุณอย่างไร การหมดเวลาของมอเตอร์ทำให้คุณสามารถตั้งเวลาจำกัดสำหรับมอเตอร์ให้ไปถึงตำแหน่งเป้าหมายที่ต้องการได้ หากไม่ตรงตามตำแหน่งนั้นเมื่อหมดเวลา มอเตอร์จะหยุดพยายามหมุน และโปรเจ็กต์จะย้ายไปยังคำสั่งถัดไป
ในตัวอย่างนี้ หมดเวลามอเตอร์ตั้งไว้ที่ 2 วินาที หากกรงเล็บไม่ปิด 90 องศา ภายใน 2 วินาที มอเตอร์จะหยุดหมุนที่เครื่องหมาย 2 วินาที จากนั้นจึงเคลื่อนไปยังคำสั่งถัดไปแล้วขับไปข้างหน้า
หากคุณไม่แน่ใจว่าจะเคลื่อนมอเตอร์ได้ไกลแค่ไหน ให้ใช้แผงหน้าปัดเซ็นเซอร์ แดชบอร์ดจะรายงานตำแหน่งของมอเตอร์เป็นองศาและรอบ ดังนั้นเมื่อคุณขยับมอเตอร์ (เช่น การเปิดและปิดก้ามปู) ตัวเลขจะเปลี่ยนไป ใช้การทดสอบนี้เพื่อดูว่าต้องใช้กี่องศาหรือการหมุนเพื่อปิดกรงเล็บ ยกแขน หมุนท่อเข้า ฯลฯ
ดูบทความเหล่านี้เพื่อเรียนรู้วิธีใช้แดชบอร์ดเซ็นเซอร์
การเข้ารหัสมอเตอร์อัจฉริยะเป็นส่วนหนึ่งของระบบขับเคลื่อน
ก่อนที่จะเริ่มเขียนโค้ดระบบขับเคลื่อนใน VEXcode IQ คุณต้องกำหนดค่าระบบขับเคลื่อนรวมถึงมอเตอร์ที่ใช้ด้วย มอเตอร์ได้รับการกำหนดค่าภายในระบบขับเคลื่อนเพื่อให้แน่ใจว่าได้รับการควบคุมด้วยคำสั่งเดียวกัน เช่น [Drive] และ [Drive for]
คำสั่งรอและไม่รอ
เมื่อเขียนโค้ดระบบขับเคลื่อน คำสั่งรอและไม่รอจะพร้อมใช้งานเพื่อควบคุมการเคลื่อนไหวของหุ่นยนต์
คำสั่งที่รอจะบล็อกโปรเจ็กต์ไม่ให้ดำเนินการต่อจนกว่าลักษณะการทำงานจะเสร็จสมบูรณ์ ซึ่งรวมถึงคำสั่งต่างๆ เช่น [ขับไป] [เลี้ยวเพื่อ] และ [เลี้ยวไปที่ส่วนหัว]
โปรเจ็กต์ที่แสดงที่นี่ใช้เทมเพลต Clawbot (2 มอเตอร์) และคำสั่งทั้งหมดกำลังรออยู่ ตามลำดับ หุ่นยนต์จะขับไปข้างหน้าเป็นระยะทาง 200 มิลลิเมตร แล้วเลี้ยวขวาทั้งหมดโดยใช้ระบบขับเคลื่อน
ในทางตรงกันข้ามมีคำสั่งที่ไม่รอ คำสั่งที่ไม่รอจะดำเนินการพฤติกรรมดังกล่าวโดยไม่มีกำหนดหรือจนกว่าจะบอกให้เปลี่ยนเป็นพฤติกรรมอื่น ซึ่งรวมถึงคำสั่งต่างๆ เช่น [Drive]
โปรเจ็กต์ที่แสดงที่นี่ใช้ BaseBot ที่นี่หุ่นยนต์จะขับไปข้างหน้าไปเรื่อย ๆ จนกระทั่งกดสวิตช์กันชน จากนั้นโปรเจ็กต์จะเคลื่อนไปยังคำสั่งถัดไป และหุ่นยนต์จะหยุดขับและเลี้ยวขวา 90 องศา