วันพฤหัสบดีที่ 9 ตุลาคม พ.ศ. 2568

กว่าจะเป็น E24CY Bangkok Repeater Signal Monitor ตอนที่ 3

โดย E25VBE (Pat Jojo Sadavongvivad) 

ตอนที่ 3 : เบื้องหลัง E24CY Repeater Monitor: จาก Code สู่ข้อมูลบน Dashboard

ในสองตอนที่ผ่านมา เราได้เห็นถึงประโยชน์และวิธีการใช้งาน E24CY SDR Monitor Dashboard ในตอนสุดท้ายนี้ เราจะมาเจาะลึกถึงเบื้องหลังทางเทคนิค สำหรับผู้ที่สนใจว่าข้อมูลที่เราเห็นบนหน้าจอนั้นมีที่มาอย่างไร และสะท้อนถึงเส้นทางการพัฒนาอันยาวนานและท้าทาย

ภาพรวมสถาปัตยกรรมของระบบ

ระบบทั้งหมดทำงานเชื่อมต่อกันเป็นลูกโซ่ โดยมีองค์ประกอบหลัก 4 ส่วน:

  1. SDR# Plugin (ภาครับข้อมูล): โปรแกรมเสริม (Plugin) ที่ทำงานร่วมกับโปรแกรม SDR# บนคอมพิวเตอร์ภาครับของ E24CY Repeater
  2. การประมวลผล (VB.NET): โค้ดที่อยู่ใน Plugin ทำหน้าที่วิเคราะห์สัญญาณวิทยุที่รับมาแบบเรียลไทม์
  3. MQTT Broker (ตัวกลางส่งข้อมูล): เซิร์ฟเวอร์ที่ทำหน้าที่รับข้อมูลจาก Plugin และกระจายไปยังผู้ใช้ทุกคน
  4. Web Dashboard (ส่วนแสดงผล): หน้าเว็บที่ผู้ใช้เปิดดู ซึ่งจะ "สมัครรับข้อมูล" จาก MQTT Broker และนำมาแสดงผล


SDR# Plugin: การต่อสู้อันยาวนานเบื้องหลังความสำเร็จ

หัวใจของระบบคือ SDR# Plugin ที่เขียนด้วยภาษา VB.NET แต่กว่าจะมาถึงจุดนี้ได้ ผู้พัฒนาต้องเผชิญกับความท้าทายทางเทคนิคอย่างมหาศาล ที่ต้องใส่ความพยายามซ้ำแล้วซ้ำอีกวันละ 3-4 ชั่วโมงต่อเนื่องทุกวันอยู่หลายเดือนกว่าจะสำเร็จไปทีละขั้น ๆ ไม่ได้เขียนปุ๊บออกปั๊บเลยแม้แต่จุดเดียว

  • ภารกิจตามหา VisualSNR: การดึงค่าความแรงสัญญาณ หรือ VisualSNR property ออกจาก SDR# นั้นไม่ใช่เรื่องง่าย แม้จะได้รับความช่วยเหลือจาก AI ถึง 3 ตัว แต่ E25VBE ต้องทุ่มเทเวลา "เล่นเอาเถิด" กับโค้ดตั้งแต่ต้นเดือนกรกฎาคม 2024 ในการทดลองหลายร้อยครั้ง กว่าจะประสบความสำเร็จในช่วงปลายเดือนธันวาคม 2024 เป็นเวลาร่วมครึ่งปี เพียงเพื่อให้ได้ข้อมูลพื้นฐานที่สุดชิ้นนี้ออกมาหาค่าเฉลี่ย เพื่อสร้างเป็นเสียงบี๊บท้ายคีย์ และหลังจากนั้นอีกหนึ่งเดือน (14 มกราคม 2025) จึงสามารถเข็นออกมาเป็น Dashboard ที่มีกราฟเคลื่อนไหวสวยงามบนเว็บได้สำเร็จเป็นครั้งแรก
  • การถอดรหัส FFT Bins: ความท้าทายระลอกถัดมา คือการอ่านค่า FFT Bins (ผลลัพธ์จากการแปลงสัญญาณวิทยุเป็นข้อมูลสเปกตรัมความถี่) ออกจาก SDR# โดยตรง ซึ่งเป็นงานที่ซับซ้อนยิ่งกว่า ที่ E25VBE ต้องใช้เวลาอีกเกือบเต็ม 5 เดือนในการลองผิดลองถูก จนกระทั่งสามารถอ่านค่าออกมาได้จริงในวันที่ 5 มิถุนายน 2025 และเมื่ออ่านได้แล้ว ก็ใช้เวลาอีก 4 วันในการพัฒนาสูตรคำนวณเพื่อแปลงข้อมูล Bins ดิบๆ เหล่านั้นให้กลายเป็นค่า Occupied Bandwidth และ Carrier Frequency ที่เราเห็นกันบน Dashboard  เป็นเส้นกราฟสีเขียว(ความแรง) เหลือง(ความกว้าง) และแดง(ความถี่) อย่างในปัจจุบันนี้

จาก FFT Bins สู่ข้อมูลที่มีความหมาย

เมื่อได้ข้อมูล FFT Bins มาแล้ว โค้ดในคลาส CarrierDetector จะเริ่มทำงาน:

  • การค้นหา Carrier Frequency: โค้ดจะใช้อัลกอริทึมหลายวิธี เช่น 1. Peak Detection (การหา Bin ที่มีพลังงานสูงสุด) และ 2. Energy Centroid (การหาศูนย์กลางพลังงานของสัญญาณ) เพื่อค้นหาความถี่ของคลื่นพาหะ (Carrier) ที่แท้จริง และ 3. Symmetrical Analysis หาความสมมาตรจากขอบทั้งสองด้านว่าศูนย์กลางอยู่ที่ความถี่ใด
  • การคำนวณ Occupied Bandwidth (OBW): หลังจากพบ Carrier แล้ว โค้ดในฟังก์ชัน CalculateModulationWidth() จะทำการวัดความกว้างของสัญญาณ โดยจะหาจุดที่พลังงานของสัญญาณลดลงจากจุดสูงสุด (Peak) มาอยู่ที่ระดับที่กำหนด แล้วคำนวณระยะห่างออกมาเป็นค่าความกว้างในหน่วย kHz 222222222
  • การคำนวณ Frequency Deviation: คือการนำค่า Carrier Frequency ที่ตรวจจับได้ มาลบกับความถี่เป้าหมาย (145.075000 MHz)


MQTT และ Web Dashboard: เทคโนโลยีเบื้องหลังการส่งข้อมูล

หลังจากประมวลผลข้อมูลได้แล้ว Plugin จะทำหน้าที่เป็นผู้ส่ง (Publisher) ส่งข้อมูล (SNR, OBW, Freq) รวมถึงเลือกได้ว่าจะให้ส่งหรือไม่ส่งแถบความถี่ (Spectrum bins) ไปยังเซิร์ฟเวอร์กลาง (MQTT Broker) ผ่านโปรโตคอล MQTT ที่ฝั่งผู้ใช้ เมื่อเปิดหน้าเว็บ Dashboard (index.html) เบราว์เซอร์จะเชื่อมต่อกับ PHP Bridge (DashboardMQTTBridge.php) ซึ่งทำหน้าที่รับข้อมูลจาก MQTT Broker แล้วสตรีมมายังเบราว์เซอร์ของผู้ใช้แบบเรียลไทม์ จากนั้นโค้ด JavaScript ในหน้าเว็บจะนำข้อมูลไปวาดเป็นกราฟและอัปเดตค่าต่างๆ บนหน้าจอ

ล่าสุดเราได้ติดตั้ง MQTT server เฉพาะสำหรับ E24CY Repeater Monitor โดยเฉพาะบน server เฉพาะกิจที่เราดูแลได้ 100% เพื่อความเสถียรสูงสุดของระบบนี้ครับ


อนาคตของโครงการ (The Future of the Project)

การเดินทางของ E24CY SDR Monitor ยังไม่สิ้นสุด โดยผู้พัฒนายังคงวางแผนพัฒนาความสามารถใหม่ๆ อย่างต่อเนื่อง ได้แก่:

  • การถอดรหัสโทน CTCSS: เพื่อให้วิเคราะห์เสียงเป็นความถี่ของ CTCSS โทนที่ผู้ใช้ส่งเข้ามาได้ เพื่อส่งความถี่ที่ได้ให้ส่วนอื่น ๆในระบบ ที่จะเป็นพื้นฐานให้การพัฒนาเรื่องอื่น ๆ ต่อไป (ทำเสร็จแล้ว)
  • การส่งข้อมูลพิกัด GPS: พัฒนาให้ Dashboard สามารถรับและส่งต่อข้อมูล GPS จากโทรศัพท์มือถือของผู้ใช้ผ่าน MQTT
  • การสร้าง Heat Map: นำข้อมูลพิกัด GPS และ SNR มาประกอบกันเพื่อสร้างแผนที่แสดงความแรงของสัญญาณ (Heat Map) ในพื้นที่ต่างๆ ซึ่งจะเป็นประโยชน์อย่างยิ่งในการวางแผนและพัฒนาระบบเครือข่าย Repeater ต่อไปในอนาคต
  • Android version: โดยการ port signal monitor plugin code นี้ให้ไปรันได้บนมือถือ Android ร่วมกับ USB RTL SDR ราคาประหยัด (700 บาท) และสร้างระบบเว็บหลังบ้าน เพื่อให้เพื่อนนักวิทยุสมัครเล่น ทุกคน สามารถมี signal monitor dashboard บนเว็บเป็นของตนเอง รายงานสภาพสัญญาณที่รับได้ online (ทำไปราว 60%)
  • TDoA/MLAT: Time Difference of Arrival Multilateral ระบบวิเคราะห์ความต่างของเวลาที่หลาย ๆ สถานีได้รับคลื่น (squelch เปิด) ในเวลาแตกต่างกัน เพื่อนำไป triangulate หาตำแหน่งของแหล่งกำเนิดสัญญาณ โดยการใช้ SDR ที่มี sampling rate ที่เพียงพอ เช่น 61.44 Mega-Sample Per Sec (MSPS) ร่วมกับ FPGA Logic ในการ sync สัญญาณนาฬิกากับดาวเที่ยม เพื่อจับเวลาที่คลื่นวิทยุเดินทางถึงแต่ละสถานี เพื่อประมวลผลเป็นระดับ sub-sample แล้วส่งให้ server ส่วนกลางประมวลออกมาเป็นตำแหน่ง lat/lon ซึ่งเป็นเทคโนโลยีชั้นสูงแบบเดียวกับที่ใช้ในเรดาร์ทางทหาร (ทำไปราว 20%)

บอร์ดที่เห็นนี้คือ Pluto SDR ที่มี RF chip ที่ต่อกับ FPGA ให้ผู้พัฒนาสามารถ “ซอย” คลื่นวิทยุออกเป็น 61.44 ล้านชิ้นย่อยเพื่อนำไปประมวลผลต่อได้ครับ ชิปที่มี heat sink เล็กคือ AD9363 ส่วนชิปที่มี heat sink ใหญ่กว่า คือ Zync 7020 ครับ

  • IC-9700 Signal Generator คือโปรแกรมที่เชื่อมต่อทาง LAN เพื่อใช้งาน 9700 เป็น signal generator เพื่อใช้สร้างสัญญาณรูปแบบต่าง ๆ ประกอบการศึกษาเรื่องคลื่นวิทยุ ทั้งเชิงความถี่  modulation ต่าง ๆ ทั้ง FM AM DV USB LSB CW CW-R RTTY RTTY-R (ทำไปราว 50%)
  • Antenna Energy-flow Visualizer: ระบบแสดงรูปแบบการแพร่กระจายคลื่นของสายอากาศใด ๆ แบบ real time ที่ใช้ USB RTL SDR 12 ตัว ต่อกับ Windows เพื่ออ่านข้อมูลไปส่งให้ web browser ทำการ render ภาพแสดงระดับพลังงานที่แพร่กระจายออกไปในแต่ละองศารอบ ๆ ตัว ในรูปคือเมื่อหันสายอากาศ Yagi 5E ไปหาทิศ 9 นาฬิกา หน้าจอก็จะแสดงระดับพลังงานที่แพร่กระจายไปในทิศนั้น ระบบนี้ได้นำไปแสดงในงาน Bangkok Radio Fest ที่ห้างเซียร์ รังสิต (เสร็จแล้ว)

ในรูปนี้จะเห็นว่า เมื่อคุณน้องชุดขาวหัน Yagi 5E มาทางซ้ายของโต๊ะ จะเห็นว่าแถบพลังงานที่ 9 นาฬิกาบนจอเปลี่ยนเป็นสีบานเย็น หมายถึงมีพลังงานความเข้มสูงบีมไปในทิศนั้นครับ

การมีอุปกรณ์ชนิดนี้ ช่วยให้นักวิทยุ “เห็น” สิ่งที่ปกติมองไม่เห็น เปิดโลกของคลื่นวิทยุ และลองนึกภาพตามว่า ถ้าเราเริ่มต้นด้วยการนำสายอากาศรอบตัวเช่น dipole, quarter wave, half wave มาตั้งตรงกลาง แล้วค่อย ๆ เพิ่ม element ที่ 2 3 4 5 ให้เห็นความเปลี่ยนแปลงในรูปแบบการแพร่กระจายคลื่น ความเข้มของคลื่นวิทยุที่แพร่กระจายออกไปในแต่ละทิศ จะช่วยให้นักวิทยุเข้าใจการทำงานของสายอากาศได้ดีกว่าการจินตนาการอย่างเดียวมากครับ

เรื่องราวทั้งหมดนี้สะท้อนให้เห็นถึงจิตวิญญาณของนักวิทยุสมัครเล่น ที่ไม่ได้หยุดอยู่แค่การสื่อสาร แต่คือการเรียนรู้ ทดลอง และสร้างสรรค์สิ่งใหม่ๆ เพื่อพัฒนาวงการและแบ่งปันความรู้ให้แก่เพื่อนสมาชิกเพื่อยกระดับวงการต่อไป


ส่งท้าย

นอกเหนือจากสิ่งที่เขียนไป ขอ “เดา” คำถามอื่น ๆ ที่อาจจะมีผู้ต้องการถาม และตอบไว้ให้ล่วงหน้าก่อนเลยดังนี้

Q: คนรุ่นใหม่หลายท่าน ทั้งเกมเมอร์และ “สายไอที” มักจะคุ้นเคยกับ Dashboard ข้อมูลเรียลไทม์จากเกม หรือโปรแกรม Monitoring ในกรณีที่ท่านใดสงสัยว่าจะนำข้อมูลจาก Dashboard นี้ไปแสดงผลบน Stream Deck หรือจอเล็กๆ บนเคสคอมพิวเตอร์ได้หรือไม่?

A: ทำได้อย่างแน่นอนครับ หากมีผู้สนใจร้องขอมา E25VBE ยินดีที่จะพัฒนา API (Application Programming Interface) หรือ Webhook เพื่อให้ท่านที่สนใจสามารถดึงข้อมูลแบบเรียลไทม์ไปสร้างสรรค์โปรเจกต์ของตนเองต่อได้ เช่น การสร้าง Widget แสดงค่า SNR, Occupied Bandwidth, หรือ Carrier Frequency หรือแม้กระทั่งการทำให้ไฟ RGB บนคีย์บอร์ดของท่านเปลี่ยนสีตามความแรงของสัญญาณที่รับได้

Q: ระบบทั้งหมดนี้ใช้คอมพิวเตอร์สเปกแรงแค่ไหน? สามารถใช้ Raspberry Pi ทำได้หรือไม่?

A: หัวใจหลักของภาครับคือ Software-Defined Radio (SDR) ซึ่งมีให้เลือกหลากหลาย ตั้งแต่ Airspy R2/Mini, USB RTL-SDR ราคาประหยัด ไปจนถึงรุ่นประสิทธิภาพสูงอย่าง Ettus Research B210 ทุกท่านสามารถสร้างภาครับและส่วนวิเคราะห์สัญญาณของตนเองได้ โดยแนะนำว่าสเปกคอมพิวเตอร์ขั้นต่ำควรเป็น Raspberry Pi 4 เพื่อให้การประมวลผลข้อมูลมีความลื่นไหลและไม่สะดุดครับ

Q: "ถ้าผมอยากจะทำโปรเจกต์ IoT ให้หลอดไฟที่บ้านเปลี่ยนสีตามค่า SNR หรือให้พัดลมหมุนเร็วขึ้นเมื่อมีคนใช้ Repeater ผมต้องเริ่มจากตรงไหน?"

A: ท่านสามารถเริ่มต้นได้จากเทคโนโลยี MQTT ที่กล่าวถึงในตอนที่ 3 ครับ เทคโนโลยีนี้คือหัวใจสำคัญของ Internet of Things (IoT) ซึ่งหมายความว่านักวิทยุสมัครเล่นรุ่นใหม่ที่มีความรู้ด้าน Arduino, ESP32 หรือ Raspberry Pi สามารถ "ฟัง" (Subscribe) ข้อมูลจาก MQTT Server ของ E24CY เพื่อนำไปสร้างโปรเจกต์ที่เชื่อมโลกของวิทยุสมัครเล่นเข้ากับอุปกรณ์ในชีวิตประจำวันได้ เช่น การสร้างไฟแสดงสถานะออนไลน์ของ Repeater หรือการส่งข้อความแจ้งเตือนผ่าน LINE เมื่อมีสัญญาณเข้ามา

Q: "โค้ดทั้งหมดนี้เขียนด้วยภาษาอะไรบ้างครับ? ผมเรียน Python/JavaScript อยู่ จะเอาไปต่อยอดได้ไหม?"

A: โครงการนี้เป็นการผสมผสานเทคโนโลยีหลากหลายภาษา ตั้งแต่ VB.NET ผสมกับ C# (CTCSS Decoder และ Antenna Visualizer) สำหรับ SDR# Plugin ที่ทำงานบน Windows, ภาษา PHP สำหรับสร้าง Bridge บนเว็บเซิร์ฟเวอร์, ไปจนถึง JavaScript สำหรับการแสดงผลบนหน้าเว็บ นี่แสดงให้เห็นว่าความรู้ด้านการเขียนโปรแกรมที่น้องๆ เรียนในห้องเรียน ไม่ว่าจะเป็น Python, JavaScript หรือภาษาอื่นๆ ล้วนสามารถนำมาประยุกต์ใช้กับกิจการวิทยุสมัครเล่นได้อย่างสร้างสรรค์ครับ

Q: ทำไมต้องลงทุนทำอะไรที่ซับซ้อนขนาดนี้ ในเมื่อแค่คุยกันเฉยๆ ก็ได้?

A: หัวใจของกิจการวิทยุสมัครเล่นไม่ใช่แค่ 'การสื่อสาร' แต่คือ 'การทดลองและเรียนรู้' (Experimentation and Learning) โครงการนี้คือภาพสะท้อนที่ชัดเจนของจิตวิญญาณนั้น คือการตั้งคำถาม, การแสวงหาคำตอบด้วยเทคโนโลยี, และการแบ่งปันผลลัพธ์เพื่อยกระดับวงการไปด้วยกัน

Q: ถ้าผมไม่ได้อยู่กรุงเทพฯ ผมจะใช้ประโยชน์จากระบบนี้ได้ไหม หรือจะมีระบบแบบนี้ในพื้นที่ของผมได้อย่างไร?

A: แม้ว่า Dashboard นี้จะสำหรับ Repeater ในกรุงเทพฯ แต่แนวคิดและเทคโนโลยีเบื้องหลังสามารถนำไปปรับใช้ได้ทุกที่ โครงการในอนาคตอย่าง 'Android Version' ที่กำลังพัฒนาอยู่ ก็มีเป้าหมายเพื่อให้นักวิทยุสมัครเล่นทุกคนสามารถสร้างระบบ Monitor ของตัวเองได้ด้วยอุปกรณ์ราคาประหยัด ซึ่งจะเปิดโอกาสให้เกิดเครือข่ายสถานีตรวจวัดสัญญาณที่ขับเคลื่อนโดยชุมชน และอาจนำไปสู่การสร้างแผนที่ Heat Map ของประเทศไทยในอนาคตได้

MQTT Server ที่ติดตั้งล่าสุด ก็ได้ถูกออกแบบมาให้รองรับการใช้งานจากนักวิทยุสมัครเล่นได้พร้อมกันสูงสุดถึง 10,000 การเชื่อมต่อ เพื่อรองรับบริการสำหรับชุมชนในวงกว้างอยู่แล้วครับ

Q:  อยากเรียนรู้วิธีพัฒนาระบบแบบนี้บ้าง ต้องทำอย่างไร?

A:  อย่างแรกที่ต้องมีคือความมุ่งมั่น จะทำอะไรแล้วไม่ล้มเลิกกลางคัน มุ่งจะทำอะไรก็ทำไปจนกว่าจะสำเร็จ ความไม่มองแต่ปัญหา แต่มองหาวิธีแก้ปัญหา และทำไม่ไปเรื่อย ๆ ไม่เลิก การทำระบบนี้จนออกมาได้ไม่ใช่เพียงเพราะรู้อะไร แต่เพราะตั้งโจทย์แล้วทำไปไม่หยุด ไม่ล้มเลิก ไม่ทำสิ่งที่ใช้งานจริงไม่ได้ แต่แก้ทุกปัญหาที่เจอไประหว่างทางให้หมด รู้ภาษาอะไรไม่ใช่สิ่งสำคัญ ยุคนี้เรามี AI ดี ๆ หลายตัว ตัวนี้ไม่ได้ก็ไปถามตัวอื่น ถามทุกตัวแล้วไม่ได้ก็ไปค้นที่มีคนอื่นถามไว้ (Google Search) แล้วเอามาลองจนกว่าจะออกครับ

สำหรับสมาคมหรือชมรมที่ต้องการนำระบบนี้ไปให้บริการกับชุมชนของท่าน สามารถติดต่อกับ E25VBE ได้ทาง Facebook: Jojopat PatJojo ได้เสมอครับ ยินดีให้ข้อมูลและคำแนะนำทุกอย่าง ตลอดจนการ Remote เข้าไปช่วยติดตั้ง รวมถึงการจัดเตรียม Web และ MQTT Server ให้รองรับ Dashboard ของสมาคมประจำจังหวัดของท่านด้วยครับ

อ่านต่อ ตอนที่ 1 
อ่านต่อ ตอนที่ 2