
ในบทความเรื่องการใช้งาน GPS Shield ตอนที่แล้วเราได้พูดกันถึงหลักการทั่วไปของระบบ GPS และวิธีการดึง (Parse) ข้อมูลออกมาจากประโยค NMEA โดยใช้ไลบรารี่ TinyGPS เขามาช่วยจัดการ และมีตัวอย่างให้ทดลองเล่นกับ TinyGPS ด้วย โดยสมมติว่าบอร์ดได้รับข้อมูล NMEA มาแล้ว (ในตัวอย่าง ประโยค NMEA 2-3 ประโยค ถูก hard coded ลงใน Sketch เลย ฉะนั้นจริงๆแล้วเราไม่ต้องต่อ GPS Shield ก็สามารถทำการทดลองนี้ได้)
รูปที่ 1: GPS Shield ของ Itead Studio ที่เสียบกับบอร์ด UNO ได้พอดีที่มาพร้อมกับ SD Card Slot
บทความนี้จะเป็นตอนที่ 2 ซึ่งจะอธิบายว่าถ้าจะเชื่อมต่อ GPS Shield กับบอร์ด Arduino UNO และดึงข้อมูลจากประโยค NMEA เพื่อนำมาแสดงผลใน Serial Monitor จะต้องทำอย่างไรบ้าง โดยในบทความนี้เราจะทำการอ่านค่า Latitude Longitude และ เวลา/วันที่ จาก NMEA แล้วนำไปแสดงผลบน Serial Monitor แต่ก่อนอื่นต้องขอชี้แจงก่อนว่าทำไมเราถึงเลือก GPS Shield จากค่าย ITEAD STUDIO มาใช้งาน เหตุก็เพราะ GPS Shield จากค่ายนี้สามารถต่อเข้ากับบอร์ด UNO ได้อย่างพอเหมาะพอดีแถมยังมาพร้อมกับ SD Card Slot ซึ่งโปรเจคที่เกี่ยวกับ GPS ส่วนมากมีความจำเป็นต้องใช้ SD Card เอาไว้พักหรือเก็บข้อมูล
ก่อนจะเริ่มเขียน Code เราต้องต่อ GPS Shield เข้ากับบอร์ด Arduino ก่อน (อย่าลืมต่อเสาอากาศเข้ากับ GPS Shield ด้วยนะครับ) จากนั้นก็เซ็ต Jumper ของ RxD และ TxD ตามรูปที่ 2 และเดี๋ยวตอนเขียนโปรแกรมก็จะต้องประกาศ pin ให้ถูกต้องดังนี้
#include <TinyGPS++.h> #include <SoftwareSerial.h> static const int RXPin = 3, TXPin = 2; static const uint32_t GPSBaud = 4800; // The TinyGPS++ object TinyGPSPlus gps; // The serial connection to the GPS device SoftwareSerial ss(RXPin, TXPin);
...
...
... ...
...
...
สรุปก็คือต้องประกาศ RXPin และ TXPin ของ SoftwareSerial ตามการเซ็ต Jumper นั่นเอง ซึ่งในกรณีนี้ RXPin = 3 และ TXPin = 2
รูปที่ 2: การเซ็ต ่Jumper สำหรับ TxD และ RxD ของ GPS Shield (Itead Studio v 1.1)
หลังจากต่อ GPS Shield เข้ากับบอร์ด Arduino และเซ็ต Jumper เป็นที่เรียบร้อย เราก็พร้อมที่จะโปรแกรมบอร์ด Arduino ให้อ่านและ Parse ข้อมูลจากประโยค NMEA ที่ถูกส่งมาจาก GPS Shield แล้ว โดยเราจำเป็นต้อง Include ไลบรารี่ที่จำเป็นสองตัวคือ SoftwareSerial.h (คลิ๊กเพื่อ Download) และ TinyGPS++.h (คลิ๊กเพื่อ Download) เข้ามาในโปรเจค
โดย SoftwareSerial จะทำหน้าที่เป็นตัวกลางรับส่งข้อมูลระหว่าง GPS Shield และ Arduino Board ซึ่งจะรับประโยค NMEA ที่ส่งมาจาก GPS Shield จากนั้น TinyGPS++ ก็จะจัดการข้อมูลต่างๆที่อยู่ในประโยค NMEA ให้อยู่ในรูปที่เราอ่านแล้วเข้าใจได้เช่น Latitude, Longitude, วันเวลา พอได้ข้อมูลที่จำเป็นมาแล้วเราสามารถโปรแกรมสั่งให้ บอร์ด Arduino ส่งข้อมูลเหล่านั้นไปยังอุปกรณ์แสดงผลต่างๆหรือเซฟเก็บเอาไว้บน SD Card หรือจะส่งข้อมูลตำแหน่งเหล่านี้ผ่าน SMS ก็ยังได้ โดยการทำงานที่อธิบายข้างต้นได้ถูกสรุปไว้ในรูปที่ 3
รูปที่ 3: โครงสร้างของ code ที่ใช้รับและ Parse ประโยค NMEA และส่งไปยัง Serial Monitor
การจะใช้งาน GPS Shield ของ ITEADSTUDIO มี Trick อยู่นิดนึงคือ เรื่องของค่า Default Baud Rate ที่ถูกตั้งค่ามาจากโรงงานให้เป็น 38400 bps ซึ่งเร็วเกินไป เนื่องจาก GPS module ต้องการเวลาในการแปลและจัดการสร้างประโยค NMEA ถ้าใช้ค่า Default 38400bps จะทำให้ประโยค NMEA ไม่สมบูรณ์ส่งผลให้ไม่สามารถอ่านค่าต่างๆได้เลย ดังนั้นเราจำเป็นต้องเข้าไปแก้ไขค่า Default Baud Rate นี้ใน GPS Shield ซึ่งค่าที่เหมาะสมในกรณีนี้ก็คือ 4800 bps
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
สำหรับเพื่อนๆที่ต้องการจะลองเล่นกับ ตัว sktech ที่ใช้งานกับ GPS Shield ตัวนี้ได้ รบกวนส่งอีเมล์มาที่ร้านแจ้งความจำนงค์ โดยหากเคยซื้อสินค้าจากร้านเราให้ระบุหมายเลข order หรือ email address ที่ใช้ซื้อสินค้า มาด้วยนะครับ
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ผลการรันสามารถดูได้จากภาพด้านล่าง โดยโปรแกรมทดสอบ GPS ของ Iteadstudio ดึงข้อมูลตำแหน่ง Lat, Long และวันเวลาจาก GPS Shield ออกมาแสดงผลทาง Serial monitor โดยหากต้องการรู้ตำแหน่งจริงๆว่าอยู่ตรงส่วนไหนบนพื้นโลกก็สามารถตรวจสอบได้เพียงแค่ Copy พิกัดที่ได้แล้ว Search ใน google โดยตรงเลย เราจะเห็นจุดพิกัดที่สนใจบนแผนที่เลย
รูปที่ 4: ผลการ รัน แสดงผล (Latitude Longitude และ Date) ออก Serial Monitor
ส่วนหากใครที่อยากจะต่อยอดเอาไปทำงานวิจัยก็อาจจะลองศึกษาเรื่องการนำเอาข้อมูล GPS ไปผสมกับกับข้อมูลชนิดอื่นๆ ซึ่งจะทำให้ผลลัพท์ที่ได้ออกมามีความแม่นยำและถูกต้องสูงขึ้น หรือเสถียรขึ้นตัวอย่างเช่น อาจจะเอาข้อมูล GPS ไปผสมกับข้อมูลของ Odometer ที่วัดได้จากรถคันเดียวกันที่กำลังเคลื่อนที่ โดยใช้ Kalman Filter Algorithm เป็นเครื่องมือในการผสมข้อมูลจาก sensor 2 ชนิดนี้ (ดูรูปที่ 5)
รูปที่ 5: เอาข้อมูล GPS ไปทำ data fusion กับข้อมูลของ Odometer ทำให้ค่าสุดท้ายมีความแม่นยำและถูกต้องสูงขึ้น
By Pink Panther
"If I have seen further it is by standing on the shoulders of giants"
--- Isaac Newton ---