ตอนที่ 5 ฟังก์ชั่นยกกระป๋อง และวางกระป๋อง
หลักการทำงานของเซอร์โวมอเตอร์
เซอร์โวมอเตอร์ มีสายต่อใช้งาน 3 เส้นดังรูป มีวงจรขับมอเตอร์พร้อมทั้งวงจรป้อนกลับเพื่อให้รับรู้ตำแหน่งของตัวเองอยู่ภายใน การใช้งานถ้าเป็น Arduino และ POP-XT จะสั่งงานผ่านฟังก์ชั่น Servo( CH,POS)
โดย CH คือ ช่องของเซอร์โว POP-XT มีช่องขับ 3 ช่อง
POS คือ ตำแหน่งของเซอร์โวอยู่ระหว่าง 0 ถึง 180 แต่ถ้าเรากำหนดเป็น -1 จะเป็นการยกเลิกการใช้เซอร์โวตัวนั้น
ตัวอย่าง
servo(1,100);
เป็นการสั่งให้เซอร์โวเคลื่อนที่ไปที่ตำแหน่ง 100 องศา
ทดสอบยกกระป๋อง
จากสรีระของหุ่นยนต์ที่ใช้เซอร์โวเพียงตัวเดียวในการยกกระป๋อง จึงเป็นเรื่องง่ายที่จะควบคุมเซอร์โวให้ทำงานทั้งคีบ ยก และวาง ก่อนอื่นต้องทดสอบหาตำแหน่งของเซอร์โว สำหรับการยกและการวางก่อน ด้วยโปรแกรมทดสอบการทำงานของเซอร์โวจากโปรแกรมตัวอย่าง มีคำสั่งพิเศษที่เพิ่มเติมคือคำสั่ง map ใช้สำหรรับการแปลงค่าตำแหน่งของ knob ให้เป็นองศาของเซอร์โว ซึ่งสะดวกมาก ไม่ต้องเขียนสมการให้วุ่นวาย หลังจากแปลงค่าแล้วก็นำค่าที่ได้แสดงที่หน้าจอ GLCD และส่งค่าไปยังเซอร์โวมอเตอร์ด้วย
ทดลองหมุน knob จน Gripper กางออกเยอะที่สุด บันทึกค่าที่แสดงที่หน้าจอเอาไว้
ทดลองหมุน knob จน Gripper หนีบกระป๋องแล้วยก บันทึกค่าที่แสดงที่หน้าจอเอาไว้
นำค่าที่ได้มาสร้างเป็นฟังก์ชั่น ยกกระป๋อง (PICK)
จากตัวอย่างก่อนหน้านี้ถ้าทำความเข้าใจเรื่องฟังก์ชั่น LLL() หรือฟังก์ชั่น RRR() จะเข้าใจว่า โปรแกรมจะหลุดออกจากลูปคำสั่งการเดินตามเส้นปกติเข้าสู่การทำภารกิจตรวจจับทางแยกได้ ก็ต่อเมื่อ เซนเซอร์ด้านนอกซ้ายหรือขวา เจอสีดำ ทำนองเดียวกันกับฟังก์ชั่นยกกระป๋อง ในช่วงปกติเมื่อไหร่ก็เดินตามเส้นไปเรื่อยๆ เมื่อเจอเส้นตัดเมื่อไหร่ก็หยุดหุ่นยนต์แล้วยกกระป๋องทันที จากนั้นหมุนตัว แล้วจบฟังก์ชั่น นำมาเขียนเป็นโปรแกรมในชื่อฟังก์ชั่น PICK()
ข้อสังเกตเพิ่มเติมของฟังก์ชั่นนี้ก็คือ โปรแกรมจะหลุดจากลูปเดินตามเส้นโดยเงื่อนไขว่า analog(2) หรือ analog(3) เจอสีดำ แต่ในการเขียนโปรแกรมแทนที่เราจะใช้เครื่องหมาย OR || เรากลับใช้เป็นเครื่องหมาย AND && แทน ลองไปทบทวนวิชาตรรกศาสตร์หรือการทำงานของลอจิกดูนะครับ
1 ความคิดเห็น:
ขอบคุณมากครับ : ) จะนำเป็นแนวทางในการพัฒนาตนเอง + เด็ก ต่อไปครับ
แสดงความคิดเห็น