ชื่อโปรเจกต์: ใช้โมดูล GPS u-blox LEA-6H 02 กับ Arduino และ Python
การเชื่อมต่อโมดูล GPS (พี่ใช้รุ่น LEA-6H 02) กับ [Arduino](https://s.shopee.co.th/7fUgFAWSki) UNO (หรือบอร์ด Arduino อื่นๆ) และคำนวณค่าละติจูด ลองจิจูด เพื่อแสดงผลบนแอปพลิเคชันที่เขียนด้วย Python งานนี้จัดไปวัยรุ่น!
ขั้นตอนที่ 1: หาโมดูล GPS u-blox LEA-6H 02 มา, อ่าน Data Sheet ให้ละเอียด, และเตรียมโมดูลให้พร้อมต่อกับ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- อ่าน Data Sheet ของ u-blox LEA-6 ให้ดีๆ นะน้อง ตรวจสอบให้ชัวร์ว่าโมดูลเราถูกต้อง
- โมดูลส่วนใหญ่ทำงานที่แรงดัน ~2.7V ถึง 3.6V ระวังเรื่องไฟให้ดี พี่ใช้ ขา 3.3V ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki) เลย
- โมดูลพวกนี้รองรับการสื่อสารผ่านพอร์ต UART อยู่แล้ว ดังนั้นเราจะใช้มันคุยกับ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- โมดูลที่ซื้อมาส่วนใหญ่จะมีขาเป็นซ็อกเก็ตตัวเมียแบบจิ๋ว (micro female) ซึ่งต่อกับ [Arduino](https://s.shopee.co.th/7fUgFAWSki) ยากมาก พี่เลยเปลี่ยนเป็นซ็อกเก็ตแบบ 2.54mm แบบตัวเมียสำหรับสายจัมเปอร์แทน (ก่อนเปลี่ยน ต้องรู้ด้วยนะว่าขาไหนทำหน้าที่อะไร วาดไดอะแกรมขาเก็บไว้ในกระดาษหรือคอมด้วย)
- เตรียมแบบนี้แล้ว โมดูล GPS ก็พร้อมจะต่อกับ [Arduino](https://s.shopee.co.th/7fUgFAWSki) แล้วหล่ะ
ขั้นตอนที่ 2: ต่อโมดูล GPS เข้ากับ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
ต่อสาย Tx และ Rx ของโมดูล GPS เข้ากับ Rx และ Tx ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- Tx ของ GPS (สายสีเขียวของพี่) ต่อไปที่ => Rx ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- Rx ของ GPS (สายสีเหลืองของพี่) ต่อไปที่ => Tx ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- หาขา Tx (ส่งข้อมูล) และ Rx (รับข้อมูล) บนโมดูล GPS และบน [Arduino](https://s.shopee.co.th/7fUgFAWSki) ให้เจอ (พี่ใช้ UNO มันมีพอร์ต UART แค่ชุดเดียว ขา Tx คือ pin 0, ขา Rx คือ pin 1 ดูรายละเอียดเพิ่มเติมได้ที่ Arduino UNO)
คำเตือน: ระวังไฟให้ดี! ห้ามจ่ายไฟให้โมดูล GPS เกิน 3.3V (สูงสุด 3.6V) และอ่านคู่มือโมดูลให้ละเอียด ห้ามช็อตนะตัวนี้
ขั้นตอนที่ 3: อัพโหลดโค้ด [Arduino](https://s.shopee.co.th/7fUgFAWSki) เพื่ออ่านข้อมูลจากพอร์ต Serial (ช่องทางการสื่อสาร)
- โค้ดสำหรับโปรเจกต์นี้หาได้จาก GitHub repository
- Link: https://github.com/harshgosar/LEA-6h-GPS-Arduino-Python
- อย่าลืมอ่านไฟล์ README.md ด้วยนะ
สังเกตการตอบกลับบนหน้าจอ
- มันจะใช้เวลาสักพักกว่าจะได้ค่าที่ถูกต้อง ขึ้นอยู่กับความแรงของสัญญาณที่โมดูล GPS รับได้
- วางโมดูล GPS ในที่โล่งหรือใกล้หน้าต่างนะ สัญญาณจะดี
- ติดตั้งซอฟต์แวร์ u-center ตามที่บอกในไฟล์ README.md ข้างบน
- อัพโหลดโค้ด [Arduino](https://s.shopee.co.th/7fUgFAWSki) ลงบอร์ด
- ต่อขา GPS เข้ากับ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- เปิด Serial monitor บน [Arduino](https://s.shopee.co.th/7fUgFAWSki) IDE แล้วดูผลลัพธ์จากโมดูล GPS ให้แน่ใจว่ามันพิมพ์ค่าออกมาที่มีประโยชน์ (ไม่ใช่ข้อความแปลกๆ)
- ตัดการเชื่อมต่อพอร์ต Serial ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki) โดยการปิด Serial monitor จากนั้นเปิดซอฟต์แวร์ u-center แล้วเลือกพอร์ต Serial ของ Arduino
ขั้นตอนที่ 4: รันโค้ด Python
- ดาวน์โหลดและติดตั้ง Python ในเครื่องคอมพิวเตอร์ของน้อง
- ดาวน์โหลดโค้ด Python เพื่ออ่านข้อมูล GPS ผ่านพอร์ต Serial ของคอมพิวเตอร์
- ต่อและจ่ายไฟให้ GPS กับ [Arduino](https://s.shopee.co.th/7fUgFAWSki)
- หาให้เจอว่า [Arduino](https://s.shopee.co.th/7fUgFAWSki) ต่ออยู่กับพอร์ต COM ไหน
- รันโค้ด Python
- กรอกรายละเอียดพอร์ต COM
- ตรวจสอบข้อมูล lat (ละติจูด) และ long (ลองจิจูด) หล่อเท่เลยงานนี้!
รายละเอียดเทคนิคเพิ่มเติม
สะพานเชื่อมจากดาวเทียมสู่พีซี
ระบบระบุตำแหน่งประสิทธิภาพสูงนี้ใช้โมดูลระดับอุตสาหกรรม u-blox LEA-6H เพื่อให้ข้อมูลตำแหน่งที่แม่นยำแก่คอมพิวเตอร์โฮสต์
- สตรีมข้อมูล NMEA: Arduino ทำหน้าที่เป็น "ตัวกลางทางฮาร์ดแวร์" โดยรับประโยคข้อมูล $GPRMC และ $GPGGA จากโมดูล u-blox ผ่าน Serial ความเร็ว 9600 baud และส่งต่อไปยังพีซีผ่าน USB โดยตรง
- การทำงานร่วมกับ Python: ฝั่งพีซี สคริปต์ Python (ใช้ไลบรารี
pySerialและpynmea2) จะแยกวิเคราะห์พิกัด และเปิดเบราว์เซอร์ไปยังตำแหน่งที่ตรงกันบน Google Maps โดยอัตโนมัติ
ความแม่นยำเชิงกลยุทธ์
- การเริ่มต้นระบบแบบเย็น vs ร้อน: อธิบายความสามารถของโมดูล u-blox ในการเก็บข้อมูลวงโคจรของดาวเทียม (ephemeris data) ไว้ในหน่วยความจำภายใน เพื่อการค้นหาสัญญาณใหม่ได้รวดเร็วยิ่งขึ้น เมื่อเคลื่อนที่ผ่านพื้นที่ที่มีใบไม้หนาแน่นหรือระหว่างตึกสูง