โมดูล 5/5 · สัปดาห์ 13–15 · 27 ชม.

LoRa mesh และเครือข่ายภาคสนาม

UAT 207 ระบบสื่อสารและเครือข่ายข้อมูล

เวลาเรียนประมาณ 90 นาทีร่าง รอตรวจปรับปรุงล่าสุด 28 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. อธิบายพารามิเตอร์ของ LoRa ได้แก่ spreading factor แบนด์วิดท์ และ coding rate
  2. คำนวณเวลาออกอากาศของ LoRa และจำนวนข้อความสูงสุดภายใต้ข้อจำกัด duty cycle
  3. คำนวณโอกาสส่งถึงปลายทางของเครือข่าย mesh ตามจำนวน hop และการส่งซ้ำ
  4. อธิบายข้อจำกัดของปริมาณงานในเครือข่ายหลายช่วงต่อ และกฎการใช้คลื่นย่าน 920–925 MHz

ความรู้พื้นฐานที่ควรมี: UAT 207 โมดูล 1–4 · UAT 105 โมดูล 4 (MQTT และ IoT)

ทำไมต้องรู้

ในป่าชายเลนไม่มีสัญญาณโทรศัพท์ ทีมจึงต้องสร้างเครือข่ายเองเพื่อส่งข้อมูลจากเซนเซอร์และตำแหน่งของคนกลับสถานี LoRa ส่งได้ไกลด้วยพลังงานต่ำ แต่แลกด้วยอัตราข้อมูลที่ช้ามาก ส่วน mesh ให้แต่ละโหนดช่วยทวนข้อมูลต่อ หน่วยความรู้เจาะลึกเรื่อง LoRa/Mesh และการประสานฝูงโดรนผ่าน LoRa Mesh ของคลังความรู้โดรนให้ภาพรวมการใช้งานจริง โมดูลนี้ลงไปที่ตัวเลขที่ใช้ออกแบบ

พารามิเตอร์ของ LoRa

LoRa ใช้การมอดูเลตแบบกระจายสเปกตรัม spreading factor (SF) 7–12 บอกว่าแต่ละสัญลักษณ์ยาวเท่าใด SF สูงขึ้นหนึ่งขั้น สัญลักษณ์ยาวขึ้นสองเท่า ส่งได้ไกลและทนสัญญาณรบกวนกว่า แต่ใช้เวลาออกอากาศนานขึ้น datasheet ของ SX1276 ข้อ 4.1.1.7 ให้สูตรเวลาออกอากาศในกล่องสรุปสูตร โดย คือจำนวนไบต์ข้อมูล คือ coding rate (1 = 4/5) = 1 เมื่อไม่มีส่วนหัว และ = 1 เมื่อเปิด low data rate optimize

ประเทศไทยใช้แผนช่องสัญญาณ AS923-1 ย่าน 920–925 MHz ตาม LoRaWAN Regional Parameters (RP002) ของ LoRa Alliance กฎของ กสทช. ย่านนี้ สมาคมโทรคมนาคมแห่งประเทศไทยสรุปว่าอุปกรณ์ IoT ใช้ได้ถึง 500 mW e.i.r.p. โดยไม่ต้องขอใบอนุญาต และเพดานสูงสุดของย่านคือ 4 W e.i.r.p. ข้อมูลนี้มาจากแหล่งรอง ต้องตรวจกับประกาศ กสทช. ในราชกิจจานุเบกษาก่อนใช้งานจริง ส่วน duty cycle 10% ในตัวอย่างเป็นค่าที่ Meshtastic ตั้งไว้สำหรับภูมิภาค TH ไม่ใช่ข้อกำหนดที่ตรวจกับประกาศแล้ว

ตัวอย่างที่ 1 เวลาออกอากาศและจำนวนข้อความต่อชั่วโมง

ข้อความตำแหน่ง 20 ไบต์ BW 125 kHz CR 4/5 preamble 8 เปิด CRC มีส่วนหัว และเปิด DE ที่ SF11–12

import math

def time_on_air(pl, sf, bw=125e3, cr=1, n_pre=8, crc=1, ih=0):
    de = 1 if sf >= 11 else 0
    t_sym = 2 ** sf / bw
    n_pay = 8 + max(math.ceil((8 * pl - 4 * sf + 28 + 16 * crc - 20 * ih) / (4 * (sf - 2 * de))) * (cr + 4), 0)
    return (n_pre + 4.25) * t_sym + n_pay * t_sym

for sf in range(7, 13):
    t = time_on_air(20, sf)
    per_hour = {dc: int(dc * 3600 / t) for dc in (0.10, 0.01)}
    print(f"SF{sf:<2}: {t * 1000:7.1f} ms, max {per_hour[0.10]:>5} msgs/h at 10% duty, {per_hour[0.01]:>4} at 1%")
SF7 :    56.6 ms, max  6363 msgs/h at 10% duty,  636 at 1%
SF8 :   102.9 ms, max  3498 msgs/h at 10% duty,  349 at 1%
SF9 :   185.3 ms, max  1942 msgs/h at 10% duty,  194 at 1%
SF10:   370.7 ms, max   971 msgs/h at 10% duty,   97 at 1%
SF11:   741.4 ms, max   485 msgs/h at 10% duty,   48 at 1%
SF12:  1318.9 ms, max   272 msgs/h at 10% duty,   27 at 1%

SF12 ใช้เวลานานกว่า SF7 กว่ายี่สิบเท่า ถ้าคนในสนาม 20 คนส่งตำแหน่งทุกนาทีด้วย SF12 จะใช้ 1,200 ข้อความต่อชั่วโมงซึ่งเกินที่ช่องสัญญาณเดียวรับได้แม้ duty cycle 10% ต้องลดความถี่ส่ง ลด SF ในจุดที่สัญญาณดี หรือแบ่งช่องสัญญาณ

กราฟแท่งเวลาออกอากาศเป็นมิลลิวินาทีของข้อมูล 20 ไบต์ BW 125 กิโลเฮิรตซ์ SF7 57 SF8 103 SF9 185 SF10 371 SF11 741 และ SF12 1319 มิลลิวินาที แท่งสูงขึ้นเกือบเท่าตัวทุกขั้น
ภาพที่ 1 เวลาออกอากาศของ LoRa ตาม spreading factor

เครือข่าย mesh

ในเครือข่าย mesh โหนดส่งต่อข้อความให้กันจนถึงเกตเวย์ แต่ละการส่งต่อเรียกว่าหนึ่ง hop Meshtastic ตั้ง hop limit เริ่มต้นไว้ 3 และสูงสุด 7 โดรนก็ทำหน้าที่เป็นโหนดทวนสัญญาณลอยฟ้าชั่วคราวได้ แต่ทุก hop เพิ่มโอกาสหายและเวลาหน่วง และใช้ช่องสัญญาณเดียวกันซ้ำ

Li และคณะ (2001) วิเคราะห์โซ่ของโหนดไร้สายที่ใช้ช่องสัญญาณเดียว พบว่าในอุดมคติโซ่ยาวได้ปริมาณงานเพียงราว 1/4 ของลิงก์เดียว และในการจำลอง 802.11 ได้ราว 1/7 เพราะโหนดส่งต่อรบกวนกันเอง

ผังเครือข่าย เกตเวย์สถานีทางซ้าย เชื่อมกับโหนดทวน 1 และทวน 2 ซึ่งเชื่อมกับทวน 3 ตรงกลาง ทวน 3 เชื่อมกับเซนเซอร์ 1 และเซนเซอร์ 2 ทางขวา โดรนทวนด้านบนเชื่อมด้วยเส้นประระหว่างทวน 1 กับเซนเซอร์ 1
ภาพที่ 2 เครือข่าย LoRa mesh ของสถานีภาคสนาม

ตัวอย่างที่ 2 ส่งถึงปลายทางกี่เปอร์เซ็นต์

แต่ละ hop ส่งสำเร็จ 90% อย่างอิสระ ใช้ SF9 ข้อความ 20 ไบต์ ถ้าไม่สำเร็จส่งซ้ำได้ไม่เกิน R ครั้งต่อ hop

P_HOP, TOA_S = 0.90, 0.185                 # โอกาสสำเร็จต่อ hop, เวลาออกอากาศ SF9

for hops in (1, 2, 3, 5):
    row = []
    for retries in (0, 2):
        hop_ok = 1 - (1 - P_HOP) ** (retries + 1)
        tries = sum((1 - P_HOP) ** k for k in range(retries + 1))      # จำนวนครั้งเฉลี่ยต่อ hop
        row.append(f"R={retries}: {hop_ok ** hops:6.1%}, airtime {hops * tries * TOA_S:.2f} s")
    print(f"{hops} hop(s): " + " | ".join(row))
1 hop(s): R=0:  90.0%, airtime 0.18 s | R=2:  99.9%, airtime 0.21 s
2 hop(s): R=0:  81.0%, airtime 0.37 s | R=2:  99.8%, airtime 0.41 s
3 hop(s): R=0:  72.9%, airtime 0.55 s | R=2:  99.7%, airtime 0.62 s
5 hop(s): R=0:  59.0%, airtime 0.93 s | R=2:  99.5%, airtime 1.03 s

ไม่มีการส่งซ้ำ ห้า hop ส่งถึงได้ไม่ถึงสามในห้า การส่งซ้ำสองครั้งทำให้เกือบทุกข้อความถึงปลายทาง โดยใช้เวลาออกอากาศเพิ่มเพียงราว 11% ค่านี้ยังไม่รวมการชนกันของข้อความที่เพิ่มขึ้นเมื่อเครือข่ายหนาแน่น ซึ่งทำให้ปริมาณงานจริงลดลงตามที่ Li และคณะแสดงไว้

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: ออกแบบเครือข่ายภาคสนาม

  1. ใช้โค้ดตัวอย่างที่ 1 เลือก SF และอัตราส่งตำแหน่งสำหรับทีม 20 คน ให้ใช้ช่องสัญญาณไม่เกินครึ่งของ duty cycle ที่ตั้ง
  2. ตั้งโหนด LoRa สามตัว (เช่น Meshtastic) ในภูมิภาค TH วัดอัตราส่งถึงปลายทางเมื่อมีหนึ่งและสอง hop
  3. ใช้ตัวอย่างที่ 2 เทียบกับผลวัด อธิบายส่วนที่ต่าง
  4. ทดลองให้โดรนลอยตัวถือโหนดทวน สังเกตการเปลี่ยนเส้นทางของข้อความ
  5. ตรวจกฎ กสทช. ย่าน 920–925 MHz ฉบับจริง แล้วบันทึกกำลังส่งและค่าตั้งที่ใช้ให้ถูกต้องตามกฎ

ข้อผิดพลาดที่พบบ่อย

ระวัง

  • ใช้ SF12 ทุกโหนด จนช่องสัญญาณเต็ม
  • ตั้ง hop limit สูง โดยไม่คิดการชนกันและเวลาหน่วง
  • ใช้ภูมิภาคหรือความถี่ผิด กับประเทศไทย
  • คิดว่าปริมาณงานของ mesh เท่ากับลิงก์เดียว
  • ส่งข้อมูลส่วนบุคคลผ่านเครือข่ายเปิดโดยไม่เข้ารหัส

สรุป

  • SF สูงขึ้นหนึ่งขั้น เวลาออกอากาศเพิ่มเกือบเท่าตัว ส่งไกลขึ้นแต่รองรับข้อความน้อยลง
  • ประเทศไทยใช้ AS923-1 ย่าน 920–925 MHz ต้องตรวจกำลังส่งและเงื่อนไขกับประกาศ กสทช.
  • โอกาสส่งถึงลดลงแบบทวีคูณตามจำนวน hop การส่งซ้ำช่วยได้มาก
  • โซ่ช่องสัญญาณเดียวได้ปริมาณงานเพียงส่วนหนึ่งของลิงก์เดียว (ราว 1/4 ในอุดมคติ)

แบบฝึกตรวจความเข้าใจ

  1. SF10 ที่ BW 125 kHz มีเวลาหนึ่งสัญลักษณ์เท่าใด
  2. ข้อความใช้เวลาออกอากาศ 0.5 s duty cycle 1% ส่งได้สูงสุดกี่ข้อความต่อชั่วโมง
  3. แต่ละ hop สำเร็จ 80% สาม hop ไม่ส่งซ้ำ สำเร็จเท่าใด
  4. hop limit เริ่มต้นของ Meshtastic คือเท่าใด
  5. ทำไมโซ่ของโหนดไร้สายช่องสัญญาณเดียวจึงได้ปริมาณงานต่ำกว่าลิงก์เดียว
เฉลย
  1. ms
  2. ข้อความ
  3. 3
  4. โหนดที่ส่งต่อใช้ช่องสัญญาณเดียวกันจึงส่งพร้อมกันไม่ได้และรบกวนกันเอง

สรุปสูตรสำคัญ

เวลาหนึ่งสัญลักษณ์ของ LoRa
จำนวนสัญลักษณ์ของข้อมูล
เวลาออกอากาศ

แหล่งอ้างอิงหลัก

  1. Semtech Corporation. (2015). SX1276/77/78/79 – 137 MHz to 1020 MHz low power long range transceiver (Datasheet Rev. 4). link
  2. LoRa Alliance. (2021). RP002-1.0.3 LoRaWAN regional parameters. link
  3. สมาคมโทรคมนาคมแห่งประเทศไทย. การใช้งาน IoT และ RFID ย่าน 920–925 MHz (สรุปประกาศ กสทช.). link
  4. Meshtastic. LoRa configuration. Meshtastic documentation. link
  5. Li, J., Blake, C., De Couto, D. S. J., Lee, H. I., & Morris, R. (2001). Capacity of ad hoc wireless networks. In Proceedings of the 7th Annual International Conference on Mobile Computing and Networking (MobiCom '01). ACM. link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: การสื่อสาร เครือข่าย และ IoT · ความปลอดภัยสาธารณะและภัยพิบัติ · ระบบอัตโนมัติ หุ่นยนต์ และฝูงโดรน