[ บทความ : 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 ไปเลยแฮะ) สวัสดีครับ
|