[BASIC] 012 SERVO SWEEP (เซอร์โว)
สวัสดีครับ สำหรับหัวข้อบทเรียนพื้นฐานบนบอร์ด HONEYLemon ที่ใช้งานผ่าน arduino library โดยเป็นการใช้งานเกี่ยวกับการใช้งาน servo ( เซอร์โว มอเตอร์ )
สำหรับการใช้งาน servo motor กับการใช้งานบอร์ด HONEYLemon นั้นง่ายมาก เพราะไม่ต้อง include อะไรเพิ่มเลย การเตรียมการขั้นแรกให้ประกาศว่าจะใช้งาน servo กันก่อน
1
Servo myservo; // สร้าง object สำหรับการควบคุม servo
Copied!
จากนั้นก็ทำงานตั้งค่าความถี่ที่ต้องการใช้ และตั้งค่าขาที่ต้องการใช้งาน
1
void setup(){
2
...
3
myservo.setPeriodHertz(50); // ตั้งค่าความถี่มาตรฐาน 50 Hz
4
myservo.attach(servoPin); // กำหนดคาบเวลา min/max ที่จะใช้ควบคุม Servo
5
...
6
}
Copied!
สำหรับขั้นตอนของการ setup servo เสร็จเรียบร้อยแล้ว ต่อไปเราก็ทำการควบคุม servo ได้เลยด้วยคำสั่ง
1
myservo.write( pos ); // โดยที่ pos คือองศาของ servo
Copied!
สำหรับการต้องการเปลี่ยนจากตำแหน่ง a ไปตำแหน่ง b อย่างช้าๆ เราสามารถใช้ loop ในการช่วงชลอการเคลื่อนที่ได้ ตัวอย่างเช่น
1
int a = 0;
2
int b = 180;
3
for(int pos=a;pos<=b;pos++){ // หมุนทีละ 1 องศาจากตำแหน่ง a ไป b ทุกๆ 5 มิลลิวินาที
4
myservo.write(pos); // สั่งให้ servo หมุนไปที่ตำแหน่ง pos
5
delay(5); // รอ 5 มิลลิวินาที แล้วค่อยหมุนไปตำแหน่งต่อไป
6
}
Copied!
อยากให้ช้าหรือเร็วก็ปรับตรง delay เอาก็ได้นะ สำหรับวิธีนี้เป็นการเขียนอย่างง่าย หากต้องใช้งานร่วมกับการทำงานอื่นๆ การเขียนคำสั่งโดยใช้ delay จะทำให้ไม่สามารถทำงาน multi function ได้
ตัวอย่าง source code
1
/*
2
Basic : การเขียนโปรแกรมควบคุม Servo บนบอร์ดไมโครคอนโทรลเลอร์ HONEYLemon
3
*/
4
#include <HONEYLemon.h>
5
6
Servo myservo; // สร้าง object สำหรับการควบคุม servo
7
int servoPin = 4; //สร้างตัวแปรควบคุม Servo ( ขาที่ใช้งานได้ 4,12,14,15,18,19,21,22,23,25,26 )
8
9
void setup()
10
{
11
lemon.begin(); // เรียกใช้งานฟังก์ชั่นเริ่มต้นของบอร์ด HONEYLemon
12
13
Serial.begin(115200); // เรียกใช้งาน Serial
14
lemon.debug(Serial); // ขอดู debug ของบอร์ด HONEYLemon ผ่าน Serial
15
16
myservo.setPeriodHertz(50); // ตั้งค่าความถี่มาตรฐาน 50 Hz
17
myservo.attach(servoPin); // กำหนดคาบเวลา min/max ที่จะใช้ควบคุม Servo
18
}
19
20
void loop()
21
{
22
for (int pos = 0; pos <= 180; pos++) { // ทำการกำหนดมุมเริ่มต้นเป็น 0 และทำงานซ้ำไปจนถึงมุม 180 โดยที่แต่ละรอบมีการเปลี่ยนแปลงมุม +1 อาศา
23
myservo.write(pos); // สั่งให้ Servo หมุนไปที่ตำแหน่ง pos (position)
24
delay(15); // รอ 15 มิลลิวินาที
25
}
26
for (int pos = 180; pos >= 0; pos--) { // ทำการกำหนดมุมเริ่มต้นเป็น 180 และทำงานซ้ำไปจนถึงมุม 0 โดยที่แต่ละรอบมีการเปลี่ยนแปลงมุม -1 อาศา
27
myservo.write(pos); // สั่งให้ Servo หมุนไปที่ตำแหน่ง pos (position)
28
delay(15); // รอ 15 มิลลิวินาที
29
}
30
}
Copied!
Last modified 1yr ago
Copy link