หุ่นยนต์ POP-BOT-XT ควบคุมด้วยรีโมตคอนโทรล RC สำหรับเครื่องบินบังคับวิทยุ หรือรถบังคับวิทยุจะใช้รีโมตแบบคลื่นวิทยุในการควบคุม เอาต์พุตที่ได้จากตัวมันก็จะมีภาครับหรือรีซีฟเวอร์เป็นตัวจัดการ ปัจจุบันราคาของอุปกรณ์เหล่านี้มีราคาถูกลงมาก (แต่บางตัวฟังก์ชั่นเยอะๆ ก็แอบแพงเหมือนกัน)
รีโมตคอนโทรล
ปัจจุบันรีโมตคอนโทรลเปลี่ยนจากคลื่นวิทยุ FM มาเป็นคลื่นความถี่สูง 2.4 GHz ทำให้สามารถนำรีโมตคอนโทรล และรีซีฟเวอร์หลายๆ ตัวมาใช้ในที่เดียวกันได้ โดยคลื่นไม่ชนกัน ที่เห็นในรูปเป็นรีโมตคอนโทรลแบบ 4 ช่องสัญญาณซึ่งมีราคาขายไม่สูงมากนัก โดยตัวมันจะมาพร้อมรีซีฟเวอร์ที่มีรหัสหมายเลขตรงกัน
รีซีฟเวอร์
ภาครีซีฟเวอร์ทำหน้าที่รับสัญญาณจากรีโมตคอนโทรล เอาต์พุตจะเป็นขั้วต่อเซอร์โวมอเตอร์เพื่อไปควบคุมเซอร์โวมอเตอร์หรือสปีดคอนโทรลของรถ เรือ เครื่องบินบังคับ ดังนั้นถ้าเราจับสัญญาณควบคุมเซอร์โวที่มาจากรีซีฟเวอร์ได้ ก็นำรีโมตของรถบังคับไปใช้งานได้
รูปแบบพัลส์ที่รีซีฟเวอร์ได้รับ
พัลส์สำหรับขับเซอร์โวมอเตอร์มีการเปลี่ยนแปลงความกว้างของพัลส์ช่วงบวกอยู่ในช่วง 1-2 มิลลิวินาที เพื่อให้เซอร์โวมอเตอร์เคลื่อนที่ไปในระยะต่างๆ ดังรูป เราต้องจับค่าความกว้างพัลส์ช่วงบวก แล้วนำไปใช้งาน
สำหรับ Arduino มีคำสั่งชื่อ PulseIn สำหรับอ่านค่าความกว้างพัลล์ โดยให้ผลลัพธ์หน่วยเป็นไมโครวินาที
รูปแบบการใช้งานคำสั่ง
pulseIn(pin, value ,timeout)
โดย pin คือขาดิจิตอลอินพุตที่ต้องการอ่านค่า
value คือลอจิกที่จะอ่านค่าความกว้างพัลส์ออกมา ในที่นี้จะอ่านที่ลอจิก “1”
timeout คือช่วงเวลาที่เรากำหนดว่าถ้าไม่เกิดพัลส์ขึ้นมาในช่วงเวลากี่ไมโครวินาทีให้ไปทำงานคำสั่งถัดไป
การเชื่อมต่อ
ขั้วต่อของเซอร์โวมอเตอร์ที่ใช้กับชุดรีซีฟเวอร์จะแตกต่างกับสายสัญญาณ JST ที่ใช้งานกับหุ่นยนต์ POP-BOT XT จึงต้องใช้สาย JST3AC ดังรูปในการเชื่อมต่อ
สายสีแดง เป็น ไฟบวก (+) สายสีดำ เป็น ไฟลบ (-) สายสีขาว เป็น สัญญาณ (S)
ตำแหน่งเสียบสายที่รีซีฟเวอร์
เสียบสายเซอร์โวเข้ากับรีซีฟเวอร์
เสียบสายด้านเซอร์โวมอเตอร์เข้าที่ช่องที่ CH1 CH2 และ CH3 ครับ เชื่อมต่อสายอีกด้านเข้ากับบอร์ด POP-BOT XT ในที่นี้เลือกต่อตามนี้ครับ
CH1 ==== 21 CH2 ==== 22 CH3 ==== 23
การเขียนโปรแกรมทดสอบออกจอ GLCD
ทดสอบปรับค่าคันโยกที่รีโมตคอนโทรล แล้วสังเกตค่าตัวเลขที่เปลี่ยนแปลงที่หน้าจอของ GLCD ครับ จะเห็นว่าค่าของทั้ง 3 ช่องจะอยู่ในช่วง 1000 ถึง 2000 โดยค่าประมาณตรงกลางจะอยู่ที่ 1500 ทีนี้ก็เอาค่าเหล่านี้ไปควบคุมหุ่นยนต์ได้แล้ว
#include <popxt.h> int ch1; int ch2; int ch3; void servo_open(){ servo(2,80); sleep(400); servo(1,140); sleep(400); servo(1,-1); servo(2,-1); } void servo_close(){ servo(1,0); sleep(1000); servo(2,0); sleep(1000); servo(1,-1); servo(2,-1); } void setup() { pinMode(21, INPUT); pinMode(22, INPUT); pinMode(23, INPUT); glcdMode(1); setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); glcdClear(); } void loop() { ch1 = pulseIn(21, HIGH, 25000); if (ch1>1200&&ch1<1500){ ao(); } else if (ch1<1200){ fd(70); } else if (ch1>1500) { bk(70); } ch2 = pulseIn(22, HIGH, 25000); if (ch2>1200&&ch2<1500){ ao(); } else if (ch2<1200){ sl(60); } else if (ch2>1500){ sr(60); } ch3 = pulseIn(23, HIGH, 25000); if (ch3>1500) { servo_close(); } else if (ch3<1200){ servo_open(); } }