การใช้งานจีพีเอส (GPS) กับไมโครคอนโทรลเลอร์

ดาวน์โหลดไฟล์ที่เกี่ยวข้อง> GPS_waijung_demo.7z

กล่าวนำ

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

หลักการทำงาน

Global Positioning System: GPS [6] เรียกกันย่อ ๆ ว่า ระบบจีพีเอส คือระบบบอกตำแหน่งบนพื้นผิวโลกด้วยดาวเทียม โดยอาศัยการคำนวณจากข้อมูลที่ส่งมาจากดาวเทียมที่โคจรอยู่รอบโลกจำนวน 24 ดวง ซึ่งทราบตำแหน่งที่แน่นอนของตัวเองตามรูปที่ 1 ระบบนี้ในปัจจุบันไม่ได้มีแต่เฉพาะสหรัฐอเมริกาเท่านั้นที่เป็นผู้พัฒนา แต่ยังมีเครือข่ายดาวเทียมอีกหลายค่าย คือ ระบบ GLONASS ของรัสเซีย ระบบ Galileo โดยสหภาพยุโรป ร่วมกับจีน อิสราเอล อินเดีย โมร็อกโก ซาอุดิอาระเบีย เกาหลีใต้ และยูเครน ระบบ Beidou โดยสาธารณรัฐประชาชนจีน และระบบ QZSS โดยญี่ปุ่น

รูปที่ 1 วงโคจรของดาวเทียมจีพีเอส

ระบบจีพีเอสของค่ายอเมริกา มีใช้กันมาตั้งแต่แรกเริ่มและนิยมใช้กันมากที่สุด ชื่อ NAVSTAR (Navigation Satellite Timing and Ranging GPS) มีดาวเทียม 28 ดวง ใช้งานจริง 24 ดวง อีก 4 ดวงเป็นดาวเทียมสำรอง มีรัศมีวงโคจรจากพื้นโลก 20,162.81 กม.หรือ 12,600 ไมล์ ดาวเทียมแต่ละดวงใช้ เวลาในการโคจรรอบโลก 12 ชั่วโมง จีพีเอสทำงานโดยการรับสัญญาณจากดาวเทียมแต่ละดวง ซึ่งสัญญาณดาวเทียมนี้จะประกอบไปด้วย ข้อมูลที่ระบุตำแหน่ง และเวลาขณะส่งสัญญาณ และที่ตัวเครื่องรับสัญญาณจีพีเอส จะต้องประมวลผลความแตกต่างของเวลาในการรับสัญญาณเทียบกับเวลาจริง ณ ปัจจุบันเพื่อแปรเป็นระยะทางระหว่างเครื่องรับสัญญาณกับดาวเทียมแต่ละดวง และประมวลผลหาตำแหน่งของดาวเทียมที่ส่งมากับสัญญาณดังกล่าวข้างต้น

ดังนั้นหากเครื่องรับสัญญาณ สามารถรับสัญญาณจากดาวเทียมจีพีเอส มากดวงเท่าใดก็จะยิ่งสามารถระบุตำแหน่งได้แม่นยำยิ่งขึ้นเท่านั้น ในทางปฏิบัติจะต้องมีดาวเทียมอย่างน้อย 4 ดวง เพื่อหาตัวแปร 4 ตัวคือ ตำแหน่งบนผิวโลก X, Y,Z และความคลาดเคลื่อนของเวลา dt

เครื่องรับสัญญาณจีพีเอส

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

  • Accuracy – หมายถึง ค่าความถูกต้อง หรือความแม่นยำในการคำนวณระบุตำแหน่งบนพื้นโลกของเครื่องรับ สำหรับเครื่องรับที่ราคาไม่แพงมาก โดยทั่วไปแล้วจะมีค่าความถูกต้องอยู่ที่ประมาณ +/- 3 ถึง 5 เมตร [7] แต่ถ้าหากต้องการความถูกต้องสูง ราคาของเครื่องรับจะสูงขึ้น เช่น ระบบ DGPS [5] หรือ RTK GPS [13] และเพื่อให้ได้ความถูกต้องที่ดีที่สุด เครื่องรับสัญญาณควรจะต้องอยู่ในมุมมองที่ชัดเจนของท้องฟ้า
  • Antenna – สายอากาศของเครื่องรับ เนื่องจากดาวเทียมอยู่ห่างออกไปไม่ต่ำกว่า 12,000 ไมล์ เพื่อประสิทธิภาพที่ดีที่สุดในการรับสัญญาณ สายอากาศของเครื่องรับสัญญาณจึงต้องมีประสิทธิภาพสูง ซึ่งมีให้เลือกหลากหลายชนิดด้วยกัน ตามวัตถุประสงค์และความต้องการของการใช้งาน ดังตัวอย่างต่อไปนี้
    • โมดูลจีพีเอสแบบสายอากาศแพทช์  (Patch Antenna) – โมดูลชนิดนี้จะเป็นที่นิยมใช้งานกันมาก เนื่องจากมีขนาดกระทัดรัด ไม่ต้องต่อสายอากาศเพิ่มเติม ราคาถูก ใช้งานได้สะดวก [1] แสดงตามรูปที่ 2 
gps chip

รูปที่ 2 โมดูลจีพีเอสชนิดสายอากาศแพทช์ 

    • โมดูลจีพีเอสแบบสายอากาศเฮลิคอล (Helical Antenna) – โมดูลชนิดนี้จะมีขนาดโตกว่าแบบแพทช์ เนื่องจากต้องมีสายอากาศเพิ่มเติม แต่ช่วยทำให้การรับสัญญาณดีขึ้นในทุกทิศทางตามรูปที่ 3 
รูปที่ 3 โมดูลจีพีเอสชนิดสายอากาศเฮลิคอล

รูปที่ 3 โมดูลจีพีเอสชนิดสายอากาศเฮลิคอล 

    • โมดูลจีพีเอสแบบสายอากาศภายนอก (Ext Antenna) – โมดุลชนิดนี้จะมีขั้วต่อสายอากาศแบบ SMA ที่สามารถต่อกับสายอากาศภายนอกได้ตามรูปที่ 4 นิยมใช้ในกรณีที่จำเป็นต้องติดตั้งเครื่องรับสัญญาณในมุมอับไม่สามารถรับสัญญาณได้ เช่น การติดตั้งภายในอาคาร หรือในรถยนต์ ฯลฯ 
รูปที่ 4 โมดูลจีพีเอสชนิดสายอากาศภายนอก

รูปที่ 4 โมดูลจีพีเอสชนิดสายอากาศภายนอก 

  • Baud Rate – อัตราบอด รูปแบบของการสื่อสารข้อมูลในการรับสัญญาณจากจีพีเอสจะเป็นแบบอนุกรม (UART) ในอัตราบิตเฉพาะ เช่น 9600 bps , 57600 bps, etc. ซึ่งตรวจสอบได้จากดาต้าชีท
  • Channel – จำนวนช่องสัญญาณของเครื่องรับ เป็นคุณสมบัติที่ผลต่อเวลาของการกำหนดตำแหน่งในครั้งแรกที่เริ่มเปิดเครื่อง จำนวนช่องที่มากกว่าจะช่วยให้ใช้เวลาที่สั้นกว่า แต่หลังจากที่กำหนดตำแหน่งได้แล้ว ช่องสัญญาณบางช่องอาจจะต้องปิดเพื่อประหยัดพลังงาน
  • TTFF (Time To First Fix) – หมายถึง เวลาที่ถูกใช้ตั้งแต่เริ่มเปิดเครื่องจนกระทั่งสามารถคำนวณหาตำแหน่งที่ถูกต้องได้ ซึ่งจะต้องใช้ข้อมูลจากดาวเทียมอย่างน้อย 4 ดวง เวลา TTFF นี้ยังขึ้นอยู่กับสภาพอากาศด้วย
  • Lock & Fix – หมายถึง การค้นหาและติดตามตำแหน่งของดาวเทียม โดยถ้าหากรับสัญาณจากดาวเทียมได้ตั้งแต่ 4 ดวงขึ้นไป จึงจะประมวลผลหาพิกัดตำแหน่งและเวลาที่ถูกต้องได้
  • Start-up Times (Hot, Warm, and Cold) – หมายถึง เวลาตั้งแต่เริ่มจ่ายไฟเข้าโมดูลจนกระทั่งสามารถ Fix & Lock ได้ โมดูลบางชนิดได้เพิ่มซุปเปอร์คาปาซิเตอร์ หรือ แบตเตอรี่ขนาดเล็กเพื่อเลี้ยงหน่วยความจำสำหรับเก็บข้อมูลตำแหน่งดาวเทียมหลังจากปิดเครื่อง ทำให้ลดเวลา TTFF และประหยัดพลังงาน
  • Update Rate – หมายถึง ความถี่ในการรายงานพิกัดตำแหน่งของโมดูล (หน่วยเป็น Hz) ซึ่งโดยทั่วไปจะอยู่ที่ 1 ครั้งต่อวินาที หรือ 1 Hz ส่วน พวกยูเอวีหรือยานอัตโนมัติที่มีความเร็วสูง ต้องการอัตราอัพเดตที่มากขึ้น อาจจะเลือกใช้โมดูล 5 Hz หรือ 10 Hz 

การทดลองใช้งานโมดูลจีพีเอส

 หลังจากที่ได้ทำความเข้าใจกับหลักการทำงานของระบบจีพีเอสกันมาพอสมควรแล้ว ในหัวข้อนี้จะเป็นการทดสอบโมดูลจีพีเอสของ LOCOSYS รุ่น LS20031 [1] ตามที่แสดงในรูปที่ 5 เนื่องจากมีราคาไม่แพง ใช้สายอากาศแบบแพทช์ทำให้มีขนาดกะทัดรัด เหมาะสำหรับงานประเภท DIY หรืองานประดิษฐ์ทั่ว ๆ ไปนอกจากนี้ยังมีแบตเตอรี่สำหรับสำรองไฟให้กับข้อมูลในหน่วยความจำอีกด้วย

โมดูลจีพีเอสรุ่นนี้มีจุดเด่นที่สำคัญคือ ทำงานที่ระดับแรงดัน 3 – 4.2 V ให้ค่าอัพเดทเรตที่ 5 Hz ที่อัตราบอด 57600 bps และช่องสัญญาณที่มากถึง 66 ช่อง ทำให้ความไวในการรับสัญญาณสูง สามารถล็อกตำแหน่งดาวเทียมได้แม้อยู่ในอาคาร รายละเอียดอื่น ๆ สามารถศึกษาเพิ่มเติมได้จากเอกสารอ้างอิง [8][9]

การเตรียมฮาร์ดแวร์

ในที่นี้ใช้ Pin Header แบบ Right Angle บัดกรีเข้ากับแพดของพีซีบีให้ครบทุกแพด ซึ่งจะสามารถนำไปใช้งานกับโปรโตบอร์ดหรือสายคีบได้ ตำแหน่งขาและหน้าที่ของแต่ละขาของโมดูลจีพีเอสแสดงตามรูปที่ 5

gps hw_setup

รูปที่ 5 การเตรียมใช้งานโมดูลจีพีเอส และตำแหน่งขา 

การทดสอบการทำงานเบื้องต้น

เพื่อให้เกิดความมั่นใจได้ว่า โมดูลที่ซื้อมานั้นสามารถใช้งานได้จริง มีวิธีทดสอบแบบง่าย ๆ โดยการต่อเข้ากับเครื่องคอมพิวเตอร์พีซี โดยจะต้องมีอุปกรณ์ที่ต้องใช้ ตามรูปที่ 6 คือ บอร์ดแปลงข้อมูล UART ที่ส่งมาจาก
จีพีเอสเป็นยูเอสบี, aMG USB Converter-N2 [2] และต่อวงจรตามรูป

gps_pic6

รูปที่ 6 การต่อวงจรสำหรับทดสอบการทำงานของโมดูลจีพีเอสด้วยพีซี 

การใช้งานโดยปกติแล้ว หากต้องการเฉพาะอ่านค่าจากโมดูล ก็ไม่จำเป็นต้องต่อสาย GPS Rx ซึ่งขานี้จะใช้ในกรณีที่มีการเขียนคำสั่งเพื่อกำหนดค่าการทำงานบางอย่างให้กับโมดูล เช่น การกำหนดอัพเดทเรต เป็นต้น

หลังจากต่อวงจรเสร็จและเสียบสายยูเอสบีเข้ากับพีซี ถ้าพีซีถามหาไดร์เวอร์ของ aMG USB Converter-N2 ให้ดาวน์โหลดเฟิร์มแวร์ได้จาก [14] ส่วนซอฟต์แวร์ที่ใช้รับค่าและแสดงผลจากจีพีเอสบนพีซี สามารถใช้ซอฟต์แวร์มาตรฐานสำหรับการสื่อสาร UART เช่น Putty [12] หรือ MiniGPS [10]

การอ่านค่าด้วยโปรแกรม Putty

โปรแกรมนี้ใช้งานได้ดีและเป็นฟรีแวร์ [12] หลังจากติดตั้งไดร์เวอร์ของ aMG USB Converter-N2 แล้วให้เข้าไปตรวจสอบหมายเลขพอร์ตโดยใช้ Device Manager จากนั้นเปิดโปรแกรม Putty แล้วกำหนดค่าต่าง ๆ ตาม รูปที่ 7 หากไม่มีอะไรผิดพลาดในการทดลองใช้งานครั้งแรกจะต้องรอประมาณ 30 – 60 วินาทีเพื่อให้โมดูลค้นหาและล็อกตำแหน่งของดาวเทียม โดยจะสังเกตได้จากแอลอีดี Position Fix Indicator จะกระพริบทุก ๆ วินาที แสดงว่าโมดูลพร้อมใช้งานแล้ว และจะแสดงรายงานข้อมูลที่รับได้ตามรูปที่ 8

รูปที่ 7 การกำหนดค่าการสื่อสารของโปรแกรม Putty

รูปที่ 7 การกำหนดค่าการสื่อสารของโปรแกรม Putty 
gps_pic8

รูปที่ 8 ข้อมูลที่รับได้จากจีพีเอส

รูปแบบการจัดเรียงข้อมูลของจีพีเอสเป็นไปตามมาตรฐานของ National Marine Electronics Association หรือ NMEA โดยจะขึ้นต้นด้วยอักขระ $GPxxx, ซึ่งมีทั้งหมด 6 รูปแบบด้วยกัน คือ GGA, GLL, GSA, GSV, RMC, VTG รายละเอียดตามที่ได้แสดงในตารางที่ 1 ทั้งนี้แต่ละรูปแบบต่างมีการจัดเรียงข้อมูลภายในที่แตกต่างกันออกไป เช่น

$GPGGA,053740.000,2503.6319,N,12136.0099,E,1.1,63.8,M,15.2,M,,0000*64

หมายถึง เป็นรูปแบบข้อมูล GGA หรือ Global positioning system fixed data ตามด้วยข้อมูลเวลา UTC พิกัดตำแหน่งละติจูด, ตำแหน่งซีกโลก, พิกัดลองจิจูด, ตำแหน่งซีกโลก, และข้อมูลอื่น ๆ ซึ่งการที่จะเขียนโปรแกรมเพื่อดึงข้อมูล ณ ตำแหน่งที่ต้องการจากข้อมูลที่ส่งมาเป็นประโยค จะต้องทราบความหมายของข้อมูลในแต่ละตำแหน่งเป็นอย่างดี ทั้งนี้สามารถศึกษาในรายละเอียดได้จากเอกสารอ้างอิง [8][9]

ตารางที่ 1 รูปแบบการจัดเรียงข้อมูลตามมาตรฐานของ NMEA

NMEA RecordDescription
GGAGlobal positioning system fixed data
GLLGeographic position - latitude/longitude
GSAGNSS DOP and active satellites
GSVGNSS satellites in view
RMCRecommended minimum specific GNSS data
VTGCourse over ground and ground speed

การอ่านค่าด้วยโปรแกรม MiniGPS

โปรแกรมมินิจีพีเอสจะมีลูกเล่นมากกว่า Putty การใช้งานก็คล้าย ๆ กัน คือ กำหนดอัตราบอด และ พอร์ตให้ตรงกับของพีซี ข้อมูลที่แสดงจะมีทั้งรูปแบบตัวอักษรและกราฟิก ตามที่แสดงในรูปที่ 9 หากต้องการกำหนดอัพเดทเรต หรืออัตราบอดใหม่ (ต้องต่อสาย Rx) ให้กำหนดค่าตามรูปที่ 10

gps_pic9

รูปที่ 9 การกำหนดค่าใช้งานโปรแกรม Mini GPS 

รูปที่ 10 การเซตอัพค่าต่าง ๆ ของจีพีเอสโมดูลด้วยโปรแกรม Mini GPS

รูปที่ 10 การเซตอัพค่าต่าง ๆ ของจีพีเอสโมดูลด้วยโปรแกรม Mini GPS 

ทดสอบการใช้งานร่วมกับไมโครคอนโทรลเลอร์เบื้องต้น

การเตรียมฮาร์ดแวร์

หลักจากที่ได้ทดสอบเป็นที่แน่ใจแล้วว่า โมดูลที่ซื้อมานั้นสามารถใช้งานได้จริง การทดลองต่อไปนี้จะเป็นการทดลองต่อเชื่อมกับระบบไมโครคอนโทรลเลอร์โดยจะใช้บอร์ด aMG Lab Kit – F4 [2] และต่อวงจรตามรูปที่ 11 โดยจะให้ไมโครคอนโทรลเลอร์อ่านค่าจากจีพีเอส แล้วส่งข้อมูลไปให้พีซีประมวลผล

gps_pic11

รูปที่ 11 การต่อจีพีเอสเข้ากับชุดทดลองไมโครคอนโทรลเลอร์ aMG Lab Kit F-4 

การทดลองอ่านข้อมูลแบบ GGA

ให้โปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์ตามรูปที่ 12

gps_pic12

รูปที่ 12 การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์ 

การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์ตามรูปที่ 12 ใช้โมดูล USART1 สำหรับติดต่อกับจีพีเอสด้วยอัตราบอด 57600 bps และ USART3 สำหรับติดต่อกับพีซีด้วยอัตราบอด 115200 bps การกำหนดค่าพารามิเตอร์ของโมดูล UART RX ให้ Transfer เป็น Non-Blocking เพื่อให้มีสัญญาณ Ready ไปกระตุ้น Subsystem หมายถึง ต้องรับข้อมูลให้ได้ก่อนแล้วจึงส่งไป Pack mode เลือกเป็นข้อมูลแบบอักขระ Ascii กำหนดรูปแบบเป็น ‘$GPGGA,%f,%f,%c,%f,%c,%d’ หมายถึง เลือกรับข้อมูลที่มีส่วนหัวเป็น GGA และตามด้วยข้อมูลอีก 6 ลำดับ ได้แก่ UTC Time, Latitude, N/S Indicator, Longitude, E/W Indicator, และ Position Fix Indicator เรียงตามลำดับ ถ้าหากต้องการอ่านข้อมูลมากกว่า 6 ลำดับ ก็เพียงแต่ใส่อักขระ format specifiers เช่น %f, %e, %g ทั้งนี้ขึ้นอยู่กับชนิดของข้อมูลนั้น ๆ และสุดท้ายกำหนด End of package เป็น CRLF โดยศึกษารายละเอียดได้จากตารางที่ 2

ตารางที่ 2 รูปแบบการจัดเรียงข้อมูลประเภท GGA

Name Example Units Description
Message ID $GPGGA GGA protocol header
UTC Position 161229.487hhmmss.sss
Latitude3723.2475 ddmm.mmmm
N/S Indicator N N=north or S=south
Longitude 12158.3416dddmm.mmmm
E/W lndicatorwE=east or W=west
Position Fix Indicator 1See Table 3
Satellites Used 08Range 0 to 12
HDOP 1.1 Horizontal Dilution of Precision
MSL Altitude9meters
Units Mmeters
Geoid Separation15.2meters
UnitsMmeters
Age of Diff. CorrsecondNull field When DGPS is not used
Diff. Ref. Station ID 0000
Checksum *18
(CR)(LF)End of message termination

ตารางที่ 3 แสดงค่า Fix Indicator

Value Description
0 Fix not available or invalid
1GPS SPS Mode, fix valid
2Differential GPS, SPS Mode, fix valid
3 to 5Not supported
6Dead Reckoning Mode, fix valid

โปรแกรมที่รองรับการส่งค่าจากไมโครคอนโทรลเลอร์แสดงตามรูปที่ 13 หลังจากโหลดเฟิร์มแวร์เรียบร้อยแล้วให้ตรวจสอบหมายเลขพอร์ต อีกครั้งโดยให้ใช้หมายเลขพอร์ต COM ที่อยู่บนสุด ในตัวอย่างนี้ใช้ COM12 และกำหนดอัตราบอดให้ตรงกับตัวส่งคือ 115200 bps ข้อมูลที่รับได้จะยังเป็นข้อมูลดิบที่ยังไม่ผ่านการสังเคราะห์ให้ง่ายแก่การอ่าน ซึ่งในตัวอย่างนี้แสดงให้เห็นถึงวิธีการติดต่อสื่อสารและการดึงข้อมูลที่ต้องการมาใช้เท่านั้น

รูปที่ 13 การโปรแกรมในฝั่งของพีซี

รูปที่ 13 การโปรแกรมในฝั่งของพีซี 

การทดลองปรับแต่งข้อมูลที่รับได้จากจีพีเอส

หลักจากที่สามารถสื่อสารข้อมูลระหว่างจีพีเอสกับพีซีได้เป็นที่เรียบร้อยแล้ว ขั้นตอนนี้จะเป็นการปรับแต่งข้อมูลที่รับได้ ให้อยู่ในรูปแบบที่สามารถนำไปใช้ประโยชน์ได้ โดยใช้โปรแกรมตามรูปที่ 14

รูปที่ 14 การโปรแกรมในฝั่งของพีซี

รูปที่ 14 การโปรแกรมในฝั่งของพีซี 

การทดลองอ่านข้อมูลแบบ RMC

การทดลองนี้จะเปลี่ยนจากการอ่านข้อมูลแบบ GGA มาเป็น RMC เนื่องจากสามารถให้ข้อมูลทิศทางและความเร็วได้ด้วย เผื่อว่าจะนำไปใช้ทำระบบควบคุมพวกยานอัตโนมัติได้ รายละเอียดรูปแบบข้อมูลดูตามตารางที่ 3 ให้อัพเดทเฟิร์มแวร์ตามรูปที่ 15 และใช้โปรแกรมอ่านค่าตามรูปที่ 16

ตารางที่ 3 รูปแบบการจัดเรียงข้อมูลประเภท RMC

NameExampleUnitsDescription
Message ID$GPRMCRMC protocol header
UTC Time 103740hhmmss.sss
StatusAA=data valid or V=data not valid
Latitude2503.6319ddmm.mmmm
N/S IndicatorNN=north or S=south
Longitude 12136.0099dddmm.mmmm
E/W IndicatorEE=east or W=west
Speed over ground 2.69knots True
Course over ground 79.65degrees
Date 100106ddmmyy
Magnetic variation degrees
Variation sense E=east or W=west (Not shown)
Mode A A=autonomous, D=DGPS, E=DR
Checksum *53
(CR)(LF)End of message termination

รูปที่ 15 การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์

รูปที่ 15 การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์

รูปที่ 16 การโปรแกรมในฝั่งของพีซี

รูปที่ 16 การโปรแกรมในฝั่งของพีซี 

 การทดลองสร้างระบบแยกอิสระ

การทดลองนี้จะเป็นการสร้างระบบที่สามารถทำงานได้โดยลำพัง (Standalone) โดยไม่ต้องอาศัยพีซี ดังนั้นจะต้องมีการเพิ่มฮาร์ดแวร์ในส่วนแสดงผลให้กับไมโครคอนโทรลเลอร์ด้วย ในที่นี้ใช้จอแอลซีดีแบบ 16 ตัวอักษร 4 บรรทัด ประกอบฮาร์ดแวร์เข้าด้วยกันและต่อวงจรตามรูปที่ 17 และอัพเดทเฟิร์มแวร์ตามรูปที่ 18

gps_pic17

รูปที่ 17 การทดลองจีพีเอสแบบแยกอิสระ 

รูปที่ 18 การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์

รูปที่ 18 การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์ 

ซึ่งถ้าไม่มีอะไรบกพร่อง ไมโครคอนโทรลเลอร์จะสามารถรับค่าต่าง ๆ และแสดงผลผ่านจอแอลซีดีทั้ง 4 บรรทัดได้ตามรูปที่ 19

รูปที่ 19 การแสดงผลของระบบแบบแยกอิสระ

รูปที่ 19 การแสดงผลของระบบแบบแยกอิสระ 

ตัวอย่างโปรเจคการควบคุมยานอัตโนมัติ

การทดลองนี้จะยกตัวอย่างกรณีที่เราต้องการโปรแกรมให้ยานอัตโนมัติเดินทางจากตำแหน่งพิกัดที่อยู่ปัจจุบัน (Home) ไปยังพิกัดที่กำหนดตามรูปที่ 20 นั้น ยานอัตโนมัติจะนำค่าพิกัดปัจจุบันซึ่งได้รับจากจีพีเอส และค่าพิกัดปลายทางมาทำการคำนวณหาทิศทางหรือที่นิยมเรียกว่า “แบริ่ง” และระยะทางที่จะไป ส่วนของการคำนวณหาค่าแบริ่ง (ตัวเลขสามหลักหน่วยเป็นองศาแสดงทิศทาง นับจาก 000 – 359 โดยที่ 000 คือทิศเหนือ) และระยะทางนั้น โดยทั่วไปหากเป็นตำบลที่ซึ่งอยู่ห่างกันตั้งแต่ 20 กิโลเมตร หรือ 12 ไมล์ ขึ้นไปจะต้องใช้สมการ Haversine [3-4] ซึ่งใช้หลักการของตรีโกณมิติทรงกลมในการคำนวณ เนื่องจากความโค้งของโลกมีส่วนเกี่ยวข้องด้วย แต่สำหรับกรณีของการเดินทางระยะสั้น ๆ ไม่เกิน 12 ไมล์ จะใช้วิธีการคำนวณด้วยตรีโกณมิติบนพื้นระนาบ และการใช้ทฤษฎีของพิธากอรัส ก็สามารถให้ค่าที่ใกล้เคียงความจริงได้ โดยจะต้องแปลงค่าระยะห่างของสองพิกัดที่เป็นองศาของ ละติจูด และลองจิจูด ให้เป็นค่าบนพิกัดฉาก (Cartesian Coordinate) ก่อน ซึ่งเป็นการถ่ายตำแหน่งบนผิวทรงกลมลงไปบนพื้นระนาบโดยใช้วิธี การหาค่าประมาณของอิควิเรกแทงกูลาร์ (Equirectangular Approximation) [3-4] และพิกัดที่นำมาเป็นตัวอย่างนั้นอยู่สูงจากเส้นศูนย์สูตรไม่เกิน ละติจูด ที่ 13 องศาเหนือ จึงได้รับอิทธิพลจากความโค้งของโลกน้อย ทำให้มีเพียงการแก้ไขความคาดเคลื่อนในการถ่ายพิกัดลองจิจูด ลงบนพื้นระนาบเท่านั้น การหาค่าประมาณของอิควิเรกแทงกูลาร์ เป็นดังสมการต่อไปนี้

eq1

โดยที่ x คือ ระยะบนพิกัดฉากในแนวนอนมีค่าเท่ากับผลต่างของ ลองจิจูด คูณด้วย cos ของ ละติจูด เฉลี่ย

y คือ ระยะบนพิกัดฉากในแนวตั้งซึ่งมีค่าเท่ากับผลต่างของ Latitude

La1, La2 คือ ค่าพิกัด ละติจูด เป็นองศาของทั้ง 2 ตำบลที่

Lo1, Lo2คือ ค่าพิกัด ลองจิจูด เป็นองศาของทั้ง 2 ตำบลที่

gps_pic20

รูปที่ 20 การหาแบริ่งและระยะทางระหว่างพิกัดละติจูด/ลองจิจูด 2 จุดใด ๆ บนพื้นโลก

เมื่อได้ระยะบนพื้นระนาบ แล้วจึงทำการคำนวณหามุมแบริ่ง และระยะทางจากสมการ tangent โดยใช้ทฤษฎีของพิธากอรัสดังนี้

eq2

โดยที่ b คือ แบริ่งจากยานไปยังจุดที่กำหนด
atan2 คือ ฟังก์ชั่นที่ให้ค่าเป็นเรเดียนส์และมีเงื่อนไขซึ่งพิจารณาไปตามค่าของ x, y ดังนี้

eq3

m mod n คือ ฟังก์ชั่นที่ให้เศษที่เหลือจากการหารของ

r คือ ระยะจากยานไปยังจุดที่กำหนดหน่วยเป็นเมตร

ตัวเลข 6371 คือ รัศมีความโค้งของโลก

ตัวเลข 450 หมายถึง ปกติแล้วการวัดมุมองศาจะวัดทวนเข็มนาฬิกาจาก จุด 0,0 ที่แกน x แต่การวัดแบริ่ง ต้องย้ายจุด 0,0 ไปที่แกน y แล้ววัดมุมในทิศตามเข็มนาฬิกาดังนั้น ที่จุด (0,0) ณ แกน y คือมุม 360 + 90 = 450 องศา

สมการที่อธิบายมาทั้งหมดสามารถเขียนด้วยโปรแกรมแมทแลปได้ดังนี้

mfile

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

การโปรแกรมเฟิร์มแวร์ในส่วนของฝั่งไมโครคอนโทรลเลอร์แสดงตามรูปที่ 21 และการโปรแกรมในฝั่งของพีซีตามรูปที่ 22 อัลกอริทึมสำหรับการคำนวณหาแบริ่งและระยะทางอยู่ในกล่อง MATLAB Function

รูปที่ 21การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์

รูปที่ 21 การโปรแกรมเฟิร์มแวร์ในฝั่งของไมโครคอนโทรลเลอร์ 

รูปที่ 22 การโปรแกรมในฝั่งของพีซี

รูปที่ 22 การโปรแกรมในฝั่งของพีซี 

รูปที่ 23 เป็นการทดสอบอัลกอริทึมด้วยโปรแกรม Mission Planner [11] ซึ่งเป็นโปรแกรมที่นักพัฒนา DIY Drones นิยมใช้กัน โดยได้กำหนดระยะห่างระหว่างจุดสองจุดในแผนที่และวัดหาแบริ่งได้เท่ากับ 108 องศา ระยะทาง 265.21 เมตร ส่วนโปรแกรมที่เขียนขึ้นเองคำนวรได้แบริ่งประมาณ 108 องศา หาระยะทางได้ประมาณ 260.14 เมตร ซึ่งถือว่ามีความถูกต้องอยู่ในเกณฑ์ที่ยอมรับได้

รูปที่ 23 ผลลัพธ์ที่ได้จากการคำนวณด้วยโปรแกรม Mission Planner

รูปที่ 23 ผลลัพธ์ที่ได้จากการคำนวณด้วยโปรแกรม Mission Planner 

 

ข้อมูลอ้างอิง

[1] 66 Channel LS20031 GPS 5Hz Receiver, http://www.thaieasyelec.com/index.php?lay=show &ac =cat_show_pro_detail&pid=51241
[2] Aimagin Products: https://www.aimagin.com/index.php/products.html
[3] Bob Chamberlain, “What is the best way to calculate the distance between 2 points?”,  http://www.cs.nyu.edu/visual/home/proj/tiger/gisfaq.html
[4] Chris Veness, “Calculate distance, bearing and more between Latitude/Longitude points”, http://www.movable-type.co.uk/scripts/latlong.htm
[5] Differential GPS, http://en.wikipedia.org/wiki/Differential_GPS
[6] Global Positioning System, http://en.wikipedia.org/wiki/Gps#cite_note-2
[7] How Does GPS Work, https://learn.sparkfun.com/tutorials/gps-basics/how-does-gps-work
[8] Locosys LS20030-3 GPS Module Datasheet, https://www.sparkfun.com/datasheets/GPS/ Modules/LS20030~3_datasheet_v1.2.pdf
[9] LS20030~3 GPS Smart Antenna, http://www.locosystech.com/ product.php?zln=en&id=20
[10] MiniGPS Software Download, http://www.sparkfun.com/datasheets/GPS/MiniGPS_1.32.zip
[11] Mission Planner Software download, http://ardupilot.com/downloads/
[12] PuTTY Download Page, http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
[13] Real Time Kinematic (RTK) satellite navigation, http://en.wikipedia.org/wiki/Real_Time_ Kinematic
[14] Virtual COM Port Drivers, http://www.ftdichip.com/Drivers/VCP.htm