การควบคุมมอเตอร์เซอร์โว: คู่มือฉบับสมบูรณ์
บทเรียนสำคัญ:
การควบคุมมอเตอร์เซอร์โว: การควบคุมมอเตอร์เซอร์โวช่วยให้สามารถควบคุมตำแหน่ง, ความเร็ว, และการเร่งของมอเตอร์ได้อย่างแม่นยำผ่านสัญญาณไฟฟ้า
กลไกป้อนกลับ: ระบบป้อนกลับ ซึ่งมักเป็นโพเทนชิโอมิเตอร์หรือเอนโคเดอร์ จะช่วยให้มั่นใจว่าเอาต์พุตของมอเตอร์ตรงกับสัญญาณควบคุมอย่างแม่นยำ
สัญญาณ PWM: พัลส์-วิธ-โมดูเลชัน (PWM) เป็นสิ่งสำคัญในการตั้งตำแหน่งของเซอร์โวโดยการเปลี่ยนระยะเวลาของพัลส์ไฟฟ้า
Arduino และมอเตอร์เซอร์โว: การใช้บอร์ด Arduino เป็นวิธีที่นิยมและมีประสิทธิภาพในการเขียนโปรแกรมและควบคุมมอเตอร์เซอร์โวด้วยการติดตั้งฮาร์ดแวร์ขั้นต่ำ
การใช้งานมอเตอร์เซอร์โว: มอเตอร์เซอร์โวเป็นสิ่งจำเป็นสำหรับโครงการที่ต้องการควบคุมตำแหน่งอย่างแม่นยำ เช่น หุ่นยนต์และระบบอัตโนมัติ
มอเตอร์เซอร์โวเป็นมอเตอร์ที่ออกแบบมาเพื่อมีความแม่นยำและความถูกต้องสูงในการหมุน แตกต่างจากมอเตอร์ DC ทั่วไปด้วยความสามารถในการรักษาตำแหน่งเฉพาะเจาะจงแทนที่จะหมุนอย่างต่อเนื่อง คุณสมบัตินี้ทำให้มอเตอร์เซอร์โวเหมาะสำหรับหุ่นยนต์, อัตโนมัติ, และโครงการงานอดิเรก
บทความนี้อธิบายว่าการควบคุมมอเตอร์เซอร์โวทำงานอย่างไร, ประเภทต่างๆ ของมอเตอร์เซอร์โว, และวิธีการและอุปกรณ์ควบคุมต่างๆ นอกจากนี้ยังให้ตัวอย่างการใช้งานและการประยุกต์ใช้มอเตอร์เซอร์โว
มอเตอร์เซอร์โวคืออะไร?
มอเตอร์เซอร์โวถูกกำหนดว่าเป็นแอคทูเอเตอร์ที่อนุญาตให้ควบคุมตำแหน่ง (มุม), ความเร็ว, และการเร่งได้อย่างแม่นยำ มอเตอร์เซอร์โวมาตรฐานประกอบด้วยส่วนประกอบหลักสามส่วน: มอเตอร์ DC, วงจรควบคุม, และอุปกรณ์ป้อนกลับ
มอเตอร์ DC จ่ายพลังงานให้กับเซอร์โวและเชื่อมต่อกับเกียร์ที่ลดความเร็วและเพิ่มแรงบิดที่แกนเอาต์พุต

แกนเอาต์พุตเป็นส่วนของเซอร์โวที่หมุนและเคลื่อนย้ายโหลด
วงจรควบคุมรับผิดชอบในการรับและประมวลผลสัญญาณอินพุตจากคอนโทรลเลอร์ภายนอก สัญญาณเหล่านี้บอกเซอร์โรว่าควรย้ายไปที่ตำแหน่ง, ความเร็ว, หรือทิศทางใด วงจรควบคุมยังส่งพลังงานให้มอเตอร์ DC เพื่อขับเคลื่อนมัน
อุปกรณ์ป้อนกลับมักเป็นโพเทนชิโอมิเตอร์หรือเอนโคเดอร์ที่วัดตำแหน่งปัจจุบันของแกนเอาต์พุต

อุปกรณ์ป้อนกลับส่งข้อมูลตำแหน่งกลับไปยังวงจรควบคุม ซึ่งจะปรับพลังงานของมอเตอร์ DC เพื่อให้ตำแหน่งจริงตรงกับตำแหน่งที่ต้องการจากสัญญาณอินพุต
วงจรป้อนกลับระหว่างวงจรควบคุมและอุปกรณ์ป้อนกลับทำให้เซอร์โวสามารถเคลื่อนย้ายและรักษาตำแหน่งใดๆ ภายในช่วงการเคลื่อนไหวได้อย่างแม่นยำ
วิธีควบคุมมอเตอร์เซอร์โว?
มอเตอร์เซอร์โวถูกควบคุมโดยการส่งสัญญาณ PWM (Pulse-Width Modulation) ไปยังสายสัญญาณของเซอร์โว PWM เป็นเทคนิคที่สลับสัญญาณเปิดและปิดอย่างรวดเร็วเพื่อสร้างพัลส์ที่มีความกว้างต่างๆ ความกว้างของพัลส์กำหนดตำแหน่งของแกนเอาต์พุต
ตัวอย่างเช่น เมื่อคุณส่งสัญญาณ PWM ที่มีความกว้างพัลส์ 1.5 มิลลิวินาที (ms) เซอร์โวจะย้ายไปยังตำแหน่งกลาง (90 องศา)

เมื่อคุณส่งสัญญาณ PWM ที่มีความกว้างพัลส์ 1 ms เซอร์โวจะย้ายไปยังตำแหน่งต่ำสุด (0 องศา) เมื่อคุณส่งสัญญาณ PWM ที่มีความกว้างพัลส์ 2 ms เซอร์โวจะย้ายไปยังตำแหน่งสูงสุด (180 องศา)
สัญญาณ PWM มีความถี่ 50 Hz หมายความว่ามันจะซ้ำทุก 20 ms ความกว้างพัลส์สามารถเปลี่ยนแปลงได้ตั้งแต่ 1 ms ถึง 2 ms ในช่วงเวลาดังกล่าว
มีหลายวิธีในการสร้างและส่งสัญญาณ PWM ให้มอเตอร์เซอร์โว บางวิธีที่พบมากที่สุดคือ:
ใช้บอร์ด Arduino หรือไมโครคอนโทรลเลอร์อื่นๆ
ใช้โพเทนชิโอมิเตอร์หรือเซ็นเซอร์อนาล็อกอื่นๆ
ใช้จอยสติ๊กหรืออุปกรณ์อินพุตดิจิตอลอื่นๆ
ใช้คอนโทรลเลอร์หรือไดรเวอร์เซอร์โวเฉพาะ
ในส่วนต่อไป เราจะสำรวจวิธีการเหล่านี้อย่างละเอียดและเห็นตัวอย่างว่าพวกมันทำงานอย่างไร
การควบคุมมอเตอร์เซอร์โวด้วย Arduino
Arduino เป็นหนึ่งในแพลตฟอร์มที่นิยมมากที่สุดในการควบคุมมอเตอร์เซอร์โว บอร์ด Arduino มีเอาต์พุต PWM ที่สร้างไว้แล้วซึ่งสามารถใช้ส่งสัญญาณไปยังเซอร์โวได้ Arduino ยังมีไลบรารี Servo ที่ทำให้เขียนโค้ดสำหรับควบคุมเซอร์โวง่ายขึ้น
ในการควบคุมมอเตอร์เซอร์โวด้วย Arduino คุณจะต้องมี:
บอร์ด Arduino (เช่น Arduino UNO)
มอเตอร์เซอร์โวมาตรฐาน (เช่น SG90)
สาย jumper
แผงทดลอง (breadboard) (ไม่จำเป็น)
สายสีแดงจากเซอร์โวเชื่อมต่อไปยัง 5V บนบอร์ด Arduino สายสีดำจากเซอร์โวเชื่อมต่อไปยัง GND บนบอร์ด Arduino สายสีขาวจากเซอร์โวเชื่อมต่อไปยังขา 9 บนบอร์ด Arduino
ในการเขียนโปรแกรมบอร์ด Arduino คุณจะต้องใช้ Arduino IDE (ออนไลน์หรือออฟไลน์) คุณสามารถใช้ตัวอย่างจากไลบรารี Servo หรือเขียนโค้ดของคุณเอง
โค้ดต่อไปนี้แสดงวิธีการสแกนมอเตอร์เซอร์โวไปและกลับทั่ว 180 องศาโดยใช้ loop for:
#include <Servo.h> // รวมไลบรารี Servo
Servo myservo; // สร้างวัตถุ Servo
int pos = 0; // ตัวแปรสำหรับตำแหน่ง
void setup() {
myservo.attach(9); // ติดตั้งวัตถุ Servo ที่ขา 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Loop จาก 0 ถึง 180 องศา
myservo.write(pos); // เขียนตำแหน่งให้วัตถุ Servo
delay(15); // รอ 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Loop จาก 180 ถึง 0 องศา
myservo.write(pos); // เขียนตำแหน่งให้วัตถุ Servo
delay(15); // รอ 15 ms
}
}
โค้ดนี้ใช้สอง loop เพื่อเพิ่มและลดค่าตัวแปรตำแหน่งจาก 0 ถึง 180 องศาและกลับกัน แล้วเขียนค่านี้ให้วัตถุ Servo โดยใช้ myservo.write(pos) ยังเพิ่มการรอ 15 ms ระหว่างแต่ละขั้นตอนเพื่อลดความเร็วของการเคลื่อนไหว
อัปโหลดโค้ดนี้ไปยังบอร์ด Arduino ของคุณโดยใช้ปุ่ม Upload ใน IDE และดูว่ามอเตอร์เซอร์โวของคุณสแกนไปและกลับอย่างราบรื่น
การควบคุมมอเตอร์เซอร์โวด้วยโพเทนชิโอมิเตอร์
โพเทนชิโอมิเตอร์เป็นเซ็นเซอร์อนาล็อกที่สามารถเปลี่ยนความต้านทานตามที่คุณหมุนหัวปุ่ม คุณสามารถใช้โพเทนชิโอมิเตอร์เป็นอุปกรณ์อินพุตในการควบคุมมอเตอร์เซอร์โว
ในการควบคุมมอเตอร์เซอร์โวด้วยโพเทนชิโอมิเตอร์ คุณจะต้องมี:
บอร์ด Arduino (เช่น Arduino UNO)
มอเตอร์เซอร์โวมาตรฐาน (เช่น SG90)
โพเทนชิโอมิเตอร์ (10k Ohms)
สาย jumper
แผงทดลอง (breadboard)
แผนภาพการเชื่อมต่อสำหรับการเชื่อมต่อโพเทนชิโอมิเตอร์และมอเตอร์เซอร์โวเข้ากับบอร์ด Arduino แสดงดังนี้:
สายสีแดงจากโพเทนชิโอมิเตอร์เชื่อมต่อไปยัง 5V บนบอร์ด Arduino สายสีดำจากโพเทนชิโอมิเตอร์เชื่อมต่อไปยัง GND บนบอร์ด Arduino สายสีเขียวจากโพเทนชิโอมิเตอร์เชื่อมต่อไปยังขา A0 บนบอร์ด Arduino
สายสีแดงจากเซอร์โวเชื่อมต่อไปยัง 5V บนแถวอื่นๆ บนแผงทดลอง สายสีดำจากเซอร์โวเชื่อมต่อ GND บนแถวอื่นๆ บนแผงทดลอง สายสีขาวจากเซอร์โวเชื่อมต่อขา D9 บนแถวอื่นๆ บนแผงทดลอง
ในการเขียนโปรแกรมบอร์ด Arduino ของคุณ คุณจะต้องใช้โค้ดเดียวกับตัวอย่างก่อนหน้านี้ แต่เปลี่ยนบรรทัดบางบรรทัด:
#include <Servo.h> // รวมไลบรารี Servo
Servo myservo; // สร้างวัตถุ Servo
int potpin = A0; // ขาที่เชื่อมต่อกับโพเทนชิโอมิเตอร์
int val = 0; // ตัวแปรสำหรับอ่านค่าโพเทนชิโอมิเตอร์
void setup() {
myservo.attach(9); // ติดตั้งวัตถุ Servo ที่ขา D9
}
void loop() {
val = analogRead(potpin); // อ่านค่าจากโพเทนชิโอมิเตอร์ (0 -1023)
val = map(val,0,1023,0,180); // แมปค่าช่วง (0 -180)
myservo.write(val); // เขียนค่าที่แมปให้วัตถุ Servo
delay(15); // รอ 15 ms
}
โค้ดนี้ใช้ฟังก์ชัน analogRead(potpin) เพื่ออ่านค่าจากโพเทนชิโอมิเตอร์ที่เชื่อมต่อขา A0 แล้วใช้ฟังก์ชัน map(val,0,1023,0,180) เพื่อแมปค่าช่วงจาก 0 -1023 องศา แล้วเขียนค่าที่แมปให้วัตถุ Servo โดยใช้ฟังก์ชัน myservo.write(val) ยังเพิ่มการรอ 15 ms เหมือนตัวอย่างก่อนหน้านี้
คุณสามารถอัปโหลดโค้ดนี้ไปยังบอร์ด Arduino ของคุณโดยใช้ปุ่ม Upload ใน IDE คุณควรเห็นมอเตอร์เซอร์โวของคุณเคลื่อนไหวตามตำแหน่งของหัวปุ่มโพเทนชิโอมิเตอร์
การควบคุมมอเตอร์เซอร์โวด้วยจอยสติ๊ก
จอยสติ๊กเป็นอุปกรณ์อินพุตดิจิตอลที่สามารถตรวจจับทิศทางและขนาดของการเคลื่อนไหวตามสองแกน คุณสามารถใช้จอยสติ๊กในการควบคุมมอเตอร์เซอร์โวด้วยการแมปแกน x ของจอยสติ๊กไปยังมุมของเซอร์โว
ในการควบคุมมอเตอร์เซอร์โวด้วยจอยสติ๊ก คุณจะต้องมีดังนี้:
บอร์ด Arduino (เช่น Arduino UNO)
มอเตอร์เซอร์โวมาตรฐาน (เช่น SG90)
โมดูลจอยสติ๊ก (เช่น KY-023)
สาย jumper
แผงทดลอง (breadboard)