7 เม.ย. 2020 เวลา 05:58
Servo Motor ทำงานและเชื่อมต่อกับ Arduino อย่างไร
เซอร์โวมอเตอร์มีข้อดีถ้าเราต้องการที่จะเพิ่มการเคลื่อนไหวให้กับโปรเจกของ Arduino โดยที่ไม่ต้องใช้ตัวควบคุมมอเตอร์
อีกข้อดีที่เหนือกว่ามอเตอร์ DC เราสามารถควบคุมตำแหน่งของมอเตอร์เหล่านี้ได้อย่างแม่นยำ เพียงให้คำสั่งว่าจะชี้ไปที่ไหน
เซอร์โวมอเตอร์มีประโยชน์ในหลายโครงการของหุ่นยนต์เช่นการหมุนล้อหน้าบนแบบจำลอง RC เพื่อบังคับเลี้ยวหรือหมุนเซ็นเซอร์เพื่อตรวจสอบรอบ ๆ ยานยนต์หรือหุ่นยนต์
Servo คืออะไร
Servo เป็นคำอธิบายทั่วไปสำหรับระบบควบคุมวงปิด (closed Loop System)
ระบบวงปิดใช้สัญญาณ Feedback เพื่อปรับความเร็วและทิศทางของมอเตอร์เพื่อให้ได้ผลลัพธ์ที่ต้องการ
RC servo motor ทำงานบนหลักการเดียวกันกับมอเตอร์ทั่วไป ประกอบด้วยมอเตอร์ DC ขนาดเล็กที่เชื่อมต่อกับเพลาส่งออกผ่านเฟือง
เพลาส่งออกขับแขนเซอร์โวและเชื่อมต่อกับโพเทนชิออมิเตอร์ (POT)
โพเทนชิออมิเตอร์แสดงตำแหน่งตอบกลับไปยังชุดควบคุมเซอร์โวโดยเปรียบเทียบตำแหน่งปัจจุบันของมอเตอร์กับตำแหน่งเป้าหมาย
ตามค่า Error ที่ได้ ชุดควบคุมจะแก้ไขตำแหน่งที่แท้จริงของมอเตอร์เพื่อให้ตรงกับตำแหน่งเป้าหมาย
เซอร์โวมอเตอร์ทำงานอย่างไร
เราสามารถควบคุมเซอร์โวมอเตอร์ได้โดยส่งพัลส์ไปยังสายสัญญาณ เซอร์โวมอเตอร์แบบอะนาล็อกทั่วไปคาดว่าจะได้รับพัลส์ประมาณทุกๆ 20 มิลลิวินาที (สัญญาณควรมีค่า 50Hz)
ซึ่งความยาวของพัลส์จะกำหนดตำแหน่งของเซอร์โวมอเตอร์
ถ้าพัลส์สูงเป็นเวลา 1 มิลลิวินาทีมุมเซอร์โวจะเป็นศูนย์
ถ้าพัลส์สูงเป็นเวลา 1.5 มิลลิวินาทีเซอร์โวจะอยู่ที่ตำแหน่งกึ่งกลาง
ถ้าพัลส์สูงเป็นเวลาถึง 2 มิลลิวินาทีเซอร์โวจะอยู่ที่ 180 องศา
ดังนั้นพัลส์ที่อยู่ระหว่าง 1ms ถึง 2ms จะเคลื่อนที่เพลาเซอร์โวตั้งแต่ 0 องศาไปตลอดการหมุนจนสุดที่ 180 องศา
การเชื่อมต่อ Pin Servo Motor
โดยทั่วไปแล้วเซอร์โวมอเตอร์จะมีสามจุดเชื่อมต่อและมีดังนี้:
GND เป็นพื้นดินทั่วไปสำหรับทั้งมอเตอร์และโลจิก
5V เป็นแรงดันไฟฟ้าบวกที่ให้กำลังเซอร์โว
Control คืออินพุตสำหรับระบบควบคุม
การเดินสายเซอร์โวมอเตอร์ไปยัง Arduino UNO
ตัวอย่างการเชื่อมเซอร์โวมอเตอร์กับ Arduino
เช่นให้ใช้ SG90 Micro Servo Motor ซึ่งทำงานบน 4.8-6VDC (ใช้ไฟ 5V ปกติทั่วไป ) และสามารถหมุนได้ประมาณ 180 องศา (90 ในแต่ละทิศทางทวนเข็มและตามเข็มนาฬิกา)
เซอร์โวมอเตอร์ตัวนี้กินไฟประมาณ 10mA ในขณะที่ไม่ได้ใช้งาน และ 100mA ถึง 250mA เมื่อเคลื่อนที่ ดังนั้นเราจึงสามารถเพิ่มกำลังงานได้ผ่านเอาท์พุท 5 โวลต์บน Arduino
หากต้องการใช้งานซอร์โวที่ใช้กระแสมากกว่า 250mA ให้เชื่อมต่อแหล่งจ่ายไฟแยกสำหรับเซอร์โว
เชื่อมต่อสายสีแดงกับ 5V บน Arduino (หรือแจ็ค DC) และสายสีดำ / สีน้ำตาลเข้ากับกราวด์
และสุดท้าย เชื่อมต่อสายสีส้ม / สีเหลืองกับพินที่เปิดใช้งาน PWM 9
การเขียน โค้ด Arduino - SWEEP
สำหรับโค้ด Arduino ครั้งแรกของเราเราจะใช้หนึ่งในตัวอย่างในตัวที่มาพร้อมกับ Arduino IDE
ไปที่เมนูย่อยตัวอย่าง เลือก Servo และโหลดตัวอย่าง Sweep หรือใช้โค้ดดังนี้ (อย่าลืมเพิ่ม Servo.h )
int servoPin = 9;
Servo servo;
int angle = 0; // servo position in degrees
void setup() {
servo.attach(servoPin);
}
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);
}
}
อัปโหลด Code เราจะสังเกตุเห็นมอเตอร์เคลื่อนที่ไปในทิศทางเดียวทันทีแล้วกลับไปที่อีกทิศทางหนึ่ง
การควบคุมเซอร์โวด้วยโพเทนชิออมิเตอร์
ขั้นตอนต่อไปของเราคือการเพิ่มโพเทนชิออมิเตอร์เพื่อให้เราสามารถควบคุมตำแหน่งของเซอร์โวได้ด้วยการหมุนปุ่ม
ตัวอย่างนี้นี้มีประโยชน์มากเมื่อคุณต้องการควบคุมการแพนและเอียงของเซ็นเซอร์ที่เชื่อมต่อกับเซอร์โว
การ Wiring
จากรูปวงจรการเดินสายแสดงให้เห็นว่า เราใช้โพเทนชิออมิเตอร์ค่า 10k เชื่อมต่อปลายด้านหนึ่งของ POT กับพื้นอีกปลายอีกด้านหนึ่งไปยัง Arduino 5V และที่ wiper เข้ากับอินพุตแบบอะนาล็อก A0
ตัวย่างโค้ด Arduino
เขียนโค้ดเพื่อให้เซอร์โวติดตามตำแหน่งของ POT ซึ่งค่อนข้างง่ายต่อการ SWEEP
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup() {
servo.attach(servoPin);
}
void loop() {
int reading = analogRead(potPin);
int angle = map(reading, 0, 1023, 0, 180);
servo.write(angle);
}
โฆษณา