GPSロガー


はじめに

秋月電子で売られていたGPSモジュール(GPS-52D)を購入してみました.サイクリングの際に気軽に持ち運べるように,このモジュールを使ったGPSロガーを作成しました.

設計・製作

回路図 回路図(PDF)

AVR(ATtiny2313)を使い,GPSモジュールからのデータを読み込んでフラッシュメモリに記録します.フラッシュメモリとしては,余っていた8MBのスマートメディアを使いました.ソケット等は利用せず直接端子にハンダ付けしています.不要な外装ははずして中身のチップだけを取り出しました.スマートメディアのフォーマットは無視して独自のフォーマットで書き込みを行っているため,このスマートメディアは後から他の機器では使えなくなるので注意が必要です.

操作を行うためのプッシュスイッチを1つ設けて,下記のとおり電源ON時のスイッチの状態により動作モードを決定し,その後のスイッチの操作でデータのPCへの転送やメモリの消去を行うようにしました.

スイッチを離して電源を入れた場合(Logger mode)
規定の間隔(デフォルトでは1秒)でデータをメモリに記録し続けます(メモリに記録する瞬間だけLEDが点滅).
スイッチを約2秒間押し続けると,メモリの内容をRS-232CでPCに転送し,それが終わると無限ループに入ります(転送中はLEDが点灯.転送が完了すると消灯).
スイッチを押して電源を入れた場合(Mouse mode)
メモリへの記録は行わずに,1秒間隔でPCへGPSのデータを転送し続けます(LEDは常に点灯).
電源を入れてからもスイッチを離さずに約5秒間押し続けると,メモリを消去して,その後無限ループに入ります(消去中はLEDが点灯,消去完了後に消灯).

このGPSモジュールからはNMEA-0183形式でいくつかのデータが出力されますが,GGAセンテンスのみを記録することにしました.このモジュールから送られてくるGGAセンテンスは合計で87バイトありますが(CRLFを含む),そのうちの冗長なデータは削除して24バイトに圧縮して記録しています(カンマや常に同じ記号が入るフィールドを取り除いて,さらにほとんどのデータがASCII文字の数字であり下位4ビットしか必要でないため,上位4bitを捨てて2バイト分のデータをまとめて1バイトにしています).
スマートメディアはバイト単位ではなくページ単位で読み書きすることになっており,1ページは528バイトから構成されますが(512バイト+誤り検出・訂正符号用の冗長部16バイト),GGAセンテンス1行が24バイトなので,1ページ中にちょうど22個のデータが入ることになります.8MBのスマートメディアは(不良ブロックがなければ)16x1024ページを持つので,1秒ごとに記録した場合100時間ほど記録できることになります.
メモリへの書き込みはページ単位で行うので,1秒ごとに記録する場合,実際にメモリに書き込まれるのは22秒おきとなり,電源を切るとまだメモリに書いていないバッファ上のデータは失われます.
電源が入りLogger modeであると認識されると,まずフラッシュメモリ中の未使用領域の開始位置を探して,そこからデータを追記していきます.
フラッシュメモリへの書き込みは1ページ=528バイト単位で行われるため,本来は書き込みを行うまでのデータをバッファリングしておく必要がありますが,ATtiny2313はRAMが128バイトしかありません.幸い今回使用したスマートメディアはCE don't careというものに対応しており,データの転送途中であっても自由にチップのCE端子をdisableにしてスタンバイモードにできるので,スマートメディア内の528バイトのバッファを利用して逐次的にスマートメディアにデータを転送するようにしています.
PCへのデータ転送はステレオミニジャックを使いRS-232CのTTLレベルで出力しているため,別途レベル変換を行う必要があります.

GPSモジュールの動作電圧は3.1~3.6Vで,使用したスマートメディアも3.3V用です.電源は,Li-Po等を使い直接必要な電圧を供給するのが効率がよさそうですが,どこでも入手可能な単三電池2本を使うことにしました.小型で安価なDC/DCコンバータICであるHT7733Aを使っています.動作確認用にLEDを付けてありますが,ロギング中はメモリへの書き込みの瞬間だけ光るのであまり電力は消費しないはずです.
電源スイッチはあると便利かもしれませんが,スペースに余裕がなかったのと,利用場面から考えてあまりON/OFFする必要はないと考え,省略しました.
GPSモジュールは,説明書に書かれているとおり銅テープでGND層を作っています.バックアップ電池はスペースが無かったため省略しました.
ケースは,テイシンのTB-59Bを使いました.電池ボックスがピッタリ収まりますが,フタの出っ張りを削らないと電池と干渉します.

基板(表) 基板(裏) ケース

使ってみて

このGPSロガーを携帯して,大阪から奈良公園へ自転車で行ってきました.
走行したルートは暗越奈良街道という,難波宮と平城宮を最短距離で結んでいたという歴史のある道です.この日は奈良で正倉院展を見てきました.
ロギングしたデータは,TeraTermを使ってパソコンに保存しました.
カシミール3Dを使ってランドサット衛星画像の上に経路を表示させたものが下の図です.

地図

基本的にうまく動作しているようですが,(1)電源を入れて家を出てから20分程度の間衛星が捕捉できていない,(2)途中から実際に移動した位置と記録された位置が異なっていたりおかしな座標が記録されている(上の地図でJR奈良駅の手前付近から.実際は真東に直進している),という問題がありました.原因は今のところ不明です.
他にも,使ってみていくつか気になる点がありました:

思っていたよりも電池が持たない
ダイソーのマンガン電池を使いましたが,新品でも5時間程度しか持ちませんでした.動作時の電流を測ってみると入力電圧が3Vの場合135mAほど流れていました(入力電圧が2.4Vの場合は100mA程度).GPSモジュール自体の消費電流は70mA程度ですが,DC/DCで昇圧することやその際の変換効率を考えると仕方がないかもしれません.このGPSロガーを使うときは,容量の大きいNiMH電池を利用するようにしたいと思います.
データのPCへの転送に時間がかかる
PCへのデータ転送は9600bpsで行っていますが,GGAセンテンスが87バイトあるため,1秒あたり11個程度のデータしか転送できません.1秒間隔でログをとった場合,ログをとった時間の約1/10の時間がデータの転送に必要なことになります.解決方法としては,(1)スマートメディアなど使わずSDカードなどを使い,カードリーダ経由でデータを転送できるようにする,(2)データ転送時だけ通信速度を上げる(そのためにはAVRのクロックを上げる必要がある),(3)せっかく冗長なデータを削除して圧縮してメモリに記録しているので圧縮したまま転送してPC側で展開する,などの方法がありますが,そのうち改良したいと思います.

ファームウェア

参考資料

  1. GPS-52D取り扱い説明書, ポジション株式会社
  2. K9S6408V0A(スマートメディア)データシート, SAMSUNG
  3. NAND Flash Applications Design Guide, Toshiba America Electronic Components, Inc.

[戻る]
2008-11-05 ページ更新
2008-11-03 ページ作成
(2008-10 製作)
T. Nakagawa