อยากจะทำแขนกล อยากจะทำหุ่นยนต์คล้ายมนุษย์ ต้องมีการขับเคลื่อนเซอร์โวจำนวนมาก ZX-SERVO16i คือคำตอบ ลองนำไปใช้กันดูนะครับ
บอร์ด ZX-SERVO16i ติดต่อกับบอร์ดไมโครคอนโทรลเลอร์หรือคอมพิวเตอร์ผ่านพอร์ตอนุกรม ด้วยขา RxD สำหรับรับข้อมูลและ TxD สำหรับส่งข้อมูล
การเชื่อมต่อเข้ากับบอร์ด IPST-SE
บอร์ด IPST-SE POPXT และ ATX2 ต่างก็มีพอร์ตอนุกรม 2 ชุด ซึ่งสามารถใช้ Serial1 (ขาTxD1 และ RxD1 ) มาเชื่อมต่อกับบอร์ด ZX-SERVO16i ได้ ** บอดเรตที่ใช้สื่อสารกับบอร์ด ZX-SERVO16i มี 2 ค่าคือเมื่อเริ่มต้นจะมีบอดเรตเท่ากับ 2400 ซึ่งค่อนข้างช้า สามารถเปลี่ยนค่าเป็น 38400 ให้การสื่อสารเร็วขึ้นได้ โดยใช้คำสั่ง !SCSBR
คำสั่งสำหรับติดต่อกับบอร์ด ZX-SERVO16i
คำสั่ง !SCVER?
คำสั่ง !SCVER? สำหรับตรวจสอบเวอร์ชั่นของ Firmware บนบอร์ด ZX-SERVO16i
รูปแบบการใช้งาน
Serial1.println("!SCVER?");
การคืนค่า
โปรแกรมจะคืนค่าเวอร์ชั่นตอบกลับมา ปัจจุบันเป็นเวอร์ชั่น 1.4
คำสั่ง !SCSBR
สำหรับเปลี่ยนค่าบอดเรตในการสื่อสารข้อมูล โดยค่าปกติเมื่อจ่ายไฟครั้งแรกคือ 0 เท่ากับ 2400 bps แต่ถ้ากำหนดให้เป็น 1 ค่าบอดเรตจะเป็น 38,400 สำหรับการควบคุมมอเตอร์หลาย ๆ ตัวแนะนำให้ใช้ค่า 38,400
รูปแบบการใช้งาน
Serial1.print("!SCSBR");
Serial1.write(1);
Serial1.write(0x0D);
เมื่อทำคำสั่ง 3 บรรทัดนี้แล้ว บอดเรตที่ใช้ในการสื่อสารจะเป็น 38,400 ดังนั้นคำสั่งในการสื่อสารอนุกรมจะต้องปรับเปลี่ยนเป็น 38,400 ด้วย
ตัวอย่างการใช้งาน
ตัวอย่างทำตามขั้นตอนดังนี้
1. ส่งสัญญาณ RESET ไปยังบอร์ด ZX-SERVO16i 2. กำหนดบอดเรตในการสื่อสารไว้ที่ 2400 3. ทดสอบอ่านค่าเวอร์ชั่น 4. ส่งคำสั่งเปลี่ยนค่าบอดเรตเป็น 9600 5. กำหนดบอดเรตในการสื่อสารใหม่เป็น 9600 6. ทดสอบอ่านค่าเวอร์ชั่นอีกครั้ง ข้อความที่ปรากฎที่หน้าจอจะมี ตัวอักษรขยะปนมา 2 ตัว ซึ่งก็คือ 0x0D และ 0x0A หรือคำสั่งขึ้นบรรทัดใหม่นั่นเอง
คำสั่งสั่งงานเซอร์โวมอเตอร์
"!SC" ,CH,RAMP, PW.LOWBYTE,PW.HIGHBYTE,0x0D
คำสั่งควบคุมการเคลื่อนที่ของเซอร์โวมอเตอร์ โดยระบุช่อง (CH) ค่าการไต่ระดับความเร็ว (RAMP) ค่าตำแหน่งของเซอร์โวมอเตอร์ PW มีรายละเอียดดังนี้
CH คือช่องของเซอร์โวมอเตอร์ที่ต้องการติดต่อ มีค่าตั้งแต่ 0 ถึง 31 โดยช่อง 0 ถึง 15 ใช้ในกรณ๊ไม่ได้จัมพ์ขา AUX ไว้ ส่วน 16 ถึง 31 เป็นช่องเมื่อจั๊ม AUX ไว้ ซึ่งผู้ใช้งานสามารถพ่วงกัน 2 บอร์ดเพื่อขับมอเตอร์ได้สูงสุด 32 ตัว
RAMP คือค่าความชันของการปรับเลื่อนความเร็วของการเปลี่ยนตำแหน่งเซอร์โวจากจุดนึงไปยังอีกจุดนึง มีค่าระหว่าง 0 ถึง 63 ถ้ากำหนดค่าเป็น 0 จะเป็นการเคลื่อนที่ไปยังตำแหน่งที่ต้องการแบบเร็วที่สุด
PW เป็นค่าข้อมูล 16 บิต สำหรับระบุตำแหน่งของเซอร์โวมอเตอร์ มีค่าระหว่าง 250 ถึง 1250 สำหรับกำหนดองศาของเซอร์โวมอเตอร์ประมาณ 0-180 องศา เพื่อใช้กับคำสั่ง Serial1.write() ซึ่งจะส่งข้อมูลเป็นแบบไบต์ จำเป็นต้องแปลงค่าให้อยู่ในรูปของไบต์ก่อน
จากรูปแบบนำมาเขียนเป็นฟังก์ชั่น
โปรแกรมทดสอบ
ทดสอบเขียนโปรแกรมเพื่อควบคุมเซอร์โวมอเตอร์ทั้ง 16 ตัวเคลื่อนที่ไปและกลับ