กลับไปหน้ารวมไฟล์
working-with-a-micro-servo-27b3c2.md

ในโลกของระบบฝังตัวและการสร้างหุ่นยนต์ การควบคุมการเคลื่อนไหวที่แม่นยำคือหัวใจสำคัญ "Micro Servo" เป็นอุปกรณ์ที่วิศวกรและนักประดิษฐ์นิยมเลือกใช้เพื่อสร้างกลไกการเคลื่อนที่ที่ต้องการความละเอียดสูงในพื้นที่จำกัด บทความนี้จะพาคุณไปเจาะลึกการทำงานของ Micro Servo ร่วมกับบอร์ด Arduino ตั้งแต่หลักการทางฟิสิกส์ไปจนถึงการเขียนโปรแกรมควบคุมระดับมืออาชีพ

ทำความเข้าใจ Micro Servo: กลไกภายในและหลักการทำงาน

Micro Servo (โดยเฉพาะรุ่นยอดนิยมอย่าง SG90) ไม่ใช่เพียงแค่มอเตอร์ธรรมดา แต่เป็น ระบบควบคุมแบบวงปิด (Closed-loop Control System) ขนาดจิ๋วที่ประกอบด้วย:

  1. DC Motor: ต้นกำลังการหมุน
  2. Gear Train: ชุดเฟืองเพื่อเพิ่มแรงบิด (Torque) และลดความเร็วรอบ
  3. Potentiometer: ตัวต้านทานปรับค่าได้ที่ทำหน้าที่เป็นเซนเซอร์ตรวจจับตำแหน่งองศาในปัจจุบัน
  4. Control Circuit: แผงวงจรควบคุมที่ทำหน้าที่เปรียบเทียบสัญญาณอินพุตกับตำแหน่งจริง

หลักการควบคุมด้วย PWM (Pulse Width Modulation): การสั่งการ Servo จะใช้สัญญาณ PWM ที่ความถี่ 50Hz (รอบสัญญาณ 20ms) โดยความกว้างของพัลส์ (Pulse Width) จะเป็นตัวกำหนดองศาการหมุน:

  • 1.0ms: สั่งให้ Servo หมุนไปที่ตำแหน่ง 0 องศา
  • 1.5ms: สั่งให้ Servo หมุนไปที่ตำแหน่ง 90 องศา (ตำแหน่งกลาง)
  • 2.0ms: สั่งให้ Servo หมุนไปที่ตำแหน่ง 180 องศา

โปรเจคนี้สาธิตการใช้งาน Micro Servo ร่วมกับบอร์ด Arduino เพื่อควบคุมการกวาดมุมองศาอย่างราบรื่น

Working with Micro Servo


การต่อวงจร (Hardware Connection)

การเชื่อมต่อ Micro Servo เข้ากับ Arduino มีโครงสร้างที่ไม่ซับซ้อน แต่ต้องคำนึงถึงเรื่องกระแสไฟ (Current) ดังนี้:

  1. สายสีแดง (VCC): ต่อเข้ากับแรงดัน 5V ของ Arduino (หากใช้ Servo หลายตัว แนะนำให้ใช้แหล่งจ่ายไฟแยกภายนอกเพื่อป้องกันบอร์ดรีเซ็ตจากกระแสกระชาก)
  2. สายสีน้ำตาล/ดำ (GND): ต่อเข้ากับ Ground ของระบบ
  3. สายสีส้ม/เหลือง (Signal): ต่อเข้ากับพิน Digital ที่รองรับ PWM (ในตัวอย่างนี้ใช้ Pin 9)

วิเคราะห์เจาะลึกซอร์สโค้ด (Code Logic Analysis)

เพื่อให้ Servo ทำงานได้อย่างแม่นยำ เราจะใช้ไลบรารี <Servo.h> ซึ่งเป็นมาตรฐานของ Arduino ที่ช่วยจัดการเรื่อง Timing ของสัญญาณ PWM เบื้องหลังอย่างมีประสิทธิภาพ

#include <Servo.h>

Servo myservo;  // สร้างออบเจ็กต์เพื่อควบคุม Servo
int pos = 0;    // ตัวแปรสำหรับเก็บตำแหน่งองศา

void setup() {
  myservo.attach(9);  // กำหนดให้ Servo ต่ออยู่ที่พิน 9
}

void loop() {
  // วนลูปจาก 0 ไปยัง 180 องศา
  for (pos = 0; pos <= 180; pos += 1) { 
    myservo.write(pos);              // สั่งให้ Servo ไปยังตำแหน่ง pos
    delay(15);                       // รอ 15ms เพื่อให้เฟืองเคลื่อนที่ไปยังตำแหน่งได้ทัน
  }
  
  // วนลูปกลับจาก 180 มายัง 0 องศา
  for (pos = 180; pos >= 0; pos -= 1) { 
    myservo.write(pos);              // สั่งให้ Servo ไปยังตำแหน่ง pos
    delay(15);                       // รอ 15ms
  }
}

คำอธิบายลอจิกการทำงาน:

  • myservo.attach(9): คำสั่งนี้เป็นการจอง Timer ภายในของไมโครคอนโทรลเลอร์เพื่อสร้างสัญญาณ PWM ที่ความถี่ 50Hz ออกทางพิน 9
  • myservo.write(pos): เป็นระดับการสั่งการชั้นสูง (Abstraction) โดยเราเพียงแค่ระบุตัวเลของศา (0-180) ไลบรารีจะคำนวณความกว้างพัลส์ที่เหมาะสมให้อัตโนมัติ
  • The Sweep Loop: การใช้ for loop ร่วมกับ delay(15) เป็นการสร้างการเคลื่อนที่แบบ "Smooth Motion" หากเราไม่ใส่ Delay หรือค่า Delay น้อยเกินไป Servo จะพยายามกระชากตัวไปยังเป้าหมายด้วยความเร็วสูงสุด ซึ่งอาจทำให้เกิดแรงเหวี่ยง (Momentum) และความร้อนสูงในชุดเกียร์

ข้อควรระวังเชิงวิศวกรรม

  1. Mechanical Limits: Servo บางรุ่นอาจมีระยะหมุนไม่ถึง 180 องศาจริง การสั่งไปที่ค่าสุดขอบ (เช่น 0 หรือ 180) อาจทำให้มอเตอร์ค้างและเกิดเสียงคราง (Buzzing) ซึ่งจะทำให้เฟืองพังได้ ควรปรับแก้ค่าใน Code ให้เหมาะสมกับอุปกรณ์จริง
  2. Power Supply: สำหรับการใช้งานจริงในหุ่นยนต์ ควรใช้ Capacitor ขนาด 100uF - 1000uF คร่อมสาย VCC และ GND เพื่อกรองกระแสไฟที่กระชากขณะมอเตอร์เริ่มออกตัว

การทำความเข้าใจทั้งด้านฮาร์ดแวร์และซอฟต์แวร์ของ Micro Servo จะช่วยให้คุณสามารถประยุกต์ใช้ในโปรเจคที่ซับซ้อนขึ้น เช่น แขนกลหุ่นยนต์, ระบบล็อคประตูอัตโนมัติ หรือแม้แต่ระบบกันสั่น (Gimbal) ได้อย่างมีประสิทธิภาพ

ข้อมูล Frontmatter ดั้งเดิม

title: "Working with a Micro Servo"
description: "This project demonstrates the use of a micro servo."
author: "SBR"
category: ""
tags:
  - "learning"
  - "starter"
  - "beginner"
views: 26639
likes: 5
price: 299
difficulty: "Easy"
components:
  - "1x SG90 Micro-servo motor"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "64fdd4618b710067bcded101f0c75e1ea6f5db04f915b7d4a1db7605eab8123c"
encryptedPayload: "U2FsdGVkX1/CMLg4gjWiVYxPWKTKzOAxy0zarblR6MkyjOLDSO0bWM3nngT7Oa773kw+hteghcNQomH+DKjLfXsbE0TbtAqPIERBBRmS2os="
seoDescription: "Learn how to control a Micro Servo with Arduino in this simple step-by-step project guide."
videoLinks:
  - "https://www.youtube.com/embed/riT2gdGiNhs"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/working-with-a-micro-servo-27b3c2_cover.jpg"
lang: "en"