อุปกรณ์ 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); } |
ผลการทำงานของโค้ด
myservo.write(0);
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 0 องศา และ หยุดเป็นเวลา 1 วินาที
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 0 องศา และ หยุดเป็นเวลา 1 วินาที
myservo.write(90);
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 90 องศา และ หยุดเป็นเวลา 1 วินาที
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 90 องศา และ หยุดเป็นเวลา 1 วินาที
myservo.write(90);
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 180 องศา และ หยุดเป็นเวลา 1 วินาที
จากนั้นจะหมุนกลับไปที่ตำแหน่ง 0 องศา และวนรอบไปเช่นนี้เรื่อยๆ
โค้ดตัวอย่างการควบคุมตำแหน่ง RC Servo Motor แบบ Sweep
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() ลงจะ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น