จุดประสงค์การเรียนรู้
สามารถเขียนCodeภาษาCในArduino IDEควบคุมการองศาของServo motorได้
สาระการเรียนรู้
1. Servo Motor
เซอร์โวมอเตอร์เป็นมอเตอร์ที่ประกอบด้วยไฟฟ้าคอลโทรลและกลไกในตัวเอง โดยปกติสามารถควบคุมหรือล็อคองศาการทำงานได้ การใช้งานจะใช้ในการควบคุมตำแหน่ง, ความเร็ว, แรงบิด และความแม่นยำให้มีการทำงานสอดคล้องกันอย่างมีประสิทธิภาพ โดยอาศัยวงจรแบบป้อนกลับ(Feedback Controller)
- Feedback Controller คือ ระบบควบคุมี่มีการวัดค่าOutputของระบบ แล้วนำมาเปรียบเทียบค่าInputเพื่อควบคุมและปรับแต่งให้ค่าOutputของระบบมีค่าเท่ากับหรือใกล้เคียงกับค่าInput
- ชนิดของServo Motor หากแบ่งตามชนิดของแหล่งจ่ายไฟจะแบ่งเป็น Servo Motorกระแสตรง และServo Motorกระแสสลับ
- Servo Motor ที่มีขายในทั้งตลาดโดยทั่วไปจะมีแบบทำงานระหว่าง 0องศา - 90 องศา,0องศา - 180 องศา,0องศา - 270 องศา ส่วนสำหรับServo Motorชนิด 360 องศา จะเป็นรุ่นดัดแปลงโดยปกติจะไม่สามารถล็อคตำแหน่งมุมได้เหมือนรุ่นอื่นๆ
DatasheetของสีสายไฟของServo Digitalขนาดเล็กโดยทั่วไป
สีสายสัญญาณของServo Motor
ชนิดของสัญญาณ
สีส้ม หรือ สีขาว
Signal
สีแดง
VCC ขั้วบวก โดยปกติจะใช้ไฟเลี้ยงที่ 4.5V-6V
สีดำ หรือ สีน้ำตาล
GND ขั้วลบ
2. คำสั่งการใช้งาน
รูปแบบการใช้งานคำสั่งในภาษาซีของArduino IDEในเนื้อหานี้ จะใช้คำสั่งดังต่อไปนี้
คำสั่งในArduino IDE
การทำงาน
void setup() {
//คำสั่ง
}
เป็นคำสั่งการประกาศฟังก์ชันการทำงานเพียงครั้งเดียวในตอนแรก
void loop() {
//คำสั่ง
}
เป็นคำสั่งประกาศฟังก์ชันการทำงานแบบวนรอบ
Servo myservo;
เป็นคำสั่งในการดึงค่าconfic library ESP32Servo.h ก่อนการใช้งานServo motor
myservo.attach(ขาสัญญาณ, ค่าสัญญาณพัสล์ต่ำสุด, ค่าสัญญาณพัสล์สูงสุด);
เป็นคำสั่งที่ต้องประกาศในvoid setup เพื่อเป็นการกำหนดขาสัญญาณและเลือกสัญญาณพัสล์ตามรุ่นของเซอร์โวมอเตอร์ เช่น
- Servo Motor รุ่น SG90 จะใช้ค่าพัสล์ต่ำสุดที่500us และค่าพัสล์สูงสุดที่2400us
- Servo Motor รุ่น MG995 จะใช้ค่าพัสล์ต่ำสุดที่1000us และค่าพัสล์สูงสุดที่2000us เป็นต้น
myservo.write(องศาการสั่งงาน);
เป็นคำสั่งในการทำให้เซอร์โวเคลื่อนที่ไปยังองศาการทำงาน ซึ่งต้องกรอกเป็นตัวเลขจำนวนเต็ม
delay(เวลาในหน่วยมิลลิวินาที);
การหน่วงเวลาในหน่วยมิลลิวินาที
map (สัญญาณรับมา,ค่าต่ำสุดที่รับมา,ค่าสูงสุดที่รับมา,ค่าต่ำสุดที่อยากได้,ค่าสูงสุดที่อยากได้);
ฟังก์ชันmapเป็นฟังก์ชันในการกำหนดอัตราส่วนของค่าที่รับมาให้เป็นค่าที่ต้องการ โดยจะมีการใช้งานดังนี้
map (สัญญาณรับมา,ค่าต่ำสุดที่รับมา,ค่าสูงสุดที่รับมา,ค่าต่ำสุดที่อยากได้,ค่าสูงสุดที่อยากได้);
#include <ESP32Servo.h>
Servo sv1; // กำหนดชื่อเซอโวตัวที่ 1 ว่า sv1
const int buttonPin = 34; //ประกาศตัวแปร buttonPin แทน Pin ของปุ่มกด ซึ่งต่อไว้กับ D2
void setup() {
sv1.attach(23); //กำหนดขา Servo ตัวที่ 1 ต่อกับ Pin
}
void loop(){
int sw = digitalRead(buttonPin);
if (sw == 1){ // ถ้าปุ่ม ถูกกด
sv1.write(180); // เซอโว 1 หมุนไปที่ ตำแหน่ง 90 ํ
delay(300); // หน่วงเวลาเพื่อรอให้เซอโวเคลื่อนที่ไปยังตำแหน่ง
sv1.write(90); // เซอโว 1 หมุนไปที่ ตำแหน่ง 120 ํ
delay(300); // หน่วงเวลาเพื่อรอให้เซอโวเคลื่อนที่ไปยังตำแหน่ง
}
}