การเขียนโปรแกรมต่อ GPS ด้วยคอมโพเน็นต์ OpenGPSX (ภาค 6 ตอนจบ)

เครื่องรับสัญญาณ GPS ที่จะนำมาทดสอบ

  • คงจะเป็นตอนสุดท้ายแล้ว มาลองทดสอบด้วยอุปกรณ์จริงๆ เพื่อทดสอบการรับข้อมูลที่เป็น NMEA จากเครื่องรับ GPS ก่อนหน้านี้ผมเคยลองด้วย GPS Trimble 5700 ด้วยการใช้สาย Serial ต่อที่ Port 2 ของเครื่อง (เครื่องรุ่นนี้มีช่องต่ออยู่ 3 Port) ส่วน Port 1 ใช้โปรแกรม GPS Configuration ที่มากับเครื่อง set ให้ output เป็น NMEA ออกมาทาง Port 2  (Default ของเครื่องจะไม่ได้ตั้งไว้และเป็นเครื่องที่ใช้โหมด Fast Static และ RTK จึงไม่ได้ใช้ NMEA แต่อย่างใด) แต่ก็เจอ bug ของ GPS Configuration อย่างจังคือทุกๆ NMEA สามารถ output มาได้หมดยกเว้น RMC
  • จะลองเครื่อง Garmin มือถือทั้งหมดเป็น USB ซึ่ง OpenGPSX ยังไม่ support ในตอนนี้ ก็เลยมาตกลงที่เครื่อง GPS ตัวเล็กๆ ยี่ห้อ Globalsat รุ่น BT-355 หัวต่อเป็น PS2 มากับเครื่อง Side Scan Sonar ที่บริษัทฯผมซื้อมา พร้อมกับ Keyspan USB 4 Ports Serial Adaptor และ มีหัวต่อ PS2 อยู่ 1 Port

 

BR-355 และ USB 4 Ports Serial Adaptor

มีพอร์ต Serial แล้วทำไมต้องมีพอร์ต PS2

  • ที่จริง Keyspan ตัวนี้หัวต่อเข้ากับคอมพิวเตอร์เป็น USB แปลงเป็น Serial Port ได้ 4 ช่อง เมื่อนำ BR-355 เสียบเข้ากับ Keyspan ด้วยช่อง PS2 จะจอง Serial Port ช่องที่ 3 โดยอัตโนมัติ เมื่อมี serial port แล้วทำไมต้องทำ PS2 มาด้วย คือถ้ายังจำกันได้พอร์ต PS2 บนเครื่องคอมพิวเตอร์ตั้งโต๊ะส่วนใหญ่เราจะใช้เสียบเมาส์และคีย์บอร์ด ซึ่งพอร์ต PS2 จะจ่ายกระแสไฟให้ด้วยคิดว่าประมาณ 5 VDC ไม่มากนักแต่เมาส์กับคีย์บอร์ดก็ไม่ได้กินไฟอะไรมากนัก ส่วน serial port แบบ RS232 ไม่ได้ออกแบบให้จ่ายกระแสไฟให้อุปกรณ์ เพราะมีหนึ่งเส้นส่งข้อมุล(Tx) อีกหนึ่งเส้นรับข้อมูล(RX) เส้นที่สามเป็น ground อาจจะมีคนแย้งว่าสมัยแต่ก่อนมีเมาส์แบบ serial เอาไฟที่ไหนมาใช้ก็มีวิธีดึงไฟมาใช้ได้จาก serial port สนใจลองไปดูที่ Get power out of PC Serial port

แปลงเป็นหัวต่อแบบ Serial port

  • ตอนแรกผมคิดว่าตัว Keyspan ใน Linux คงไม่ support ผมจะเริ่มดัดแปลง หัวต่อ PS2 ตัดแล้วนำมาบัดกรีเข้ากับหัวต่อ Serial port ที่ซื้อมาใหม่เป็นตัวเมีย (DB-9) ถือเป็นโครงการทำกันสนุกๆนะครับ และมาดูกันว่าได้ผลดีหรือว่าแป๊ก

 

หัวต่อแบบ Serial DB-9 ตัวเมีย กับ GPS BR-355

 

  • จัดการตัดหัวต่อ PS2 ออกแล้วปอกสายพร้อมบัดกรี

 

ตัดหัวต่อ PS2 ออกแล้วปอกสาย

 

  • เตรียมหัวแร้งบัดกรีให้พร้อม

 

หัวแร้งบัดกรีของจีนแดงราคาประมาณ 100 บาท

 

  • ดูไดอะแกรมการต่อสาย (wiring diagram) ของหัวต่อ PS2 ที่พิน 1 และพิน 2 เป็นสายไฟขั้วลบและบวกตามลำดับ ส่วนพิน 4 และ พิน 5 เป็นสายส่งและรับข้อมูลตามลำดับ ผมนำมาต่อกับ serial port คือ
    • พิน 1 (PS2) – พิน 5 (DB-9)
    • พิน 4 (PS2) – พิน 3 (DB-9)
    • พิน 5 (PS2) – พิน 2 (DB-9)

 

Wiring diagram of BR-355 (PS2)

 

  • เสร็จจากการบัดกรีแล้วผมต่อสายไฟขาวแดงและมีสวิตส์ไฟด้วยเพื่อปิดเปิด

 

ต่อเสร็จแล้วพร้อมสวิตส์ไฟเปิดปิด

 

ปัญหายังไม่จบไม่มี Power supply จ่ายให้ GPS

  • ถ้าดูรูปข้างบนแล้วจะเห็นว่าทำไมต้องต่อ PS2 เข้าไปอีก(เพียงสองเส้นคือดำแดง)  ตอนนี้ถึงผมถึงกับบางอ้อว่า serial ไม่ได้ออกแบบมาให้จ่ายไฟให้กับอุปกรณ์ได้ ยังไงๆต้องมีแหล่งจ่ายไฟให้กับ gps ฺBR-355 อยู่ดี วิธีแก้ไขต้องใช้อุปกรณ์ DC to DC 5V Step up มาช่วยรูปด้านล่างใช้ถ่าน AA 2 ก้อนแล้วนำมาจ่ายไฟให้ GPS ผ่านสายไฟแดงดำด้วยการถอดเอาหัวต่อ PS2 ทิ้ง

 

5V DC to DC Step Up – 2xAA

 

ต่ออุปกรณ์แล้วทดสอบ

  • ตอนนี้ผมยังไม่ได้ซื้อ 5V DC to DC Step Up – 2xAA ในการทดสอบจะใช้พอร์ต PS2 จาก Keyspan ไปพลางๆก่อน

 

ต่อ GPS เข้าคอมพิวเตอร์เพื่อทดสอบคอมโพเน็นต์ OpenGPSX

 

ทดสอบโปรแกรมบนวินโดส์

  • รัน Lazarus เปิด project “OpenGPSTest.lpi” แล้วกด F9 เพื่อรัน เมื่อโปรแกรมป๊อบขึ้นมาแล้วคลิกที่เมนู GPS > Settings

 

โปรแกรมทดสอบการใช้คอมโพเน็นต์

 

  • เมื่อเสียบตัว Keyspan เข้ากับเครื่องคอมพิวเตอร์ driver ของ keyspan จะเลือก Com port ที่ว่างๆให้ เครื่องผมตัว driver เลือก 4 port เรียงดังนี้ Com5, Com6, Com7 และ Com12 ตามลำดับ ผมเสียบที่ช่องที่สามจะเป็น Com7 แต่ทั้งนี้ถ้าไม่พอใจสามารถตั้งค่าพอร์ตใหม่ได้ที่ Device manager สังเกตว่าเครื่องรับ gps ตัวนี้ตั้งค่า baud rate จากโรงงานมา 4800 b/s เท่าที่ผมทดสอบไม่สามารถตั้งค่าอื่นได้ ซึ่งที่ผมเคยกล่าวไปแล้วบาง sentence เช่น $GPGSV อาจจะหาย

 

ตั้งค่า Com port ส่วน Baud rate ตั้งได้ 4800 b/s ได้อย่างเดียว

 

  • ลองต่อ gps ด้วยเมนู GPS > Connect แล้วตอบ Yes เพื่อ confirm ผมลองโปรแกรมนี้บนทางด่วน บูรพาวิถี ตั้ง property “TargetCoordinate” ของ GPSTarget ที่ object inspector เป็น Latitude = 12.691 และ Longitude = 101.235 รูปด้านล่างเป็นการทำงานของโปรแกรมได้จากการจับภาพหน้าจอ

รูปแสดงการต่อกับ serial port ซึ่งใช้งานได้ดี

ทดสอบโปรแกรมบน Ubuntu Linux

  • มาลองดูฝั่ง Linux ซึ่งโอเอสนี้ผมใช้อยู่ 2 distro คือ Ubuntu กับ PCLinuxOS ซึ่ง Ubuntu ที่ผมใช้เป็น Gnome ส่วน PCLinuxOS รุ่นที่ใช้เป็น KDE ก็ชอบทั้ง Gnome และ KDE ไม่เทใจไปทางใดทางหนึ่งจนหมด แต่ถ้าใช้งานแล้วลื่นไหล ไม่ค่อยมีอะไรมากวนใจก็ต้องยกให้ Ubuntu ส่วน Lazarus ที่ติดตั้งใน PCLinuxOS ผมใช้ Qt เป็น Widget  แต่ Lazarus crash แค่เปิดเมนูก็พังแล้ว แต่ถ้าปรับมาใช้ Gtk2 เป็น Widget กลับทำงานได้ไม่มีปัญหาใน PCLinuxOS ตอนนี้ก็จะลองได้ใน Ubuntu ให้ดูเท่านั้น

ตรวจสอบ Hardware

  • ผมลองเสียบ Keyspan ว่า Linux จะมองเห็นหรือไม่ลองตรวจสอบดูด้วย command line ด้วยการ cd เข้าไปในไดเรคทอรี /dev/ แล้วดูว่ามี tty*** จะเห็น ttyUSB0, ttyUSB1, ttyUSB2 และ ttyUSB3 ผมสงสัยว่าน่าจะเป็น Keyspan

 

ตรวจ device ง่ายๆในไดเรคทอรี /dev/

 

    • ตรวจสอบด้วยคำสั่ง dmesg เพื่อความมั่นใจ จะเห็น Keyspan ขึ้นมาด้วยข้อความดังรูปด้านล่าง และ 4 ports ของ Keyspan จะ attach เข้าเป็น device เรียงดังนี้ ttyUSB0, ttyUSB1, ttyUSB2 และ ttyUSB3 ตามลำดับ ผมเสียบ BR-355 เข้าที่ port 1

 

ตรวจสอบด้วย dmesg จะเห็น Keyspan

 

 

    • รัน Lazarus แล้วเปิดโปรเจค OpenGPSTest.lpi กด F9 รันโปรแกรมคลิกที่เมนู GPS > Settings ผมตั้ง Com port : เป็น /dev/ttyUSB0 ต้องพิมพ์เข้าไปเพราะไม่ได้เตรียมไว้ในลิสต์ (อนาคตอาจจะออกแบบให้ค้นหา port แบบ auto)

 

 

 

    • คลิกที่เมนู GPS > Connect ถ้าไม่มีอะไรผิดพลาดจะเห็นข้อมูลไหลเข้าเหมือนรูปด้านล่าง ที่ผ่านมาการใช้ Keyspan แบบที่ผมใช้อยู่พบว่า ใน Kernel ของ Linux ได้ implement เข้าไปเป็นที่เรียบร้อย และผมคิดว่า hardware ประเภท USB to Serial ทั้งหลายน่าจะใช้ได้หมดใน Linux ทำไมถึงต้อง support เพราะว่ามีอุปกรณ์ที่ใช้งานในโลกนี้มากมายที่ยังใช้ Com port อยู่เช่นในอุปกรณ์ในโรงงาน เครื่องมือแพทย์ อุปกรณ์สื่อสาร เป็นต้น ก็มี hardware ส่วนหนึ่งเท่านั้นที่หันมาใช้ USB โดยตรง

 

ทดสอบใน Ubuntu
  • เท่าที่ลองใน Linux พบว่าความไม่เสถียรเมื่อเสียบ Keyspan เข้าไป Ubuntu มีอาการแฮงค์บ่อยครั้ง ผมเลยย้ายมาที่ Com port ที่ติดมากับเครื่อง Notebook ถ้าเป็นวินโดส์ Com1 ส่วนใน Linux จะเป็น /dev/ttyS0 ไม่มีปัญหาครับ
  • ก็ขอจบตอนสุดท้ายแค่นี้ แต่ OpenGPSX ก็จะยังพัฒนาต่อไปครับ ผมเองตอนนี้กำลัง port โปรแกรมที่เขียนด้วย Delphi มายัง Lazarus เพื่อให้โปรแกรมที่เขียนไว้สามารถนำไปใช้บน Linux ได้ แต่ก็พบหลายๆอย่างที่โค้ดทำงานได้ดีใน Delphi แต่กลับมาแป๊กบน Lazarus ซึ่งต้องใช้เวลาพอสมควรในการแก้ไขให้ทำงานได้

2 thoughts on “การเขียนโปรแกรมต่อ GPS ด้วยคอมโพเน็นต์ OpenGPSX (ภาค 6 ตอนจบ)”

Leave a Reply

Your email address will not be published. Required fields are marked *