กลับไปหน้ารวมไฟล์
servo-control-panel-fafa85.md

ดูตัวอย่างซะก่อน อย่างหล่อ!

เกี่ยวกับโปรเจกต์นี้

ไอเดียคือพี่จะทำแผงควบคุม [Servo](https://s.shopee.co.th/7fUgFAWSki) เท่ๆ เอาไว้สั่งงานแล้วดูมุมองศากับโหมดกวาด (Sweep) ผ่านหน้าจอ [LCD](https://s.shopee.co.th/6AfsSPcAnb) คือจริงๆ พวกบอร์ดเช็ค Servo สำเร็จรูปราคาถูกมันก็มีขายแหละน้อง แต่งานนี้พี่อยากทำอุปกรณ์คุมปีกเครื่องบินจำลองในอุโมงค์ลมเล็กๆ เอาไว้สอนน้องๆ แถมอยากลองดูด้วยว่าถ้าใช้อุปกรณ์ที่ให้มาใน [Arduino](https://s.shopee.co.th/7fUgFAWSki) Starter Kit อย่างเดียวเนี่ย มันจะทำออกมาได้เจ๋งแค่ไหน

มันทำงานยังไง?

ปกติเครื่องเช็ค Servo ทั่วไปมันก็แค่หมุน Knob ปรับองศา, สั่งไปจุด Neutral หรือสั่งกวาดไปมา (Sweep) อัตโนมัติใช่ปะ? แต่เป้าหมายพี่คือทำหน้าจอคุมมุมปีกเครื่องบิน พี่เลยไม่เน้นจุด Neutral (ไอ้ที่ 90° สำหรับ Servo 0-180° น่ะ) แต่พี่ต้องการปุ่มกดเพื่อเซ็ตจุดอ้างอิงศูนย์องศา (Zero Angle) แทน เพราะบางทีตำแหน่ง Servo มันอาจจะอยู่ตรงไหนก็ได้ แต่ตัวปีกต้องได้ระดับขนานกับลมพอดี พี่ก็เลยอยากวัดค่าเบี่ยงเบนองศาเทียบกับจุดศูนย์ที่ตั้งไว้ แถมพี่ตั้งใจให้มันกวาด (Sweep) อัตโนมัติระหว่างสองมุมที่กำหนดไว้รอบๆ จุดศูนย์ด้วย โดยเราสามารถคุมความเร็วได้ว่าจะให้มันหมุนเร็วหรือช้า จัดไปวัยรุ่น!

ในโปรเจกต์นี้พี่ใช้ Servo ตัวเล็กขั้วต่อแบบ JR โดยสมมติว่ามุมของปีกมันเท่ากับมุม Servo เลย (กะเอาคร่าวๆ นะน้อง) แล้วตั้งค่าโหมด Auto-sweep ไว้ระหว่าง -30° ถึง +60° (ค่าเป็นบวกคือปีกพับลง แรงยกก็เพิ่มขึ้นตามหลักอากาศพลศาสตร์นั่นแหละ)

ตัวแผงควบคุมทำงานได้ 2 โหมด คือ Manual Control กับ Auto-sweep โดยมี User Interface เป็นปุ่มกด 3 ปุ่ม, Knob 1 อัน และหน้าจอ LCD ไว้ดูสถานะ หน้าจอจะโชว์มุม Servo ในโหมด Manual ส่วนในโหมด Auto-sweep จะโชว์มุมจำกัดที่เราตั้งไว้ใน Code (แก้จากแผงควบคุมไม่ได้นะ) ส่วนปุ่มกดก็เอาไว้เซ็ต Zero, สลับโหมด Manual/Auto และอีกปุ่มเอาไว้สลับเครื่องหมายบวก/ลบบนจอ LCD เผื่อว่า Servo ของน้องมันหมุนสวนทางกับความจริง จะได้ดูค่าบนจอได้ไม่งง แต่ปุ่มนี้แค่เปลี่ยนเครื่องหมายบนจอนะ ไม่ได้ไปสลับทิศทางหมุนของ Servo จริงๆ ในโหมด Manual เราก็ใช้ Knob หมุนสั่งมุมเอาเลย ตอนแรกจอจะโชว์มุมสัมบูรณ์ (Absolute) พอเรากด Zero ปุ๊บ มันก็จะโชว์องศาเทียบกับจุดนั้นแทน ส่วนโหมด Auto-sweep ตัว Knob จะเปลี่ยนหน้าที่ไปคุมความเร็วในการกวาดแทน (ปรับหน่วงเวลาได้ตั้งแต่ 15 ถึง 100 ms)

โน้ตทิ้งท้ายนิดนึง

พี่พยายามใช้อุปกรณ์จาก Arduino Starter Kit ให้ได้มากที่สุดนะ ยกเว้น Breadboard ที่ต้องหาอันใหญ่มาหน่อย รูปสุดท้ายที่เห็นอาจจะวางอุปกรณ์สลับที่กับในแผนผัง Breadboard นิดหน่อยเพื่อความสะดวกในการประกอบ และจำไว้นะน้อง ถ้า Servo มันสั่นพั่บๆ เหมือนเจ้าเข้า ให้เช็คการเชื่อมต่อแล้วหาแหล่งจ่ายไฟแยก (External Power Source) มาต่อซะ เพราะบางทีไฟจากบอร์ดมันไม่พอ ห้ามทำช็อตนะตัวนี้!

ส่วนในเรื่อง Code พี่ขอใช้ชื่อ Variable เดิมๆ อย่าง Angle of Attack, Alpha, หรือ AOA ไปเลยนะ ถึงมันจะไม่เป๊ะตามหลักวิชาการ 100% ก็เถอะ (มันคือมุมระหว่างแนวอ้างอิงกับทิศทางลมในแนวแกนยาว) ในโปรเจกต์นี้พี่ปรับมุมปีกเพื่อเปลี่ยน AOA สรุปง่ายๆ คือคำว่า AOA บนจอของพี่หมายถึงตำแหน่งมุม Servo ที่สัมพันธ์กับการพับของปีกนั่นแหละ สู้งานนะน้อง!

รายละเอียดทางเทคนิคเพิ่มเติม

Multi-Axis Analog Actuation Dashboard

โปรเจกต์นี้คือการเปลี่ยนพวก Potentiometer ธรรมดาๆ ให้กลายเป็นแผงควบคุมระดับโปร เพื่อคุม Servo หลายตัวพร้อมกันด้วยความแม่นยำสูง

  • High-Resolution ADC Acquisition: อ่านค่าแรงดัน Analog จาก Potentiometer ได้สูงสุด 4 ตัว โดยใน Arduino พี่ใส่ "Hysteresis Filter" เข้าไปด้วย เพื่อกัน Servo กระตุกจากสัญญาณรบกวน (Noise) เล็กๆ น้อยๆ ในตัว Potentiometer หล่อเท่เลยงานนี้
  • Proportional Mapping Matrix: ตัว Firmware จะทำการ Map ค่า Analog 0-1023 ไปเป็นมุม 0-180 องศาของ Servo แถมมีระบบ "Reverse Sweep" ให้เลือกด้วย เผื่อใครอยากให้ Servo มันหมุนสวนทางกัน

Interaction (การโต้ตอบ)

  • Software End-Stop Logic: (ฟีเจอร์เด็ด) ตัว Arduino จะคอยคุมระยะ "Safe Ranges" ไว้ เพื่อให้มั่นใจว่า Servo จะไม่หมุนเกินลิมิตจนไปฟาดกับโครงสร้างแขน Robot หรือ Gimbal ของน้องจนพังซะก่อน

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

title: "Servo Control Panel"
description: "A panel to control the pitch of a wing (or aircraft or control surface deflection) in a small wind tunnel."
author: "dancili"
category: "Motors & Robotics"
tags:
  - "planes"
views: 10072
likes: 5
price: 699
difficulty: "Easy"
components:
  - "1x Resistor 221 ohm"
  - "2x Rotary potentiometer (generic)"
  - "3x Pushbutton switch 12mm"
  - "1x Breadboard (generic)"
  - "2x Capacitor 100 µF"
  - "1x Servos (Tower Pro MG996R)"
  - "3x Resistor 10k ohm"
  - "1x Standard LCD - 16x2 White on Blue"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/7319784c-ae10-4fc8-a81b-77709128394d.ino"
  - "https://github.com/dciliberti/servoControlPanel"
  - "https://github.com/dciliberti/servoControlPanel"
documentationLinks: []
passwordHash: "c794b01ec869595ea33256eee15fa81987f6ce3d66bdb0721592f05fa66c8410"
encryptedPayload: "U2FsdGVkX19E7fG7crdAATXgsP7eyolx0lTjD07GTx1IEcUw8SJLxuZapXypoI47V1Nm5bpfBMZPBezIko3ripVBYGcp7lgK6+jeXX9JZFk="
seoDescription: "Servo Control Panel to manage wing pitch and control surface deflection in a small wind tunnel environment."
videoLinks:
  - "https://www.youtube.com/embed/DmT5eIVviCM"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/servo-control-panel-fafa85_cover.jpg"
lang: "th"