วันศุกร์ที่ 23 ธันวาคม พ.ศ. 2559

การเชื่อมต่อ RC Servo Motor ด้วย Arduino

การเชื่อมต่อ RC Servo Motor เข้ากับบอร์ด Arduino
08
อุปกรณ์ RC Servo Motor ที่ใช้ในบทความ :  EFDV245 Futaba S3003 Servo Motor
โค้ดตัวอย่างการควบคุมตำแหน่ง RC Servo Motor
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <Servo.h>
Servo myservo;  
void setup()
{
  myservo.attach(9);
}
void loop()
{       myservo.write(0);
        delay(1000);     
        myservo.write(90);
        delay(1000);     
        myservo.write(180);
        delay(1000);                    
}

ผลการทำงานของโค้ด

09
myservo.write(0);
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 0 องศา และ หยุดเป็นเวลา 1 วินาที
10
myservo.write(90);
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 90 องศา และ หยุดเป็นเวลา 1 วินาที
11
myservo.write(90);
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 180 องศา และ หยุดเป็นเวลา 1 วินาที
จากนั้นจะหมุนกลับไปที่ตำแหน่ง 0 องศา และวนรอบไปเช่นนี้เรื่อยๆ
โค้ดตัวอย่างการควบคุมตำแหน่ง RC Servo Motor แบบ Sweep
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <Servo.h>
Servo myservo;        //create servo object to control a servo
                              // a maximum of eight servo objects can be created
int pos = 0;             // variable to store the servo position
void setup(){
       myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
 
void loop(){
       for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
      {
            myservo.write(pos); // tell servo to go to position in variable 'pos'
            delay(15); // waits 15ms for the servo to reach the position
       }
       for(pos = 180; pos>=1; pos-=1)// goes from 180 degrees to 0 degrees
      {
            myservo.write(pos); // tell servo to go to position in variable 'pos'
           delay(15); // waits 15ms for the servo to reach the position
      }
}
ผลการทำงานของโค้ด
for(pos = 0; pos < 180; pos += 1){
myservo.write(pos);
delay(15);
}
            ลูป for กำหนดให้ค่า pos มีค่าเท่ากับ 0 และทุกๆ การทำงานคำสั่งภายใน for loop ค่า pos จะเพิ่มค่าขึ้น 1 ค่า จนจนถึง 180 ก็จะหลุดออกจาก loop
           ภายใน loop for คำสั่ง myservo.write(pos); ก็คือการกำหนดให้ Servo Motor หมุนไปยังตำแหน่ง มุมตามค่าในตัวแปร pos และหน่วงเวลา 15ms ด้วยคำสั่ง delay(15); ดังนั้น Servo Motor จะค่อยๆ หมุนอย่างช้าๆ จากตำแหน่ง 0 องศาไปที่ 180 องศา
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(15);
}
           ใน loop for ที่สองนี้จะทำงานเช่นเดียวกับใน loop for แรกเพียงแต่เปลี่ยนค่าเริ่มต้นจาก 180 เป็น 0 และลดลงค่าลง 1 ค่าทุกๆ การทำงาน 1 รอบ ส่งผลให้ Servo Motor จะหมุนจากตำแหน่งมุม 180 องศา ไปยังมุม 0 องศาอย่างช้าๆ 
           !!! ทดลองเพิ่มค่าในคำสั่ง delay() ให้มากขึ้นจะพบว่า Servo Motor จะหมุนช้าลงและในทางกลับกันหากลดค่าใน delay() ลงจะ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น