วันพฤหัสบดีที่ 18 ตุลาคม พ.ศ. 2555

หุ่นยนต์ POP-BOT-XT ควบคุมด้วยรีโมตคอนโทรล RC


เนื้อหาของบทความนี้คัดลอกมาจาก facebook ของบริษัท Innovetive Experiment 
www.inex.co.th


หุ่นยนต์ POP-BOT-XT ควบคุมด้วยรีโมตคอนโทรล RC
สำหรับเครื่องบินบังคับวิทยุ หรือรถบังคับวิทยุจะใช้รีโมตแบบคลื่อนวิทยุในการควบคุม เอาต์พุตที่ได้จากตัวมันก็จะมีภาครับหรือ รีซีฟเวอร์เป็นตัวจัดการ ปัจจุบันราคาของอุปกรณ์เหล่านี้มีราคาถูกลงมาก (แต่บางตัวฟังก์ชั่นเยอะๆ ก็แพงเหมือนกัน)









รีโมตคอนโทรล


ภาครีซีฟเวอร์เมื่อรับสัญญาณมาแล้วก็เปลี่ยนสัญญาณเหล่านั้นไปควบคุมเซอร์โวมอเตอร์


รีซีฟเวอร์

ดังนั้นถ้าเราจับสัญญาณเซอร์โวที่มาจากรีซีฟเวอร์ได้ ก็นำรีโมตของรถบังคับไปใช้งานได้



พัลส์ที่รีซีฟเวอร์รับได้เพื่อไปควบคุมเซอร์โวมอเตอร์

สำหรับ Arduino มีคำสั่งชื่อ PulseIn ใช้สำหรับอ่านค่าความกว้างพัลล์ที่ป้อนเข้ามา โดยให้ค่าออกมาหน่วยเป็นไมโครวินาที
รูปแบบการใช้งานคำสั่ง
pulseIn(pin, value ,timeout)
โดย pin คือขาดิจิตอลอินพุตที่ต้องการอ่านค่า
value คือลอจิกที่จะอ่านค่าความกว้างพัลส์ออกมา
timeout คือช่วงเวลาที่เรากำหนดว่าถ้าไม่เกิดพัลส์ขึ้นมาในช่วงเวลากี่ไมโครวินาที ให้ไปทำงานคำสั่งถัดไป

การเชื่อมต่อ
ขั้นตอนในส่วนนี้แนะนำให้ไปประยุกต์หาอุปกรณ์ตามที่มีอยู่ใหล้ๆตัวนะครับ เพื่อเชื่อมต่อสายสัญญาณ
  สายสัญญาณของเซอร์โวมอเตอร์ที่ใช้กับชุดรีซีฟเวอร์จะแตกต่างกับสายสัญญาณ JST ที่ใช้งานกับหุ่นยนต์ POP-BOT XT จึงจำเป็นต้องมีการตัดต่อสายเล็กน้อย (หรือถ้าไม่มีการใช้งานช่องเซอร์โวมอเตอร์ สามารถเชื่อมต่อสายเข้ากับช่องของเซอร์โวมอเตอร์ก็ได้) ตามขั้นตอนดังนี้


สายสัญญาณเซอร์โว

1. นำสายเซอร์โวมอเตอร์ มาตัดปลายออกด้านหนึ่ง ปอกปลายสายเล็กน้อย ให้ทั้งสามสายเหลื่อมกันดังรูป เมื่อบัดกรีแล้วจะได้ไม่ชอร์ตกัน


สายสัญญาณ JST

2. ทำแบบเดียวกันกับสาย JST ปอกปลายสายเช่นเดียวกัน




เชื่อมต่อให้เหลื่อมกันเล็กน้อยจะได้ไม่ชอร์ตกัน

3. นำสายทั้งสองมาเชื่อมกัน อาจใช้เทปพันสายไฟหรือท่อหดพันไว้เพื่อป้องกันการชอร์ต



สียสายเซอร์โวเข้ากับรีซีฟเวอร์
 
4. เสียบสายด้านเซอร์โวมอเตอร์เข้าที่ช่องที่ 1 2 และ 3 ครับ สังเกตทิศทางของสาย สีดำคือไฟลบหรือกราวด์ต้องจำไว้เสมอ
5. เชื่อมต่อสายอีกด้านเข้ากับบอร์ด POP-BOT XT ในที่นี้เลือกต่อตามนี้ครับ

CH1 ==== 21
CH2 ==== 22
CH3 ==== 23
ที่เหลือก็คือการเขียนโปรแกรมทดสอบละครับ เริ่มจากนำค่าที่อ่านได้มาโชว์ที่หน้าจอ GLCD กันก่อน





ทดสอบปรับค่าคันโยกที่รีโมตคอนโทรล แล้วสังเกตค่าตัวเลขที่เปลี่ยนแปลงที่หน้าจอของ GLCD ครับ จะเห็นว่าค่าของทั้ง 3 ช่องจะอยู่ในช่วง 1000 ถึง 2000 โดยค่าประมาณตรงกลางจะอยู่ที่ 1500
ทีนี้ก็เอาค่าเหล่านี้ไปควบคุมหุ่นยนต์ได้แล้วครับ


#include
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
ao();
else if (ch1
fd(70);
else if (ch1>1500)  {
bk(70);
ch2 = pulseIn(22, HIGH, 25000);
if (ch2>1200&&ch2
ao();
else if (ch2
sl(60);
}  
else if (ch2>1500){
sr(60);
ch3 = pulseIn(23, HIGH, 25000); 
if (ch3>1500) {
servo_close();
else if (ch3
servo_open();
}  
}


1 ความคิดเห็น:

  1. พี่คับ ทำไมมัน เหมือนคำสั่งมันซ้อน กันเรย คับ

    ตอบลบ