การต่อไวไฟเพื่อใช้อินเทอร์เน็ต
ตอนที่แล้วผมลืมลงเวบยูไอสำหรับการต่ออินเทอร์เน็ต จากที่ผมกล่าวไปแล้วตอนที่ 2 โครงการ RTKBase V3 จะมีไวไฟสองแบบคือแบบ AP เพื่อติดต่อกับอุปกรณ์ได้ สามารถที่จะเข้าไปคอนฟิกในเวบได้ง่ายเช่นเปลี่ยนไวไฟต่ออินเทอร์เน็ต (Wifi client) จะได้ทำได้สะดวกไม่ต้องต่อสายแลน


ออกแบบวงจรเก็บข้อมูลรังวัดสแตติกแบบเนทีพ
คล้อยหลัง V3 ที่ผมโพสต์ในบทความก่อนขอเรียกเป็น V3.1 ก็แล้วกัน มาในV3.2 ที่ผมได้อัพเกรดผมได้เพิ่มฮาร์ดแวร์คือตัวUSB-UART มาอีกตัวหนึ่ง จากปัญหาที่ผมบอกในตอนก่อนไม่สามารถจัดเก็บข้อมูลสแตติกแบบRaw format หรือรูปแบบเนทีฟของ Unicorecomm แท้ๆ ก่อนหน้านี้ผมได้เปิดใช้พอร์ทซีเรียลที่ว่างของ UM980 อีกตัวหนึ่ง แต่เมื่อไปต่อกับพอร์ตยูอาร์ท (UART) ของ Orange Pi Zero 3 ต่อไปขอเรียกสั้นว่า OPZ3 ก็มีปัญหาทันทีเนื่องจากไปชนกับของที่มีอยู่แล้ว ทำให้โปรแกรมที่เป็นโค้ดเบสดั้งเดิมของคุณสเตฟาล รวนและน๊อคไป
เลือกใช้ USB-UART
ถึงเวลานั้นได้วิเคราะห์ว่า ไม่ควรจะใช้ยูอาร์ทของ OPZ3 อีกต่อไป หมายเหตุถ้ามีเวลาไล่แก้ไข ก็อยู่ในวิสัยที่ทำได้ แต่คุณคล็อดเอไอบอกว่ามีหนทางอื่นที่ง่ายกว่า ในที่สุดหันมาเลือกใช้ USB-UART หน้าตามันข้างหนึ่งจะเป็นพอร์ต USB อีกด้านหนึ่งจะมีขารวม 5 ขา หน้าที่คือรับส่งข้อมูลจากยูอาร์ท (แรงดันไฟฟ้า 3.3V) แล้วแปลงเป็นข้อมูลอนุกรมผ่านเข้าทางพอร์ตยูเอสบี โดยมีชิปที่หน้าที่แปลงได้แก่ CH340, CP2102



วิธีใช้งานดูเทอะทะไปหน่อย คือหัวเอาหัว USB ตัวผู้นี้ไปเสียบกับพอร์ทยูเอสบีของ OPZ3 แล้วต่อสายสามเส้น (GND, RX, TX) เสียบที่เข็มจากอีกด้านไปยัง UM980
เวบยูไอสำหรับรังวัดสแตติก
สรุปแล้วก็ง่ายจริงๆเหมือนที่คุณคล็อดเอไอบอกคือการรังวัดสแตติกแล้วส่งข้อมูล raw ในรูปแบบเนทีฟ OBSVM จาก UM980 เข้ามาใน OPZ3 แล้วจัดเก็บใน USB flash drive ก็ทำได้อย่างราบรื่น ในการนี้ได้ออกแบบหน้าตาของเว็บเพิ่มเติม เพื่อสั่งเก็บข้อมูลลงไฟล์และหยุดได้ สามารถดาวน์โหลดและลบไฟล์เก่าที่ไม่ต้องการได้ และได้เขียนไฟล์ไพทอนและสคริปท์เซอร์วิสเพื่อให้สามารถทำงานได้อัตโนมัติ



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





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






ตอนนี้ DIY RTK Base Station ของผมก็สามารถเก็บข้อมูลสแตติกได้สองแบบคือเก็บบ่มจาก RTCM3 ในเคสนี้ตัวเบสต้องเปิดใช้งานแล้ว ป้อนค่าพิกัดแล้วและส่งข้อมูลออก NTRIP Caster ตัวข้อมูลนี้สามารถแปลงเป็น Rinex ได้ นี่เป็นการออกแบบจากของคุณสเตฟาล ตัวอย่างเราจะใช้ข้อมูลแบบนี้ไปโปรเซสงานบินโดรนแบบ PPK
ส่วนการเก็บข้อมูลสแตติกแบบเนทีฟ ที่ผมกล่าวไปข้างต้น จะได้ข้อมูลเป็นไฟล์ .obs ทาง unicorecomm ผู้ผลิต UM980 เรียกรูปแบบข้อมูลนี้ว่า Obsvm ข้อเสียคือไฟล์นี้ไม่สามารถอ่านได้ด้วยโปรแกรมทั่วๆไปจะต้องหาทูลส์ที่ชื่อ “Converter” รันบนวินโดส์มาแปลงเป็นรูปแบบ Rinex
การแปลงข้อมูลสแตติก (Obsvm) เป็น Rinex
ใช้ทูลส์ “Converter” ของยูนิคอร์ผู้ผลิต UM980 สามารถหาดาวน์โหลดได้ มันข้อตินิดหนึ่งคือไฟล์ Rinex ควรจะมีค่าพิกัดคร่าวๆมาให้ ผมว่าทูลส์ตัวนี้ควรจะเขียนมาให้ด้วยแทนที่จะให้ผู้ใช้กรอกเอง ในกรณีส่งไฟล์ Rinex ที่มี่ค่าพิกัดคร่าวๆ (ECEF) เป็น 0,0,0 ไปคำนวณของกรมแผนที่ทหาร จะมีปัญหาเพราะทางเวบต้องการค่าพิกัดของหมุดที่ส่งไปเพื่อจะเลือกหมุด CORS มาให้


เปิดปิดพัดลมแบบอัตโนมัติจากเซนเซอร์วัดอุณหภูมิ
ในลำดับต่อไปที่ผมเพิ่มอีกคือระบบการเปิดปิดพัดลมตัวเล็กขนาด 25×25 มม. ในกล่องอลูมิเนียมเพื่อระบายความร้อน การเปิดปิดเป็นแบบอัตโนมัติโดยการวัดอุณหภูมิ ตัวเซ็นเซอร์วัดอุณหภูมิก็ไม่ต้องไปหาที่ไหนมีมากับ OPZ3 พร้อมแล้วซึ่งมีถึงสามเซ็นเซอร์ที่ใช้สำหรับวัดอุณหภูมิซีพียู ผมจะตั้งเกณฑ์ว่าถ้าอุณหภูมิเกิน 55 องศาเซลเซียส ผมจะเปิดพัดลม และถ้าอุณหภูมิลงต่ำกว่า 53 องศาเซลเซียสจะปิดพัดลม
การต่อพัดลมแบบตั้งค่าให้หมุนที่อุณหภูมิเกินที่ตั้งไว้และหยุดหมุดเมื่ออุณหภูมิต่ำลงมาถึงเกณฑ์ มีโครงการพวกนี้บนบอร์ดอะดุยโน่จำนวนมากที่ปล่อยมาให้ศึกษาซึ่งเป็นโค้ดภาษาซี ส่วนใน RTKBase บนบอร์ด OPZ3 ที่เราจะใส่วงจรพัดลมนี้จะเป็นโค้ดไพทอน เนื่องจากบอร์ด OPZ3 ใช้แรงดันไฟฟ้า 3.3V ไม่สามารถใช้แรงดันบนบอร์ดนี้จากขา GPIO ไปขับพัดลมได้โดยตรง แต่บนบอร์ดมีขาเฉพาะสำหรับจ่ายไฟ 5V สามารถเอาไฟตัวนี้ไปเลี้ยงพัดลมได้
วงจรพัดลม
สำหรับอากาศในประเทศไทยเป็นที่ทราบดีว่าหน้าร้อนจะร้อนมาก ถ้าอุปกรณ์ทั้งหมดใส่ในกล่องจะมีความร้อนปล่อยออกมาเมื่ออุปกรณ์มีการทำงาน การระบายความร้อนที่ดีที่สุดก็คือใช้พัดลมดูดอากาศร้อนออกมา ส่วนอากาศที่เย็นกว่าจะเข้าแทนที่ เนื่องจากกล่องไม่ได้ออกแบบให้กันน้ำ ผมจึงเจาะรูที่ฝาด้านหน้าเพิ่มเพื่อให้อากาศเย็นสามารถไหลเวียนเข้าไปได้ เปรียบเทียบกับ V1 ที่ใช้ ESP32 + UM980 คู่นี้ปล่อยความร้อนออกมาน้อยกว่า OPZ3 + UM980 มาก
ขาบนบอร์ด OPZ3 จะมีสถานะ High (3.3V) หรือ Low (0V) เท่านั้น เราจะใช้สัญญาณ 3.3V นี้ไปเตะสวิชท์แทน ตัวสวิชท์นี้จะใช้ทรานซิสเตอร์ 2N2222 ที่มีสามขา E,B และ C สัญญาณจาก OPZ3 ต่อเข้า B ถ้าไฟ 3.3V เข้าจะเตะสวิชท์ทำให้วงจรเชื่อม E กับ C ทำให้ Ground เชื่อมต่อกัน ไฟครบวงจร โดยที่พัดลมที่มีไฟ 5V ต่อจากขาของบอร์ด ทำให้พัดลมหมุน เมื่อต้องการปิดพัดลมก็ให้บอร์ดปรับแรงดันไฟฟ้าผ่านขาสัญญาณเป็น 0V จะทำให้สะพานไฟยก E ออกจาก C ไม่เชื่อมต่อกัน
กรณีที่พัดลมหยุดหมุนทันทีทันใดเนื่องจากเป็นขดลวด แค่พัดลม 5V จะทำให้เกิดกระแสย้อนกลับได้ถึง 50V-100V ทีเดียว จะทำให้ตัวสวิชท์คือทรานซิสเตอร์ 2N2222 พังทันที ดังนั้นต้องมีตัวช่วยคืดไดโอด 1N4007 มาต่อที่ขั้วบวกของพัดลมมาที่ขา C ของทรานซิสเตอร์ เนื่องจากไดโอดยอมให้ไฟผ่านได้ทางเดียวเท่านั้น เมื่อเกิดกระแสไฟฟ้าย้อนกลับ กระแสไฟฟ้าไม่สามารถผ่านไปหาทรานซิสเตอร์ได้
อีกประเด็นหนึ่งคือขา B ของทรานซิสเตอร์กระแสผ่านมากก็ไม่ได้จะทำให้พัง วิธีการลดกระแสคือการนำตัวต้านทานมาต่อก่อนเข้าขา B ผมเลือกใช้ 330 โอมห์ ถ้าดูรูปไม่ชัดเจนก็ดูที่วงจรในหัวข้อถัดไป








วงจรรวม
V3.2 จะมีการอัพเดทโดยเพิ่ม USB-UART กับวงจรพัดลมเปิดปิดอัตโนมัติ ส่วนยูเอสบีแฟลชไดรว์อยู่ใต้ USB-UART ส่วนยูเอสบีพอร์ตด้านหน้าเสียบด้วย USB Wifi (ชิป RTL8188EU) ขนาดเล็กมีเสาอากาศหรือไม่มีเสาอากาศก็ได้ เพราะต้องการให้เป็นแค่ Access Point ส่วน OPZ3 จะมีสายอากาศไวไฟขนาดเล็กและเป็นสายอ่อน ไม่เหมาะจะเอาไว้ด้านนอกที่อาจจะเสียหายได้

ประสบการณ์การใช้แฟลชไดรว์
บอร์ดของ OPZ3 มีแค่ USB 2.0 เท่านั้น ดังนั้นการเลือกแฟลชไดรว์ควรจะเลือกใช้ 2.0 เพราะราคาถูกกว่า ด้วยความที่ผมเน้นว่าขอให้ถูกๆ ก็มีประสบการณ์ขมๆ คือซื้อจากร้านคนไทยในเมืองไทยขนาด 128 GB ราคาเกือบสองร้อยบาท ผมเข้าใจว่าน่าจะของเก่าเก็บล้างสต๊อคเอามาขาย ผลก็คือเมื่อใช้งานหนักๆ เช่นผมพยายามโหลดข้อมูล 800 MB จากไฟล์สแตติกผ่านทางเวบแอพ ผลก็คือไหม้ไป ตัวที่สองรุ่นเดียวกันเพราะซื้อมาสองอันก็เช่นเดียวกันคือไหม้ตายในขณะทำหน้าที่
ผมหันไปสั่งจากร้านจีนในชอปปี้เพราะเห็นแก่ของถูกเหมือนกัน และยังไม่เข็ด ขนาด 64 GB ผลก็คือความจุปลอม ยังไม่ทันได้ลองใช้ เอามาทดสอบกับโปรแกรม f3probe บนลีนุกซ์ถึงกับสะดุ้ง ขนาดที่โฆษณาคือ 64GB ขนาดจริงคือ 121MB นี่เล่นเอาคุณคล็อดเอไอหัวเราะเยาะผมเลยทีเดียว ผมแจ้งไปทางชอปปี้ขอเคลมคืน สองวันทางชอปปี้ก็คืนเงินให้ ส่วนของเขาไม่ได้ให้ส่งกลับเลยเก็บเป็นที่ระลึก
“Haha! Yes! Classic “Damn Cheap Chinese USB” problem! 😄
The formula is always:
Very small physical size + Very high claimed capacity + Very low price = FAKE ❌”
rtkbase@orangepizero3:~$sudo f3probe --destructive --time-ops /dev/sda
F3 probe 8.0 Copyright (C) 2010 Digirati Internet LTDA. This is free software;
see the source for copying conditions. WARNING: Probing normally takes from a few seconds to 15 minutes,
but it can take longer. Please be patient.
Bad news: The device `/dev/sda' is a counterfeit of type limbo You can "fix" this device using the following command: f3fix --last-sec=247808 /dev/sda Device geometry: *Usable* size: 121.00 MB (247809 blocks) Announced size: 58.59 GB (122880001 blocks)
Module: 64.00 GB (2^36 Bytes)
Approximate cache size: 0.00 Byte (0 blocks), need-reset=no
Physical block size: 512.00 Byte (2^9 Bytes)
Probe time: 2.69s
Operation: total time / count = avg time
Read: 70.8ms / 2154 = 32us
Write: 2.62s / 2150 = 1.2ms
Reset: 0us / 0 = 0us
rtkbase@orangepizero3:~$
ตอนนี้ผมซื้อแฟลชไดรว์ของ Lexar มาสองอันความจุ 16 GB ทดสอบแล้วขนาดที่โฆษณากับขนาดจริงตรงกัน เหลือแต่ความทนทาน สำหรับแฟลชไดรว์เก่าๆที่ผมเอามาลองของ Sandisk นี่ทนจริงๆครับ ไม่มีทีท่าว่าจะตายในขณะปฏิบัติหน้าที่แต่อย่างใด
การพัฒนาในอนาคต
จากนี้การพัฒนาคงจะมาหยุดที่ V3.2 หรืออาจจะมีการเพิ่มฟีเจอร์ในอนาคตอีกเล็กน้อยเป็น V3.3 แนวทางผมอาจจะหาบอร์ดของ UBlox Zed F9P มาลองดูบ้าง ในขณะที่เขียนบทความนี้ (มีค. 2569) ผมเห็นราคาบอร์ดในอาลีเอ็กเพรส แค่ 2100 บาท ถูกกว่า UM980 ร่วมๆหนึ่งพัน ถ้ามีโอกาสอยากจะลองทำ RTK Rover ดูบ้าง ผมรอเวลาว่างยาวๆจะเอาโค้ด RTKBase V1 (UM980 + ESP32) ไปวางไว้บน Github เพราะคิดว่า V1 มีความน่าสนใจอยู่พอสมควร ก็ขอขอบคุณสปอนเซอร์คุณบัณฑิต คุ้มห้างสูง ที่ออกทุนสำหรับโครงการ V1 ตลอดจน V3 และเป็นผู้ที่นำโปรดัคส์ไปใช้งานจริงได้จริง โปรดติดตามกันตอนต่อไปครับ