3 ハンドメイド GPS ロガ


PIC
____________________________________________________________________

3.1 は じ め に

これまで Debian インストブアプリケシステムをするなどシステムることはある したものの帳サGPS ロガなどらかのになるものはなかなかつくれませんで した

そこでプログラムスキルるためのとしてGPS ロガしたのでします

これから Debian 味をがかりとなしでもお立てればいです

3.2 GPS とは

Global Positioning System からのして現在システムです

はいろんなインタされているようですのでここではします

3.3 GPS ロガ

必要以下りです

使した略仕Appendix してください

トブ   PS2-USB   GPS レシ

  1. GPS レシ
    GPS アンテナ路、 路からPS2 コネクタからシリアルラクタ文字GPS されます
  2. PS2-USB
    GPS レシからシリアルインタフUSB インタフするためのものです ブルになています
  3. トブ
    USB インタフした GPS イル溜めみますまたGPS をいろいろ してしめます

3.4 トブクセトア

トブ直後から GPS ロガするについてします

  1. Debian Base system インスト
    Debian-netinst-iso 使Base system インストします
  2. X Window System インスト
  3. Gnome インスト
  4. システムインスト
    プログラム必要です uim-anthy インストしました
  5. NTP インスト
    システム動調整プログラムですGPS うためシステム大切になると れます
  6. プログラム言語インスト
    GPS ロガアプリケ必要ですつきやすくGUI ができライブラリ豊富 われる Python バイトン or パイソン選択しましたにとかにとつきやすいですが れなりに労しましたpython のせいではなくプログラミングというものたものがそう単にで きるわけではないということだとわれます
  7. Python library インスト
    1. PySerial
      シリアルポプログラムです
    2. Python Tkinter
      GUI プログラミングのひとつです
    3. datetime
      うとき使います
    4. os, os.path
      イルきするとき使います
    5. sys(によ使)
      コマンドパラメするとき使います

3.5 GPS

使した GPS レシNMEA0183 というプロトコルですNMEA0183 では以下のようななどで れますが

GLL
Geographic Position, Latitude and Longitude
GSA
GNSS DOP and Active Satellites
RMC
Recommended Minimum Specific GNSS Data

GGA
Global Positioning System Fix Data

というのみ利用しました

GGA りです

GGA,123519.00,4807.038247,N,01131.324523,E,1,08,0.9,545.42,M,46.93,M,5.0,1012*42
123519.00  測位UTC12:35:19.00
4807.038247,N  48 07.038247 分(
01131.324523,E  11 31.324523 分(
1  GPS クオリテ 0 =  能、 1 =  単独測位2 = DGPS
08  星数
0.9  HDOP
545.42, M  平均からのアンテナm
46.93, M  WGS-84 から平均m
5.0  DGPS エイジ
1012  DGPS ID
*42  クサム

ここからなどの利用しました

3.6 アプリケ

いよいよアプリケですGPS GGA して表示したりログをとります

3.7

アプリケらせます

3.8 今後抱負

アプリケにいろんな展開えられますSunday programmer として今後しづつであても します

  1. Open Street Map への
  2. Open Street Map 利用

図上への現在表示ログデからトレ表示したりと図情ですこの縮尺必要 すがOpen Street Map ベクトルデであることからこの有利ですまたナビのようにした これが能なインタフOSM にあればあるのかもれませんが) 、 より利用できるのではないかと しています

Appendix

[A] トブ

PC:       Asus EeePC 901
CPU:      Intel Atom (1.6GHz)
Memory:   1GB
HDD(SSD): 4GB + 8GB
Monitor:  8.9 1024 x 600
I/F:      USB 2.0

[B] トブクシステム

OS:      Debian Lenny
Kernel:  2.6.26-2-686
言語:    Python 2.5.2
Library: pySerial, tkinter

[C] GPS レシ

:       GPS-S103(Wonde proud )
  :  5 - 25m CEP without SA
:   1 μ s synchronized to GPS time
プロトコル: NMEA0183
動作:   -40 °C ~ +85 °C
動作湿:   5% to 90%  露なき
:       DC 3.7 ~ 6V, typical 5V USB より供給
I/F:        TTL serial(PS2 コネクタ). USB option

[D] GPS ロガ

  1. ログフイル
    $GPVTG,113.96,T,,,0.00,N,0.00,K,A*7C
    $GPGGA,054832.084,3450.2455,N,13615.2118,E,1,09,01.0,253.6,M,37.3,M,,*6B
    $GPRMC,054832.084,A,3450.2455,N,13615.2118,E,0.00,113.96,260909,,,A*6C
    $GPVTG,113.96,T,,,0.00,N,0.00,K,A*7C
    $GPGGA,054833.083,3450.2455,N,13615.2118,E,1,08,01.1,253.5,M,37.3,M,,*6E
    $GPRMC,054833.083,A,3450.2455,N,13615.2118,E,0.00,113.96,260909,,,A*6A
    $GPVTG,113.96,T,,,0.00,N,0.00,K,A*7C
    $GPGGA,054834.083,3450.2455,N,13615.2118,E,1,09,01.0,253.4,M,37.3,M,,*68
    $GPGSA,A,3,03,06,07,08,11,16,19,22,25,,,,2.2,1.0,1.9*39
    $GPGSV,3,1,09,3,44,055,37,6,33,060,33,7,50,266,39,8,28,311,37*7A
  2. 現在表示


    PIC

  3. 現在置地表示


    PIC

  4. プログラム(抜粋)
    #! /usr/bin/python2.5
    # -*- coding: utf8 -*-

    #********************************************
    #
    #  for KDM 2009.12.27
    #
    # Now edited on .... 2009-02-07 ...
    # Reviced on    .... 2009-12-23
    #
    #********************************************

    #  必要モジインポ
    import os.path
    import Tkinter as Tk
    import time, datetime
    import serial
    import string
    .
    .
    .
    # GUI 
    root = Tk.Tk()
    buff_date = Tk.StringVar()
    buff_date.set(honjitsu)

    buff_hT = Tk.StringVar()
    buff_mT = Tk.StringVar()
    buff_sT = Tk.StringVar()
    buff_hT.set(’’)
    buff_mT.set(’’)
    buff_sT.set(’’)
    .
    .
    .
    #  表示
    # display date &  gpstime
    f0 = Tk.Frame(master=None, relief= ’ridge’, bd=3)
    bd0 = Tk.Label(f0, text="うは", font=dfont12, relief = ’ridge’)
    bd1 = Tk.Label(f0, textvariable = buff_date, font=dfont18, relief = ’ridge’)
    bd2 = Tk.Label(f0, text="    ", font=dfont12, relief = ’flat’)
    b00 = Tk.Label(f0, text="", relief = ’ridge’)
    b01 = Tk.Label(f0, textvariable = buff_hT, font=dfont18, relief = ’ridge’)
    b02 = Tk.Label(f0, text="", relief = ’ridge’)
    b03 = Tk.Label(f0, textvariable = buff_mT, font=dfont18, relief = ’ridge’)
    b04 = Tk.Label(f0, text="", relief = ’ridge’)
    b05 = Tk.Label(f0, textvariable = buff_sT, font=dfont18, relief = ’ridge’)
    b06 = Tk.Label(f0, text="", relief = ’ridge’)

    for e in [ bd0, bd1, bd2, b00, b01, b02, b03, b04, b05, b06 ]:
    e.pack(side=’left’, padx=5)

    # display latitude
    f1 = Tk.Frame(master=None, relief= ’ridge’, bd=3)
    b10 = Tk.Label(f1, text="", font=dfont24, relief = ’ridge’)
    b11 = Tk.Label(f1, textvariable = buff_dLa, font=dfont48, relief = ’ridge’)
    b12 = Tk.Label(f1, text="", relief = ’ridge’)
    b13 = Tk.Label(f1, textvariable = buff_mLa, font=dfont48, relief = ’ridge’)
    b14 = Tk.Label(f1, text="", relief = ’ridge’)
    b15 = Tk.Label(f1, textvariable = buff_sLa, font=dfont48, relief = ’ridge’)
    b16 = Tk.Label(f1, text="", relief = ’ridge’)

    for e in [b10, b11, b12, b13, b14, b15, b16 ]:
    e.pack(side=’left’, padx=5)
    .
    .
    .
    #  表示義関
    def showtime():
    # open log file for write gps data
    f = open( fname, ’a’)
    gpstime = ’’
    # get ’GPGGA’ sentence from gps receiver.
    # USB シリアルラインプン
    ser = serial.Serial(’/dev/ttyUSB0’, 4800, timeout = 3)
    print ser.portstr
    line = ser.readline()  #  づつ
    words = line.split(’,’)
    while( not words[0] == ’$GPGGA’):
    line = ser.readline()
    words = line.split(’,’)
    print line
    ser.close()

    プログラム, 続き

    # time #  しと
    time = words[1]
    hT_utc = time[:2]
    hT_jst = str( ( int(hT_utc) + 9 ) % 24 ).zfill(2)
    mT = time[2:4]
    sT = str( int( float(time[4:]) ) ).zfill(2)
    gpstime = ’gpstime  = ’ + hT_jst + ’:’ + mT + ’:’ + sT + ’ JST’
    .
    .
    .
    # latitude #  しと
    lati = words[2]
    deg_lati = " " + lati[:2]
    min_lati = lati[2:4]
    sec_lati = str( int(float(lati[4:]) * 60 ) ).zfill(2)
    gpslati = ’latitude = ’ + deg_lati + ’:’ + min_lati + ’:’ + sec_lati + ’ ’ + words[3] + ’  ’
    # longitude #  しと
    long = words[4]
    deg_long = long[:3]
    min_long = long[3:5]
    sec_long = str( int(float(long[5:]) * 60 ) ).zfill(2)
    gpslong  = ’longitude=’ + deg_long + ’:’ + min_long + ’:’ + sec_long + ’ ’ + words[5] + ’  ’
    # koudo
    kodo = words[9]
    gpskodo  = ’koudo= ’ + kodo + ’ m’
    .
    .
    .
    # write new data to data file
    f.write(line)  #  ログデイルへの

    f.close

    root.after(1, showtime) #  表示

    showtime() #  表示
    root.mainloop() #  無限

30 回関西 Debian 2009 12
____________________________________________________________________________________________