1. เซอร์โวมอเตอร์คืออะไร? (What is a Servo Motor?)
- หน้าที่: แปลงพลังงานไฟฟ้าเป็นพลังงานกล โดยเน้นที่ “การควบคุมตำแหน่งที่แม่นยำ” (Precise Control) ต่างจาก DC Motor ทั่วไปที่หมุนไปเรื่อยๆ
- การใช้งาน: แขนหุ่นยนต์, ระบบอัตโนมัติ, การบังคับเลี้ยวในรถบังคับวิทยุ (RC Car)
- ประเภท:
- Closed Loop (แบบปิด): หมุนได้จำกัด (ปกติ 180 องศา) มีตัวกั้นภายใน เหมาะสำหรับการควบคุมตำแหน่งที่แน่นอน
- Open Loop (แบบเปิด): หมุนได้รอบตัว 360 องศา (พบได้น้อยกว่าในบริบทของเซอร์โวมาตรฐาน)
2. สเปคที่ควรรู้ (Key Specifications)
- แรงบิด (Torque): มักบอกเป็นหน่วย kg.cm หรือ oz.in
- ตัวอย่าง: สเปค 25 kg.cm หมายถึง ที่ระยะห่างจากแกนหมุน 1 ซม. มอเตอร์ยกของหนักได้ 25 กก. แต่ถ้าห่างออกไป 2 ซม. จะยกได้ลดลงเหลือ 12.5 กก.
- แรงดันไฟ (Voltage): ยิ่งโวลต์สูง แรงบิดยิ่งเยอะและหมุนเร็วขึ้น แต่ต้องไม่เกินสเปคที่ระบุ (เช่น 4.8 – 7.2V)
- กระแสไฟ (Current): กินกระแสน้อยเมื่อหยุดนิ่ง (Hold position) แต่จะกินกระแสสูงมากเมื่อเริ่มขยับหรือเมื่อมอเตอร์ถูกขัดขวางการหมุน (Stall)
3. ส่วนประกอบภายใน (Inside a Servo)
- มอเตอร์ DC (DC Motor): เป็นต้นกำเนิดพลังงาน หมุนด้วยความเร็วสูงแต่แรงบิดต่ำ
- ชุดเกียร์ (Gear Train): ทำหน้าที่ทดรอบ เพื่อเปลี่ยนความเร็วสูงให้เป็นความเร็วต่ำ แต่ได้ “แรงบิดมหาศาล”
- วงจรควบคุม (Control Circuit): แผงวงจรขนาดเล็กสำหรับรับคำสั่ง
- ตัวต้านทานปรับค่าได้ (Potentiometer): เชื่อมต่อกับแกนหมุนสุดท้าย ทำหน้าที่เป็นเซนเซอร์บอกตำแหน่ง (Feedback) ว่าตอนนี้แขนเซอร์โวหมุนไปอยู่ที่องศาไหนแล้ว
4. หลักการทำงาน (How it works)
- สัญญาณควบคุม (PWM): เซอร์โวรับสัญญาณแบบ Pulse Width Modulation (PWM) ซึ่งส่งมาทุกๆ 20 มิลลิวินาที (50Hz)
- ความกว้างของสัญญาณ (Pulse Width) คือตัวกำหนดองศา:
- Pulse กว้าง -> หมุนซ้าย
- Pulse แคบ -> หมุนขวา
- (ค่าความกว้างที่แน่นอนขึ้นอยู่กับรุ่น แต่โดยรวมคือใช้ความกว้างของสัญญาณกำหนดตำแหน่ง)
- ความกว้างของสัญญาณ (Pulse Width) คือตัวกำหนดองศา:
- ระบบป้อนกลับ (Feedback Loop):
- วงจรรับสัญญาณ PWM เข้ามา (ค่าเป้าหมาย)
- วงจรเปรียบเทียบกับค่าแรงดันไฟฟ้าจาก Potentiometer ภายใน (ค่าปัจจุบัน)
- ถ้าค่าไม่ตรงกัน วงจรจะสั่งมอเตอร์หมุนจนกว่า Potentiometer จะหมุนไปตรงกับค่าเป้าหมาย แล้วจึงหยุด
5. การเขียนโปรแกรม Arduino ควบคุมเซอร์โว
ในวิดีโอสาธิตการต่อวงจรใช้ Arduino รับค่าจาก Potentiometer ตัวนอก (Knob) เพื่อไปหมุนเซอร์โว
- การต่อสาย:
- สายสีแดง (ไฟบวก) -> 5V
- สายสีน้ำตาล/ดำ (กราวด์) -> GND
- สายสีส้ม/เหลือง (สัญญาณ) -> ขา Pin 9 ของ Arduino
- โค้ด Arduino:
- ใช้ไลบรารี
<Servo.h>เพื่อความง่าย - ใช้คำสั่ง
map()เพื่อแปลงค่าจาก Potentiometer (0-1023) ให้เป็นองศาของเซอร์โว (0-180) - ใช้คำสั่ง
myservo.write(angle)เพื่อสั่งให้เซอร์โวหมุนไปตามองศาที่คำนวณได้
- ใช้ไลบรารี
สรุปสั้นๆ: เซอร์โวคือมอเตอร์ที่มีเกียร์ทดแรงและมีสมองกลคอยเช็คตำแหน่งตัวเองตลอดเวลา ทำให้เราสั่งให้มันหันไปที่องศาไหนก็ได้ตามต้องการครับ
วิดีโอ: Servo Motors, how do they work?