GPSモニター&ロガーの製作 H19.6.30
GPSログデータ活用
kunioのHPへ戻る
Strawberry
LinuxでGPSモジュールを販売していたのでそれを使って、遊んでみることにしました。
GPSは位置(緯度経度)情報の他に、時刻(リアルタイムクロック)や高度、方位とかも得られるようなので
それらの情報をLCDに表示し、SDカードにログとして残すことに挑戦しました。(SDへの書き込みは初挑戦)
ログデータをgoogle map等で活用すれば面白そうです。(まだやってません)
SDカードへの書き込みは、最悪の場合元のデータを壊す恐れがありますので、自己責任でお願いします。
回路図
ソース
主な使用部品
GPSモジュール
僕が購入したものは、現在売られているものとちょっと違い、電源電圧DC5V固定で価格は8千円でした。
これ単体で、電源を接続しPCのRS232Cに繋げばハイパーターミナル等でデータを見ることが出来ます。
データ出力は、NMEA-0183
フォーマットでTTLレベルとRS232Cレベルの2種類
CPU ATMEGA8 4Mhz動作
SDにデータを書こうとすると、SRAM容量1024バイトでは無理かなと思いましたが、何とかできました。
LCD 20x4 80文字表示
表示させたいデータ量が多かったので、20x4のものを秋月から買いました。
(電源の1と2番ピンの極性が16x2のもと逆なので注意)
SDカード
64MBと128MBで動作確認
74LVC245 3.3V←→5.0V電圧レベル変換
SDカードが3.3V電源で、その他5Vなのレベル変換のために使用
動作の概要
表示処理(データ受信間隔の1秒毎)
@GPSのTTL出力をSRAMに取り込み(最大で約400バイト/1回)
A@のデータのうち必要なデータを抽出加工し、LCDに表示
表示データ
1行目 日付・時刻 (UTCのため日本時間とするには+9時間する必要がある。今回手抜きで省略^^;)
2行目 N 北緯 xx度xx.xxxx分
3行目 E 東経xxx度xx.xxxx分 n 受信衛星数
4行目 h 平均海面からの高度(m) d 進行方向°(北基準)
SDカードへのログ保存
3分周期で保存することとしました。
問題は、SRAMをどう使うかです。ログで約400バイト、FAT用・ディレクトリエントリ用・データ用で各1セクタ分512バイト
本来ほしいところです。(他にも作業領域やスタックとしてもいるし)
そこで、ログとデータ用は同じ内容であること、FATとディレクトリエントリとデータはシリースに書けばいいので手順を工夫
して512バイトのみ使うことにしました。
書き込み手順(概略、詳細はFATについて3参照)
@1セクタのFAT領域を読み込み、空き(0x0000)のFAT(クラスターNo)を検索、そのFATに0xFFFFを書き込み
約400バイトのため次のクラスター不要、FATの2組目にも書き込みのみ実施
A1セクタのルートディレクトリエントリ領域を読み込み、空きエントリを検索、そのエントリに@のクラスタNoとダミーファイル名
等を書き込み
B上記の表示処理実施する。SRAMのログデータをクラスタNoに対応したセクタに書き込む
CAのエントリセクタを再度読み込み、ファイル名(時刻:HHMMSS.LOG)および書き込み日時データおよびファイルサイズを
設定し再書き込み。
ログデータ例 フォーマットはNMEA-0183参照 個人情報保護のため北緯・東経の分の1桁(?)は消してあります(^^)
$GPGGA,080339,35?1.8360,N,137?5.1323,E,1,08,01.2,00715.4,M,036.6,M,,*44
$GPGSA,A,3,01,06,07,14,16,22,30,31,,,,,02.4,01.2,02.0*06
$GPGSV,3,1,09,01,55,312,46,06,50,111,48,07,51,128,50,14,74,171,47*70
$GPGSV,3,2,09,16,24,236,43,20,08,315,00,22,11,197,39,30,43,044,37*78
$GPGSV,3,3,09,31,51,315,47,,,,,,,,,,,,*42
$GPRMC,080339,A,35?1.8360,N,137?5.1323,E,000.0,171.9,230607,,,A*77
感想
起動から数分、衛星を捕らえるまでに時間がかかります。RTCも内臓バッテリーが放電状態だと起動から2−3分しないと表示
されません。
GPSの精度はかなり高く、位置情報は数メータ以内の誤差です。
SDへのデータの書き込みコマンド、FATファイルの作成は初めてでしたが、意外とすんなりできました。
起動時にSDの初期化を失敗してしまうことがありますが、原因不明です。それ以外は問題なく動いています。