【概要】
安価なGPS受信モジュールが入手できるようになりました。
そこで、これを利用して、ハイキングなどに持って歩ける携帯型のGPSロガーを
作ってみました。
GPSの測位データをSDカードに記録し、パソコン等でファイルとして開けるよう
にしました。
これをグーグルマップの地図に登録すれば、地図との重ねあわせができます。
SDカードを扱うファイルシステムは、マイクロチップ社から無償提供されている
FAT対応のファイルシステムを使いましたので、比較的簡単にSDカードを扱う
ことができました。
GPSロガーの外観は下図のようになっています。
上面にあるのがGPS受信モジュール
右側面にSDカードを挿入している
液晶表示例は下図のようになります。
表示内容は下記
N緯度 H高度
E経度 測位状態/衛星数/電源制御/秒
【全体構成】
全体構成は下図のようになっています。
まず全体をコントロールするのはPIC24FJ64GA002という28ピンの16ビットマイコンです。
ピン割付が自由にできるのが便利なのとファイルシステムがそのまま動作しますので、
これを採用しました。
GPS受信モジュールは単純なシリアル通信のインタフェースですのでPICのUARTで接続します。
また携帯にするのに、このGPSモジュールの消費電流が一番多く、バッテリでの動作時間を
長くするため、電源を必要なときだけオンにできるようにするスイッチ回路を設けています。
電源は液晶表示器以外はすべて3.3Vで動作しますので、リチウムイオン電池の3.7Vから
3端子レギュレータで3.3Vを作り、5VはDC/DCコンバータで作っています。
したがって、3端子レギュレータには低ドロップタイプのものを使う必要があります。
【GPS受信モジュールの使い方】
GPS受信モジュールは、秋月で仕入れた安価なモジュールです。
電源を接続すれば、あとはGPS衛星との通信ができれば、一定間隔でテキストベースの
データを順番に出力するだけになっています。
課題は、消費電流が多いので、携帯型でバッテリ動作をさせるため、必要なときだけ
電源をオンにする方法です。以外とこれが難問でした。
仕様書によれば、電源オン時の条件は下記となっています。
(1) 電源オン後、3秒間は通信禁止、以降は1秒間隔でデータが繰り返し送信される
(2) 電源オンから測位開始までの時間は下記3種の場合がある
・コールドスタート : 過去の測位データが何もないときの電源オンで70秒後に測位開始
(測位開始までは、固定のデータが出力される)
・ウォームスタート : 4時間以内の測位データがないときの電源オンで38秒後に測位開始
・ホットスタート : 4時間以内の測位データがあるときの電源オンで8秒後に測位開始
(ウォームとホットの場合には測位開始までは、過去の最後の測位データが出力される)
(3) 測位開始は、送信メッセージの中の「測位状態」のデータで判定できる
また通信データの出力は、9600bpsのデフォルトの通信速度の場合には、下図のように
1秒間の間で通信されます。1秒間の後半はかなり余っていることになります。
そこで全体を下記のように制御することとしました。
GPSモジュールの電源をオンとする
↓
約1秒待つ
↓
受信待ちし、データ送信が始まったら上記データブロックごとに受信する
↓
ブロックごとに必要なデータを抜き出して、PIC内のバッファに格納する
↓
最後のGPZDAブロックの受信が完了したら、測位状態のデータをチェックする
↓
測位状態が測位不可の場合には、次のデータ受信を待つ
↓
↓(ここで測位不可の間受信を繰り返す)
↓
測位状態が2次元測位か3次元測位であれば、正常測位データとして処理する
液晶表示器へのデータ表示と、保存指定があれば、SDカードに書き込み
↓
受信モジュールの電源オフ
↓
10秒間待つ
↓
最初に戻る
これで電源をオンし、正常な測位データが得られるまでは、電源オンのまま受信を
繰り返すことになりますから、上記電源オン時の条件はすべてクリアできますし、
正常動作開始後は、10数秒間隔の測位データが得られることになります。
実際の使用状態では、一度測定データが得られたあとは、電源オン後3秒待たずに、
1回目か2回目つまり2秒後か3秒後には正常な測位データが受信できるようです。
したがって、正常な受信状態の場合には、12秒か13秒間隔の測位データが得られる
ことになります。
このとき、12または13秒間の内、GPS受信モジュールの電源は3秒または4秒だけ
オンとなっていることになりますので、電力節約としては70%以上できることになります。
ただし、受信状態が悪いときは、どんどん節約率が下がることになります。
【回路】
上記条件で作成した回路図が下図となります。
PICには16ビットのPIC24Fを使っていますが、結構安価なので使いやすいPICです。
R7の抵抗はバックライトを使う場合だけ実装しますが、電池で使う時は消費電流が
増えてしまいもったいので実装しない方がよいでしょう。
スイッチはリセットスイッチ以外に操作用として2個用意しました。また発光ダイオードも
動作確認用に2個用意しました。
GPSのサブ基板の回路図は下記となります。
【組み立て】
全体を組み立てた外観が下記写真のようになります。
メイン基板とGPSモジュール基板の2枚で
構成しました。
GPSモジュールの基板はシールド用と
なっています。
メイン基板は、写真のようにGPSのサブ基板の下側となる部分に
GPSのバックアップ用電池と、GPS用電源制御の部分を実装しています。
PICの左側にあるコネクタがGPS基板
の接続用コネクタです。
★★★ 実装図ダウンロード
ハンダ面にはSDカードと3端子レギュレータ
が実装されえています。
★★★ パターン図ダウンロード
組み立てで少し面倒なのは、GPS受信モジュールです。受信モジュールの接続コネクタ
が非常に小さいのと、モジュール下側に50x50mm程度のシールドを推奨しているので
このコネクタ実装に両面のプリント基板が必要になってしまいます。
ですが、両面ではちょっと扱いにくいので、片面基板のサブ基板として組み立てることにし、
配線でGPSのコネクタと接続することにしました。この実装状態が下図写真のようになります。
★★★ パターン図のダウンロード
配線でGPS受信モジュールのコネクタ
と基板接続用コネクタを接続しています。
★★★ 実装図のダウンロード
ケースには透明アクリルケースを使いました。全体の高さがちょっと高くなってしまったので
GPSのアンテナ部分をケースのふたに穴をあけて飛び出させています。
アンテナを直接外部に出すことで余計な減衰もなくなるのでちょうど良いと思います。
バッテリには薄型のリチウムイオン電池の
ジャンク品を使っていますが、厚さが3mm程度
なのでぴったり基板の下に納まりました。
【ソフトウェア】
全体のプログラムはMPLAB C30のCコンパイラを使って作成しています。マイクロチップから
Studenti Editionとしてフリー版が提供されているのでこれを使っています。
また、SDカードの制御には、これもマイクロチップからフリーで提供されているファイルシステム
を使っています。FAT構成のファイルシステムですので、これでSDカード書き込んだファイルは
直接パソコンでファイルとして読み書きすることができます。
全体の流れはmain関数内で行っていますので極簡単な構成です。スイッチを状態変化割り込み
で入力し、データ保存の開始/終了と、保存方法の切り替えだけを行っています。
main関数の流れは下記フローチャートとなっています。
GPSロガーのプログラムは下記からダウンロードできます。
すべてMPLAB C30のC言語で記述されています。
★★★ GPSlogger プロジェクトファイル一式(PIC24FJ64用)
★★★ GPSLogger プロジェクトファイル一式(PIC24FJ32用)