นางสาวจริญญา แสงวงศ์ 1 สทค 2 รหัส 6031280026
นางสาวจิรนันท์ จานศิลา 1 สทค 2 รหัส 6031280028
การควบคุม Servo Motor (SG90)
ด้วย Arduino UNO R3
SG90 Servo Motor มาตรฐาน
Servo เป็นคำศัพท์ที่ใช้กันทั่วไปในระบบควบคุมอัตโนมัติ มาจากภาษาละตินคำว่า Sevus
หมายถึง “ทาส” (Slave) ในเชิงความหมายของ Servo
Motor ก็คือ Motor ที่เราสามารถสั่งงานหรือตั้งค่า
แล้วตัว Motor จะหมุนไปยังตำแหน่งองศาที่เราสั่งได้เองอย่างถูกต้อง
โดยใช้การควบคุมแบบป้อนกลับ (Feedback Control)
Servo คืออุปกรณ์มอเตอร์ ที่สามารถควบคุมการหมุนที่แม่นยำ เซอร์โว SG90 มีขนาดเล็กแรงบิด 1.2-1.4 kg/cm KG/cm สีน้ำตาลเป็นสายกราวด์ สีแดงเป็นไฟเข้า 4.8-7.2 V
สีส้มเป็นสัญญาณอินพุต หมุน 0-180องศา ถ้าทำให้หมุน
360 ต่อเนื่อง องศาให้ใช้ 2.2 K ohm Tower Pro SG90 Mini Micro Servo
Servo motor รุ่นนี้เหมาะสำหรับการใช้งานกับ
RC คอปเตอร์ หรือ งานที่ต้องการมอเตอร์น้ำหนักเบา
(เฟืองเป็นพลาสติด) ให้ทอร์กที่ 1.8 kg-cm ที่แรงดัน 4.8
V
Feedback Control คือ ระบบควบคุมที่มีการวัดค่าเอาต์พุตของระบบนำมาเปรียบเทียบกับค่าอินพุตเพื่อควบคุมและปรับแต่งให้ค่าเอาต์พุตของระบบให้มีค่า เท่ากับ หรือ ใกล้เคียงกับค่าอินพุต
Feedback Control คือ ระบบควบคุมที่มีการวัดค่าเอาต์พุตของระบบนำมาเปรียบเทียบกับค่าอินพุตเพื่อควบคุมและปรับแต่งให้ค่าเอาต์พุตของระบบให้มีค่า เท่ากับ หรือ ใกล้เคียงกับค่าอินพุต
- ขนาด 21.5 mm x 11.8 mm x 22.7 mm
- น้ำหนัก 9 กรัม
- ความเร็วเมื่อไม่มีโหลด 0.12 วินาที/60องศา (4.8 V)
- แรงบิด 1.2-1.4 kg/cm (4.8 V)
- ทำงานที่อุณหภูมิ -30-60 องศาเซลเซียส
- เวลาหยุดก่อนรับคำสั่งใหม่ 7 มิลลิวินาที
- ทำงานที่ไฟ 4.8 V - 6 V
ส่วนประกอบภายนอก RC Servo Motor
- Case ตัวถัง หรือ กรอบของตัว Servo
Motor
-
Mounting Tab ส่วนจับยึดตัว Servo กับชิ้นงาน
- Output Shaft เพลาส่งกำลัง
- Servo Horns ส่วนเชื่อมต่อกับ Output shaft เพื่อสร้างกลไกล
- Cable สายเชื่อมต่อเพื่อ จ่ายไฟฟ้า และ ควบคุม Servo Motor
จะประกอบด้วยสายไฟ 3 เส้น และ ใน RC
Servo Motor จะมีสีของสายแตกต่างกันไปดังนี้
o สายสีแดง คือ ไฟเลี้ยง (4.8-6V)
o สายสีดำ หรือ น้ำตาล คือ
กราวด์
o สายสีเหลือง (ส้ม ขาว หรือฟ้า)
คือ สายส่งสัญญาณพัลซ์ควบคุม (3-5V)
- Connector จุดเชื่อมต่อสายไฟ
ส่วนประกอบภายใน RC Servo Motor
- Motor เป็นส่วนของตัวมอเตอร์
- Gear Train หรือ Gearbox เป็นชุดเกียร์ทดแรง
- Position Sensor เป็นเซ็นเซอร์ตรวจจับตำแหน่งเพื่อหาค่าองศาในการหมุน
- Electronic Control System เป็นส่วนที่ควบคุมและประมวลผล
Servo Motor Block Diagram
หลักการทำงานของ Servo Motor
เมื่อจ่ายสัญญาณพัลซ์เข้ามายัง
Servo Motor ส่วนวงจรควบคุม (Electronic Control
System) ภายใน Servo จะทำการอ่านและประมวลผลค่าความกว้างของสัญญาณพัลซ์ที่ส่งเข้ามาเพื่อแปลค่าเป็นตำแหน่งองศาที่ต้องการให้
Motor หมุนเคลื่อนที่ไปยังตำแหน่งนั้น แล้วส่งคำสั่งไปทำการควบคุมให้
Motor หมุนไปยังตำแหน่งที่ต้องการ โดยมี Position
Sensor เป็นตัวเซ็นเซอร์คอยวัดค่ามุมที่ Motor กำลังหมุน เป็น Feedback กลับมาให้วงจรควบคุมเปรียบเทียบกับค่าอินพุตเพื่อควบคุมให้ได้ตำแหน่งที่ต้องการอย่างถูกต้องแม่นยำ
นิยมใช้ร่วมกับ
- Mounting Bracket for Servo SG90
- Switching Power supply แหล่งจ่ายไฟ 5 V 5.5 A
- Switching Power supply แหล่งจ่ายไฟ 5 V 10 A
- Switching Power supply แหล่งจ่ายไฟ 5 V 20 A
ตัวอย่างการใช้งาน
- Servo -> Arduino
- สายสีน้ำตาล -> GND
- สายสีแดง ->5V
- สายสีส้ม -> Pin 8
อ้างอิงข้อมูลจาก : http://www.myarduino.net/product/29/sg90-servo-motor-มาตรฐาน
https://www.arduitronics.com/product/283/tower-pro-sg90-mini-micro-servo
http://www.thaieasyelec.com/article-wiki/review-product-article/บทความตัวอย่างการควบคุม-rc-servo-motor-ด้วย-arduino.html
https://www.arduitronics.com/product/283/tower-pro-sg90-mini-micro-servo
http://www.thaieasyelec.com/article-wiki/review-product-article/บทความตัวอย่างการควบคุม-rc-servo-motor-ด้วย-arduino.html
อุปกรณ์ที่ใช้
1.บอร์ด Arduino 1 ตัว
2.สาย USB 1 เส้น
3.Servo Motor (SG90) 1 ตัว
3.Servo Motor (SG90) 1 ตัว
4.สายไฟผู้-ผู้ 3 เส้น
5.โปรแกรม Arduino
6.PC / NoteBook
6.PC / NoteBook
รูปการต่อวงจร (Fritzing)
... ในการต่อครั้งนี้จะใช้การต่อเหมือนกันทั้ง 3 วงจร แต่จะแตกต่างกันที่ Code ...
คลิก Download เพื่อดาวน์โหลดรูปไปแก้เพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Fritzing อยู่ในเครื่องคอม ฯ ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadProgramFritzing
Code และคำอธิบายการทำงานของวงจรในโปรแกรม Arduino
เขียนโปรแกรมให้ servo motor ทำงานแบบวนลูป 3 วงจร ดังนี้
- แบบที่ 1 ให้ Servo Motor (SG90) หมุน จากซ้ายไปขวา โดยเริ่มจาก 0 องศา - 180 องศา และจากขวามาซ้ายโดยเริ่มจาก 180 องศา มาหา 0 องศา (Code6.1)
Code แบบที่ 1
#include <Servo.h>
Servo servo;
int angle;
void setup() {
servo.attach(8);
servo.write(angle);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 0; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 0; angle--)
{
servo.write(angle);
delay(15);
}
}
- แบบที่ 1 ให้ Servo Motor (SG90) หมุน จากซ้ายไปขวา โดยเริ่มจาก 0 องศา - 180 องศา และจากขวามาซ้ายโดยเริ่มจาก 180 องศา มาหา 0 องศา (Code6.1)
Code แบบที่ 1
#include <Servo.h>
Servo servo;
int angle;
void setup() {
servo.attach(8);
servo.write(angle);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 0; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 0; angle--)
{
servo.write(angle);
delay(15);
}
}
- แบบที่ 2 ให้ Servo Motor (SG90) หมุน จากซ้ายไปขวา โดยเริ่มจาก 45 องศา - 135 องศา และจากขวามาซ้ายโดยเริ่มจาก 135 องศา มาหา 45 องศา (Code6.2)
Code แบบที่ 2
#include <Servo.h>
Servo servo;
int angle;
void setup() {
servo.attach(8);
servo.write(angle);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 45; angle < 135; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 135; angle > 45; angle--)
{
servo.write(angle);
delay(15);
}
}
Code แบบที่ 3
#include <Servo.h>
Servo servo;
int angle;
void setup() {
servo.attach(8);
servo.write(angle);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 90; angle < 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 90; angle--)
{
servo.write(angle);
delay(15);
}
}
คลิก DownloadCode6.1 , DownloadCode6.2 , DownloadCode6.3 เพื่อนำไปแก้ไขเพิ่มเติม แต่ทั้งนี้ต้องมีโปรแกรม Arduino อยู่ในเครื่องคอม ฯ
ของเราก่อนนะคะ หากไม่มีสามารถโหลดได้ที่ DownloadArduino
ไม่มีความคิดเห็น:
แสดงความคิดเห็น