Arduino Antenna Rotator คุมเสาตามดาวเทียม

Tracking Software รู้แล้วว่าดาวเทียมอยู่ตรงไหน แต่ถ้าเสาอากาศยังต้องหมุนด้วยมือทุกครั้ง ระบบก็ยังไม่ได้ “Track” แบบอัตโนมัติจริง ๆ

นี่คือโจทย์ที่ Antenna Rotator Controller โปรเจกต์ Arduino ของ Viorel Racoviteanu พยายามแก้ โดยให้ Arduino รับตำแหน่งเป้าหมาย Azimuth และ Elevation จาก Tracking Software ผ่าน USB แล้วควบคุม Rotator ให้เคลื่อนตาม

ถ้าไม่ต่อคอมก็ยังใช้งานแบบ Manual ได้ ผ่าน Rotary Encoder สองตัว ส่วนตำแหน่งจริงของเสาอ่านกลับมาจาก Potentiometer ของแกน Azimuth และ Elevation

Project เริ่มจากงานเล่นสนุก แต่ถูกพัฒนาต่อเนื่องจน Code รุ่นปี 2026 รวมทั้ง AC/DC Motor, EasyComm II, Yaesu GS-232B, Automatic Calibration, EEPROM, Position Filtering, Stall Watchdog และความละเอียดการแสดงผลระดับ 0.1° ไว้ใน Controller เดียว

Arduino Antenna Rotator Controller สำหรับควบคุม Azimuth และ Elevation
Antenna Rotator Controller ที่ใช้ Arduino รับคำสั่ง Azimuth / Elevation แบบ Manual หรือเชื่อมกับ Satellite Tracking Software ผ่าน USB

Key Takeaways

  • ใช้ Arduino UNO เป็น Controller หลัก
  • ควบคุมเสาอากาศสองแกน: Azimuth + Elevation
  • ใช้งาน Manual ได้ด้วย Rotary Encoder 2 ตัว
  • อ่านตำแหน่งจริงด้วย Potentiometer 2 ตัว
  • รับคำสั่งจาก Tracking Software ผ่าน USB Serial ที่ 9600 baud
  • รองรับ EasyComm II และ Yaesu GS-232B ใน Code รุ่นปัจจุบัน
  • Source ยกตัวอย่าง Software เช่น PstRotator, WXtrack, HRD, MacDoppler, WXtoIMG และ Orbitron ผ่าน DDE Plugin
  • Code เดียวสามารถตั้งให้ใช้ AC หรือ DC Motor ได้ แต่ต้องใช้ Electrical Diagram ให้ตรงกับ Motor
  • DC Version มี Logic สำหรับ Soft-Start / Soft-Stop โดยปรับ Power ตาม Angle Error
  • รองรับ Elevation 90° หรือ 180° และ Azimuth 360° หรือ 450° ตาม Configuration
  • Code 2026 เพิ่ม Automatic Calibration และเก็บค่าที่ได้ลง EEPROM
  • มี Stall Watchdog สำหรับตรวจกรณีสั่ง Motor แล้วตำแหน่งไม่เปลี่ยนตามเกณฑ์

โปรเจกต์นี้ไม่ใช่ Arduino Beginner Circuit ธรรมดา: ระบบเชื่อมต่อกับ Motor, Relay/Contactor, Power Stage และกลไกเสาอากาศที่สามารถหมุนด้วยแรงจริง โดยเฉพาะเวอร์ชัน AC ไม่ควรต่อวงจรไฟกำลังจากบทความสรุปเพียงอย่างเดียว ให้ใช้ Schematic ต้นฉบับและมาตรการด้าน Electrical Safety ที่เหมาะสมกับ Rotator ของคุณ

Antenna Rotator Controller คืออะไร?

Rotator คือชุดกลไกที่ทำหน้าที่หมุนเสาอากาศ ไปยังทิศทางที่ต้องการ

Controller ใน Project นี้ อยู่ตรงกลางระหว่าง คำสั่งตำแหน่ง กับ Motor ที่หมุนเสา

เราสามารถบอก Controller ได้ว่า ต้องการให้เสาหันไปทางไหน จากนั้น Arduino จะเปรียบเทียบ:

ตำแหน่งเป้าหมาย ↔ ตำแหน่งจริง

แล้วสั่ง Motor จนเสาเข้าใกล้ตำแหน่งเป้าหมายตามค่า Tolerance / Arrival ที่ตั้งไว้

สรุปแบบ Maker: Tracking Software ไม่ได้ขับ Motor โดยตรง แต่ส่ง “ตำแหน่งที่อยากได้” ให้ Arduino ส่วน Arduino เป็นคนจัดการ Feedback และ Output ไปยังชุดขับ Motor

Azimuth กับ Elevation คืออะไร?

Azimuth — หมุนซ้าย / ขวารอบตัว

Azimuth ใช้ระบุทิศบนระนาบแนวนอน เช่นหมุนเสาจากเหนือไปตะวันออก หรือไปยัง Bearing อื่น

Elevation — ก้ม / เงยเสา

Elevation คือมุมยกขึ้นจากแนวระดับ ซึ่งสำคัญกับ Satellite Tracking เพราะดาวเทียมไม่ได้อยู่ที่เส้นขอบฟ้าตลอดเวลา

Controller จึงต้องรู้ตำแหน่งทั้งสองแกนพร้อมกัน เพื่อให้เสา Point ไปยังเป้าหมายบนท้องฟ้า

ภาพรวมระบบ: จาก Tracking Software ไปถึง Motor

Satellite Tracking Software

USB Serial / 9600 baud

EasyComm II หรือ Yaesu GS-232B

Arduino UNO

Relay / Contactor หรือ DC Motor Driver

Azimuth + Elevation Rotator

Potentiometer Position Feedback

Arduino เปรียบเทียบ Target กับตำแหน่งจริง

อีกด้านหนึ่ง Arduino ยังส่งตำแหน่งจริงกลับทาง Serial เพื่อให้ Software ที่รองรับ สามารถแสดงตำแหน่งของเสาได้

Hardware ที่ Source ใช้

Hardware จำนวน / รายละเอียดจาก Source หน้าที่
Arduino UNO 1 Controller หลัก
Rotary Potentiometer 2 ตัว
สูงสุด 1 kΩ
Source ระบุว่า 500 Ω ทำงานได้ดีกว่า
Position Feedback ของ AZ / EL
Rotary Encoder + Push Button 2 ตัว Manual Jog Azimuth และ Elevation
Breadboard 1 Prototype / Wiring
Relay Module 2 Modules × 2 Relay
NO / COM / NC
ใช้กับ AC / Relay Control Version
Power MOSFET Module 2 Modules
Source ระบุอย่างน้อย 12V / 3A
ใช้ใน DC Motor Version
LCD I2C Code ใช้ LiquidCrystal_I2C
Address 0x27, 16 × 2
แสดง AZ / EL / Target / Error

สาย Maker ที่อยากเริ่ม Prototype: Arduino UNO, Rotary Encoder, Potentiometer, Relay / MOSFET Module และอุปกรณ์ทดลอง เป็นกลุ่ม Hardware ที่สามารถนำ Concept นี้ไปศึกษาได้ โดยไม่จำเป็นต้องเริ่มจากเสาอากาศขนาดใหญ่ทันที

Manual Mode: ไม่ต่อ PC ก็หมุนได้

Project ใช้ Rotary Encoder แยกสำหรับ Azimuth และ Elevation

Code รุ่น 2026 ใช้ Full Quadrature Decode และให้ Encoder A Channel อยู่บน Hardware Interrupt ส่วน B Channel ใช้ Pin Change Interrupt

เมื่อหมุน Encoder Code จะปรับ Target แล้ว Control Loop ค่อยขับ Rotator ไปยังตำแหน่งใหม่

นี่ต่างจากการต่อปุ่ม “Motor Left / Motor Right” โดยตรง เพราะแม้จะหมุน Manual ผู้ใช้กำลังปรับ Target Position ของระบบ Feedback

Potentiometer ทำให้ Controller รู้ว่าเสาหันไปไหนแล้ว

Motor เพียงอย่างเดียว บอกไม่ได้ว่าเสาหมุนไปถึงกี่องศาแล้ว

Project จึงใช้ Potentiometer เป็น Position Feedback ของแต่ละแกน

Arduino อ่าน ADC จาก:

  • Azimuth Potentiometer → A0
  • Elevation Potentiometer → A1

จากนั้นนำ ADC ที่ผ่าน Filter ไป Map เป็นองศา ตามค่าที่ได้จาก Calibration

นี่คือหัวใจของ Closed-loop Control ใน Project: Software ไม่ได้สมมติว่า “สั่ง Motor 3 วินาที = 30°” แต่มี Sensor Feedback กลับมาว่าตำแหน่งจริงอยู่ตรงไหน

Automatic Mode: Tracking Software ส่ง Target มาให้ Arduino

เมื่อต่อ Controller เข้ากับ PC ผ่าน USB Software สามารถส่ง Azimuth และ Elevation เข้ามาทาง Serial

Arduino รับคำสั่ง แปลงเป็น Target ของแต่ละแกน แล้วใช้ Control Loop เดิม ขยับ Rotator ไปตามตำแหน่งใหม่

เมื่อดาวเทียมเคลื่อนผ่านท้องฟ้า Tracking Software ก็อัปเดต Target ไปเรื่อย ๆ ทำให้ Controller ปรับทิศทางเสาตามข้อมูลที่ได้รับ

EasyComm II และ Yaesu GS-232B ทำหน้าที่อะไร?

Tracking Software กับ Arduino ต้อง “พูดภาษาเดียวกัน”

Code รุ่น 2026 จึงมี Parser สำหรับสอง Protocol:

  • EasyComm II
  • Yaesu GS-232B

Controller ตรวจรูปแบบคำสั่งจากแต่ละ Line และเลือก Parser ที่ตรงกับข้อมูลที่เข้ามา

EasyComm II

ใน Code มีการค้นหา Marker AZ และ EL แล้วอ่านค่าตัวเลขที่ตามหลัง

นอกจากนี้ยังตอบ Query ด้วยตำแหน่งจริงของเสา เช่น Azimuth หรือ Elevation ตาม Field ที่ถูกถาม

GS-232B

Code รุ่นที่แนบรองรับคำสั่งบางส่วน เช่น:

  • C — Query Azimuth
  • B — Query Elevation
  • C2 — Query ทั้งสองแกน
  • S — Emergency Stop
  • M — Set Azimuth
  • W — Set Azimuth + Elevation

ไม่ควรคิดว่าเป็น GS-232B ทุก Command: Comment ใน Code ระบุว่าเป็น “documented Yaesu GS-232 subset” และ Jog Letter บางตัวไม่ได้ Implement ดังนั้นถ้า Tracking Software ใช้ Command อื่น ควรตรวจ Code รุ่นล่าสุดก่อน

Tracking Software ที่ผู้สร้างระบุว่าสามารถใช้ได้

Source ระบุ Controller ใช้งานกับ Software ที่ส่งคำสั่ง EasyComm II หรือ GS-232B ได้

ตัวอย่างที่ผู้สร้างพูดถึง ได้แก่:

  • PstRotator
  • WXtrack
  • HRD
  • MacDoppler
  • WXtoIMG
  • Orbitron ผ่าน DDE Plugin

หน้า Project ยังกล่าวถึง Orbitron และ SatPC32 ในคำอธิบายภาพรวมของ Project ด้วย

Orbitron ต้องมี DDE Plugin เพิ่ม

Source ระบุว่า Orbitron ใช้งานกับ Controller นี้ผ่าน DDE Plugin ที่ส่งค่า Azimuth / Elevation ออก Serial

ดังนั้น Flow จะกลายเป็น:

Orbitron

DDE Azimuth / Elevation to Serial Plugin

USB Serial

Arduino Rotator Controller

ผู้ที่ต้องการใช้ Orbitron จริง ควรเปิดรายละเอียด Plugin จากลิงก์ที่ผู้สร้างให้ไว้ใน Source เพราะ Setting ของ Software ไม่ได้ถูกอธิบายครบในบทความสรุปนี้

Code เดียว แต่ AC กับ DC ไม่ได้ต่อ Hardware เหมือนกัน

Code รุ่น 2026 มี Configuration:

MOTOR_TYPE

เพื่อเลือกระหว่าง:

  • MOTOR_AC
  • MOTOR_DC

AC Motor / Relay Version

Code ใช้ Output แบบ HIGH / LOW ไปยัง Relay หรือ Contactor เพื่อสั่งทิศทาง

AC Version ไม่มีการไล่ PWM Power แบบ DC ดังนั้นเมื่อเข้าใกล้เป้าหมาย Logic ต้องพิจารณา Mechanical Coast, Gearbox Backlash, Contactor Drop-out Time และ Inertia

DC Motor Version

DC Version ใช้ PWM เพื่อปรับกำลัง และมี Logic Soft-Start / Soft-Stop

เมื่อเริ่มเคลื่อน Power ค่อย ๆ เพิ่ม และเมื่อเข้าใกล้ Target Power จะลดลง ตาม Error ของตำแหน่ง

เลือก Schematic ให้ตรงกับ MOTOR_TYPE: Source มี Electric Diagram แยก AC และ DC ห้ามเอา Output Circuit ของสองแบบมาปนกัน โดยเฉพาะวงจร AC / Commercial Rotator ควรตรวจ Schematic และ Rating ของอุปกรณ์ไฟกำลังโดยตรง

Soft-Start / Soft-Stop ทำไมสำคัญกับ Rotator?

ถ้า Motor เริ่มด้วย Full Power ทันที เสาและ Gearbox จะรับแรงเปลี่ยนแปลงทันทีเช่นกัน

ใน DC Mode Code คำนวณ Power จากสองมุม:

  • ระยะจากจุดเริ่มต้นของการเคลื่อนที่
  • ระยะที่เหลือถึง Target

แล้วเลือก Power ที่เหมาะสม ภายใต้ค่า Minimum Power ที่กำหนด

แนวคิดคือ:

เริ่มช้า → เร่งขึ้น → เข้าใกล้ Target → ผ่อนลง → หยุด

Source เรียกพฤติกรรมนี้ว่า Soft-Start / Soft-Stop

Tolerance, Arrival และ Buffer ไม่ใช่ค่าเดียวกัน

Tolerance

เป็น Error ที่ยอมให้ตำแหน่ง Drift โดยยังไม่ต้องปลุก Motor ขึ้นมาขยับ

Default ใน Code ที่แนบ:

  • AZ Tolerance = 3.0°
  • EL Tolerance = 2.0°

Arrival

เป็นระยะใกล้ Target ที่ Controller ถือว่าใกล้พอที่จะ Cut Power

Code ระบุว่า AC Rotator อาจยังไหลต่อจาก Inertia หลัง Relay ตัดแล้ว จึงต้อง Tune Arrival ให้สัมพันธ์กับ Overshoot จริงของกลไก

Buffer

ใน DC Mode Buffer ใช้กำหนดช่วงระยะ ที่ Power ถูก Ramp สำหรับ Soft-Start / Soft-Stop

รองรับ 90° / 180° Elevation และ 360° / 450° Azimuth

Code มี Configuration:

  • ELEVATION_MAX = 90 หรือ 180
  • AZIMUTH_MAX = 360 หรือ 450

สำหรับระบบ Elevation 90° Code รุ่น 2026 ยังมี Logic “Over the top” เมื่อ Software ส่ง Elevation สูงกว่า 90°

แนวทางใน Code คือ แปลง Elevation กลับลงมาในช่วงที่ Hardware เดินได้ พร้อมหมุน Azimuth เพิ่มอีก 180°

ส่วน 450° Azimuth เปิดโอกาสให้ Rotator มี Overlap มากกว่าหนึ่งรอบ 360° และ Code จะพยายามเลือก Raw Position ที่ใกล้ตำแหน่งปัจจุบัน

Position Filtering ลดอาการค่าตำแหน่งสั่น

Analog Potentiometer ไม่ได้ให้ ADC ที่นิ่งสนิททุก Sample

Code จึงใช้ Filter สองชั้น:

  1. Moving Average
  2. EWMA

Source Code ยังให้แนวทาง Config สองแบบ:

  • Buffer ใหญ่ขึ้น + ปิดผล EWMA ถ้าต้องการอีก Character หนึ่ง
  • Buffer เล็กลง + ใช้ EWMA สำหรับอีกลักษณะการตอบสนอง

Comment ใน Code ระบุชัดว่า ไม่มี Setting เดียวที่ดีที่สุดกับ Rotator ทุกตัว

Stall Watchdog: สั่ง Motor แล้วเสาไม่ขยับ ระบบรู้ได้อย่างไร?

Code รุ่น 2026 มี Stall Watchdog แยกแต่ละแกน

เมื่อ Motor กำลังทำงาน Code จะตรวจว่าภายในช่วงเวลาที่กำหนด Position Feedback ขยับมากพอหรือไม่

Default ใน Code:

  • Stall Window = 2,000 ms
  • AZ ต้องขยับอย่างน้อย 2.0°
  • EL ต้องขยับอย่างน้อย 1.5°

ถ้าขยับต่ำกว่าเกณฑ์ Code จะ Stop Axis และตั้งสถานะ Fault

Watchdog ไม่ได้แทน Safety Hardware: Software Stall Detection ช่วยลดความเสี่ยงบางกรณี แต่ไม่ควรใช้แทน Limit Switch, Fuse, Over-current Protection, Mechanical Stop หรือระบบตัดกำลังที่เหมาะกับ Rotator จริง

Automatic Calibration: ขั้นตอนที่ต้องทำหลังประกอบ

Source ระบุว่า Potentiometer Calibration เป็นขั้นตอนจำเป็น เพื่อให้ ADC ถูก Map เป็นตำแหน่งจริงของ Rotator

Code 2026 เปลี่ยนกระบวนการให้เป็น Automatic Calibration และเก็บผลลง EEPROM

1

กดปุ่ม Azimuth ค้างตอน Boot

Code ตรวจสถานะปุ่ม ตั้งแต่ช่วง Setup และเรียก runCalibration() ถ้าปุ่มถูกกดอยู่

2

ระบบหา AZ + / AZ −

Controller ขับ Azimuth ไปแต่ละด้าน และติดตามค่า ADC จาก Potentiometer

3

ระบบหา EL + / EL −

ทำแบบเดียวกันกับ Elevation เพื่อหาขอบเขต ADC ของแกน

4

ตรวจ Plateau และ Minimum Movement

Code ใช้การดูว่าค่า ADC หยุดเปลี่ยนในช่วงเวลาหนึ่ง เพื่อมองว่ากลไกไปถึงปลายระยะแล้ว และยังตรวจว่ามีการเคลื่อนที่มากพอก่อนยอมรับ Calibration

5

บันทึกลง EEPROM

ถ้าทั้ง 4 Leg ผ่าน ค่า Min / Max ADC จะถูกบันทึกลง EEPROM

ระวังเป็นพิเศษตอน Calibration: ขั้นตอนนี้ทำให้ Motor และ Rotator เคลื่อนที่เอง เพื่อค้นหาขอบเขต Mechanical Travel ต้องตรวจพื้นที่รอบเสา, ทิศ Motor, Stop, Wiring และ Mechanical Limit ก่อนเริ่ม Calibration

ปุ่มใน Code 2026 ทำอะไร?

Azimuth Button ตอน Boot

ใช้เข้า Automatic Calibration

Azimuth Button ตอน Runtime

Code ล่าสุดใช้เป็น Toggle:

x1 ↔ x10 Jog Mode

ทำให้ Encoder ปรับ Azimuth ทีละ 1° หรือ 10° ตาม Mode

Elevation Button

Code ล่าสุดใช้เป็น One-shot Park

Default Park Position ใน Code ที่แนบคือ:

  • PARK_AZ = 270°
  • PARK_EL = 0°

Emergency Stop

Code มี emergencyStop() สำหรับคำสั่ง GS-232B S

ฟังก์ชันนี้ตัด Output ทั้งสองแกน และยกเลิก Target ที่กำลังเดินอยู่ โดยตั้ง Target ใหม่เป็นตำแหน่งปัจจุบัน

ทำไม Video / Story บางส่วนอาจไม่ตรงกับ Code 2026?

ตัว Project ถูกพัฒนามาหลายปี และผู้สร้างเองระบุว่า Video เก่าไม่สามารถ Update ตาม Code ได้ตลอด

ตัวอย่างที่เห็นได้ชัดคือ Project Story ยังอธิบายว่า ปุ่ม Azimuth สามารถ Stop การเคลื่อนไหวทั้งหมด และเปลี่ยน Step เป็น 10°

แต่ Code 2026 ที่แนบมา แยกพฤติกรรมใหม่เป็น:

  • AZ Button ตอน Boot → Calibration
  • AZ Button ตอน Runtime → x1 / x10
  • EL Button → Park
  • GS-232B `S` → Emergency Stop

ถ้าข้อมูลใน Video กับ Code ไม่เหมือนกัน: สำหรับการ Build จริงควรยึด Code, Schematic และ Documentation เวอร์ชันล่าสุด มากกว่าพฤติกรรมในวิดีโอเก่า

จุดที่ควร Cross-check: D12 กับ PWM บน Arduino UNO

ใน Code 2026 Motor Output ถูกกำหนดไว้ที่:

  • D9
  • D10
  • D11
  • D12

Comment ใน Code ระบุ Output ชุดนี้ในบริบทของ AC HIGH/LOW และ DC PWM

แต่ถ้าใช้งานกับ Arduino UNO R3 Pinout ทางการของ Arduino ระบุ PWM ที่ D3, D5, D6, D9, D10 และ D11 โดย D12 ไม่ใช่ PWM Pin

ถ้าใช้ DC Motor + UNO R3: ก่อนนำ Soft-Start / Soft-Stop ไปใช้งานจริง ให้ตรวจ Motor Pin Mapping, Board Revision, Schematic และ Code ล่าสุดจากผู้สร้างอีกครั้ง โดยเฉพาะ Output ที่ใช้ D12 แทนการสมมติว่า PWM ทำงานเหมือนกันครบทุก Output

สามารถเปิด Arduino UNO R3 Official Pinout เพื่อตรวจ Pin Function ของบอร์ดโดยตรง

4 ค่าแรกที่ควรดูให้ตรงกับ Rotator ก่อน Upload

Code รุ่น 2026 ทำให้ Hardware หลายรูปแบบ ใช้ Code Base เดียวกันได้ แต่ต้องตั้ง Configuration ให้ตรงก่อน

Configuration ตัวเลือกจาก Code ใช้กำหนดอะไร
MOTOR_TYPE MOTOR_AC / MOTOR_DC ชนิด Output Control
ELEVATION_MAX 90 / 180 Physical Elevation Range
AZIMUTH_MAX 360 / 450 Azimuth Travel
STOP_REFERENCE STOP_NORTH / STOP_SOUTH Reference ของ Azimuth Stop

หลังจากนั้นจึงค่อยดูค่า:

  • AZ / EL Tolerance
  • Arrival Degrees
  • Soft-Start / Stop Buffer
  • Minimum DC Power
  • Dead Time
  • Park Position
  • Filter Setting
  • Stall Watchdog Threshold

Code Configuration ที่สำคัญ

Code ของ Project ตัวเต็มมีขนาดใหญ่ เพราะรวม Motor Control, Encoder Interrupt, Calibration, EEPROM, Filtering, LCD, EasyComm II และ GS-232B ไว้ด้วยกัน

ด้านล่างจึงแสดงส่วน Configuration ที่ต้องเข้าใจก่อนเป็นอันดับแรก ส่วน Code ตัวเต็มควรดาวน์โหลดจาก Hackster เพื่อให้ได้เวอร์ชันล่าสุดและไม่ตกหล่น

Antenna Rotator — Main Configuration
#define MOTOR_AC 0
#define MOTOR_DC 1
#define STOP_NORTH 0
#define STOP_SOUTH 1

#define MOTOR_TYPE        MOTOR_AC
#define ELEVATION_MAX     180
#define AZIMUTH_MAX       360
#define STOP_REFERENCE    STOP_NORTH

#define BUFFER_SIZE       10
#define EWMA_WEIGHT       0.11f

#define AZ_TOLERANCE_DEG  3.0f
#define EL_TOLERANCE_DEG  2.0f

#define AZ_ARRIVAL_DEG    3.0f
#define EL_ARRIVAL_DEG    2.0f

#define AZ_BUFFER_DEG     25.0f
#define EL_BUFFER_DEG     15.0f

#define AZ_MIN_POWER      25
#define EL_MIN_POWER      25

#define DEAD_TIME_MS      1000UL

#define PARK_AZ           270.0f
#define PARK_EL           0.0f

enum PinAssignment {
  AzPotPin       = A0,
  ElPotPin       = A1,
  AzEncoderPinA  = 2,
  ElEncoderPinA  = 3,
  AzEncoderPinB  = 4,
  AzButtonPin    = 5,
  ElEncoderPinB  = 6,
  ElButtonPin    = 7,
  ElDirPin2      = 9,
  ElDirPin1      = 10,
  AzDirPin2      = 11,
  AzDirPin1      = 12,
};

อย่า Upload Configuration นี้แบบ Copy แล้วจบ: ค่านี้เป็น Default จาก Code ที่อ้างอิง ต้องตรวจให้ตรงกับ Motor, Mechanical Range, Stop Reference, Driver และ Rotator ของระบบจริงก่อน

Video, Schematics และ Project Media

เนื่องจาก Media มีหลายรายการ จะแสดงเฉพาะ Hero ด้านบน ส่วน Video และ Diagram ถูกเก็บไว้ใน View more แบบ Pure CSS

ภาพประกอบเพิ่มเติมของ Arduino Antenna Rotator Controller
ภาพประกอบเพิ่มเติมจาก Project ต้นฉบับ สำหรับดูรายละเอียดของ Antenna Rotator Controller

Part 1 — Software and Prototyping

วิดีโอ Part 1 เน้น Software และช่วง Prototype ของ Antenna Rotator Controller จากผู้สร้าง Project

Part 2 — Hardware, Boards and Motors

วิดีโอ Part 2 อธิบายฝั่ง Hardware, Board และ Motor ของระบบ

Part 3 — Software Tracking Update

วิดีโอ Part 3 เน้นการ Update เรื่อง Software Tracking แต่ควรตรวจ Code 2026 ควบคู่กัน เพราะผู้สร้างระบุว่า Video เก่าไม่สามารถ Update ตาม Code ได้ตลอด

Electric diagram สำหรับ AC motor Arduino antenna rotator
Electric Diagram สำหรับ AC Motor / Relay Version จาก Project ต้นฉบับ
Electric diagram สำหรับ DC motor Arduino antenna rotator
Electric Diagram สำหรับ DC Motor Version จาก Project ต้นฉบับ

ถ้าจะศึกษา Project นี้ ควรไล่ตามลำดับไหน?

1

เริ่มจาก Rotator และ Position Feedback

ต้องรู้ก่อนว่า Rotator มี Travel เท่าไร, ใช้ AC หรือ DC, Potentiometer Feedback ทำงานอย่างไร และมี Mechanical Stop แบบไหน

2

เลือก AC หรือ DC Diagram

อย่าเริ่ม Wiring Motor จนกว่าจะเลือก MOTOR_TYPE และ Schematic ให้ตรงกัน

3

ตั้ง Range ของ AZ / EL

เลือก 90/180° สำหรับ Elevation และ 360/450° สำหรับ Azimuth ให้ตรงกับ Hardware

4

ตรวจ Manual Control ก่อน

ตรวจ Encoder, LCD, Position Feedback และทิศทาง Motor ก่อนเอา Tracking Software เข้ามาเพิ่ม

5

ทำ Calibration

เมื่อ Mechanical และ Feedback พร้อม จึงค่อยรัน Automatic Calibration เพื่อเก็บ ADC Limits

6

ค่อยต่อ Tracking Software

หลัง Controller รู้ตำแหน่งจริง และขยับ Manual ได้ถูกต้อง จึงค่อยทดสอบ Serial Protocol กับ Software ที่ต้องการ

Project นี้ซับซ้อน ควรอ่านต้นฉบับก่อน Build จริง

Antenna Rotator Controller ครอบคลุมทั้ง Embedded Software, Interrupt, Position Feedback, Motor Control, Relay / H-bridge, Serial Protocol, Calibration และ Mechanical Movement

บทความนี้จึงเหมาะสำหรับ ทำความเข้าใจ Architecture และเลือกจุดที่จะศึกษา แต่ไม่ควรใช้แทน Schematic และ Code ล่าสุดของผู้สร้าง

FAQ: Arduino Antenna Rotator Controller

Project นี้ใช้บอร์ดอะไร?

Source ระบุ Arduino UNO เป็น Controller หลัก

ควบคุมเสาด้วยมือได้ไหม?

ได้ ใช้ Rotary Encoder แยก Azimuth และ Elevation สำหรับ Manual Positioning

ต่อกับ Tracking Software ได้อย่างไร?

ต่อ Arduino เข้ากับ PC ผ่าน USB Serial และใช้ Software ที่สื่อสารด้วย Protocol ที่ Controller รองรับ

รองรับ Protocol อะไร?

Code รุ่น 2026 ที่อ้างอิงรองรับ EasyComm II และ Yaesu GS-232B ที่ 9600 baud

ใช้ Orbitron ได้ไหม?

Source ระบุว่าสามารถใช้ Orbitron ผ่าน DDE Plugin สำหรับส่ง Azimuth / Elevation ออก Serial

ใช้กับ AC Motor และ DC Motor ได้ทั้งคู่หรือไม่?

Code รุ่นใหม่รวม Logic AC/DC ไว้ชุดเดียว แต่ต้องเลือก MOTOR_TYPE และใช้ Schematic / Output Stage ให้ตรงกับ Motor

Soft-Start / Soft-Stop ใช้กับ AC ด้วยหรือไม่?

Logic การปรับ PWM Power เป็นจุดเด่นของ DC Mode ส่วน AC ใช้ Relay/Contactor แบบ On/Off และ Code จัดการ Arrival / Dead Time ให้เหมาะกับลักษณะดังกล่าว

รองรับ Elevation 180° หรือไม่?

รองรับ โดย Code มี ELEVATION_MAX ให้เลือก 90 หรือ 180

รองรับ Rotator 450° หรือไม่?

รองรับผ่าน AZIMUTH_MAX ที่ตั้งเป็น 360 หรือ 450

Calibration ทำครั้งเดียวพอไหม?

เมื่อ Calibration สำเร็จ Code เก็บค่าลง EEPROM จึงสามารถใช้ค่าดังกล่าวหลัง Boot ครั้งถัดไปได้ แต่ถ้ามีการเปลี่ยนกลไกหรือ Feedback ควรประเมินว่าต้อง Calibration ใหม่หรือไม่

ทำไมต้องมี Potentiometer?

ใช้เป็น Position Feedback เพื่อให้ Arduino รู้ตำแหน่งจริงของ Azimuth และ Elevation แล้วเปรียบเทียบกับ Target

มีระบบตรวจ Motor ค้างหรือไม่?

Code 2026 มี Per-axis Stall Watchdog ที่ตรวจว่าระหว่างขับ Motor ตำแหน่งเปลี่ยนมากพอภายใน Stall Window หรือไม่

ทำไมบทความไม่ใส่ Full Code หลายร้อยบรรทัด?

Code ถูกพัฒนาและอัปเดตต่อเนื่อง และไฟล์ Source ที่แนบในรอบนี้ถูกตัดท้ายในระบบ จึงแสดง Configuration ที่ตรวจได้ครบ พร้อมลิงก์ดาวน์โหลด Full Code จาก Hackster เพื่อไม่สร้างหรือเติม Code ที่ขาดขึ้นเอง

โปรเจกต์นี้น่าสนใจตรงที่ Arduino ไม่ได้แค่ “สั่ง Motor”

ถ้ามองผิว ๆ Antenna Rotator Controller อาจดูเหมือนระบบ Arduino ที่สั่ง Motor ซ้าย-ขวา ก้ม-เงย

แต่สิ่งที่ทำให้ Project นี้จริงจังกว่านั้นคือ Controller ต้องเชื่อมหลาย Layer เข้าด้วยกัน:

Tracking Software → Protocol → Target Position → Motor Control → Position Feedback → Error → Correction

ในรุ่นล่าสุด ยังเพิ่ม Filtering, Calibration, EEPROM, Stall Watchdog, North/South Stop, 360/450° Azimuth และ 90/180° Elevation เข้าไปอีก

สำหรับ Maker ต่อให้ยังไม่มีเสา Satellite จริง Project นี้ก็เป็นตัวอย่างที่ดีมาก ของการเชื่อม:

  • Arduino
  • Encoder
  • Analog Position Sensor
  • Motor Driver
  • Closed-loop Control
  • PC Software
  • Serial Protocol

และนี่คือจุดที่ Project จาก “งานทำเล่น” ค่อย ๆ กลายเป็นระบบ ที่มี Architecture ใกล้เคียงอุปกรณ์จริงมากขึ้น

References / แหล่งข้อมูลต้นฉบับ

กำลังทำ Arduino, Motor Control หรือ Tracking Project?

ถ้ากำลังหา Arduino, Rotary Encoder, Sensor, Potentiometer, Relay / MOSFET Module หรืออุปกรณ์ Maker สำหรับเริ่ม Prototype สามารถเข้ามาดูสินค้า พูดคุยกับ Community หรือส่งโจทย์มาสอบถามทีม Globalbyte ได้

 


Blog posts