[ บทความ : Robot ] ตอนที่ 8 เรื่อง ... ศึกษา ET-ROBOT (สั่งงานมอเตอร์)

 

หลังจากที่เราศึกษาคำสั่ง BASIC Stamp กันเป็นที่เรียบร้อยแล้ว วันนี้เรามาลองสั่งงานให้หุ่นยนต์เคลื่อนที่กันครับ ซึ่งขอบอกล่วงหน้านะครับว่าบทความตอนนี้เป็นตอนสุดท้ายของ เรื่อง ศึกษา ET-Robot เนื่องจาก ในหนังสือคู่มือ ET-ROBOT Stamp P40 นั้น เนื้อหาเกี่ยวกับการควบคุมอย่างละเอียดอยู่แล้ว ผมเลยขอเกริ่นเพื่อเข้าเรื่องการควบคุม และเป็นตัวอย่างให้พอเห็นภาพว่าเราสั่งงานได้อย่างไร ตัวอย่างแรกเป็นการสั่งให้หุ่นยนต์เดินไปข้างหน้าครับ

 

หลักการของตัวอย่างนี้ก็คือ สั่งให้มอเตอร์หมุนในทิศที่กลับกัน นั่นคือ มอเตอร์ขวา (P13) จะหมุนตามทิศตามเข็มนาฬิกา และมอเตอร์ซ้าย (P13) ก็จะหมุนในทิศทวนเข็มนาฬิกา จึงทำให้ตัวหุ่นยนต์นั้นเคลื่อนที่ไปด้านหน้า ส่วนคำสั่งเพิ่มเติมนั้นก็มี PULSOUT กับ PAUSE คำสั่งแรกเป็นคำสั่งสร้าง Pulse ออกไปที่พอร์ต เช่น

 

PULSOUT  13,1250

 

ก็มีความหมายว่า มีการสร้าง Pulse ที่มีความกว้าง 1msec (1 period = 0.8 usec ดังนั้น 1250 period จึงประมาณ 0.8x1250=1000usec หรือ 1 msec พอดี)  ออกไปที่ขา P13 ของ BASIC Stamp โดยการควบคุมนั้นมีหลักการอยู่ว่า ถ้าเราต้องการสั่งให้มอเตอร์หมุนตามเข็มนาฬิกา เราจะต้องสร้าง Pulse กว้าง 1 msec หรือไม่เกิน 1.5 msec ส่วนถ้าจะให้หมุนทวนเข็มนาฬิกา เราจะต้องสร้าง Pulse ที่กว้าง 2 msec หรือมากกว่า 1.5 msec

 

ส่วนคำสั่ง PAUSE นั้นใช้สำหรับกำหนดว่าช่วง Pulse ในแต่ละ 1 คาบเวลานั้น มีความกว้างเท่าไร ซึ่งเรากำหนดเอาไว้ว่า PAUSE 20 ก็หมายความว่า มีค่าเป็น 20 msec

 

ดังนั้น สรุปได้ว่า ใน 20msec นั้น จะมี Pulse  อยู่เพียง 1 msec สำหรับการหมุนมอเตอร์ตามเข็มนาฬิกา และ 2 msec สำหรับสั่งให้มอเตอร์หมุนทวนเข็มนาฬิกา

โค้ดจากหนังสือเขียนเอาไว้ดังนี้ครับ

 

'{$STAMP BS2p}

 

MotorForward:

                PULSOUT 13,1250                      ' Pulse Width = 1 mS  Turn CW

                PULSOUT 14,2500                      ' Pulse Width = 2 mS  Turn CCW

                PAUSE   20                                ' Pulse Off = 20 mS

                GOTO    MotorForward               

 

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

 

'{$STAMP BS2p}

 

MotorBackward:

                PULSOUT 13,2500                      ' Pulse Width = 2 mS  Turn CCW

                PULSOUT 14,1250                      ' Pulse Width = 1 mS  Turn CW

                PAUSE   20                                ' Pulse Off = 20 mS

                GOTO    MotorBackward             

 

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

 

'{$STAMP BS2p}

 

TurnLeft:

                Low     14                  ' off motor

                PULSOUT 13,1250                      ' Pulse Width = 1 mS  Turn CW

                PAUSE   20                                ' Pulse Off = 20 mS

                GOTO    TurnLeft       

 

 ส่วนกรณีของการเลี้ยวขวา ก็จะเป็นดังต่อไปนี้

 

'{$STAMP BS2p}

 

TurnRight:

                LOW     13                 ' Off motor

                PULSOUT 14,2500                      ' Pulse Width = 2 mS  Turn CCW

                PAUSE   20                                ' Pulse Off = 20 mS

                GOTO    TurnRight      

 

แต่อย่างไรก็ดีครับ จากตัวอย่างทั้งสองโปรแกรมนี้ การเลี้ยวของหุ่นยนต์นั้นค่อนข้างช้า  เราสามารถเพิ่มความเร็วในการเลี้ยวได้ด้วยวิธีการที่เรียกกันว่า Hard turn left และ Hard turn right ส่วนหลักการสั่งงานเป็นอย่างไรนั้น มาดูตัวอย่างกันครับ

 

'{$STAMP BS2p}

 

TurnLeft:

                PULSOUT 14,1250                      ' Pulse Width = 1 mS  Turn CW

                PULSOUT 13,1250                      ' Pulse Width = 1 mS  Turn CW

                PAUSE   20                                ' Pulse Off = 20 mS

                GOTO    TurnLeft       

 

 

และการเลี้ยวขวาเป็นดังนี้ครับ

 

'{$STAMP BS2p}

 

TurnRight:

                PULSOUT 14,2500                      ' Pulse Width = 2 mS  Turn CCW

                PULSOUT 13,2500                      ' Pulse Width = 2 mS  Turn CCW

                PAUSE   20                                ' Pulse Off = 20 mS

                GOTO    TurnRight      

 

สรุป

ตัวอย่างที่ผมหยิบมาจากหนังสือของ ETT คงพอทำให้เห็นภาพนะครับว่า เราจะสามารถสั่งให้หุ่นยนต์ทำการเดินหน้า ถอยหลัง เลี้ยวซ้าย และเลี้ยวขวาได้อย่างไร ... เอาล่ะ ผมจะขอจบบทความเอาไว้เท่านี้ก่อนนะครับ เดี๋ยวต้องไปเขียนบทความชุดคำสั่งของ 68HC11 ให้จบก่อนนะครับ หลังจากที่เขียนเกี่ยวกับ 68HC11 จบ ก็จะเป็นเรื่องของ PIC กันต่อครับ (ลัดคิว AVR ไปเลยแฮะ)  สวัสดีครับ

 

 


เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง :  ๑๑ ม.ค. ๒๕๔๗