2012年11月18日日曜日

GPS ロガーを作ってみよう〜♪

参考:Gms-g9 に挑戦してみた:後日,ロシアの GLONASS 等を受信できる GNSS ユニットに挑戦した。

AdafruitUltimate GPS unitSparkFunで販売している OpenLog を組み合わせて,簡易 GPS ロガーを作ってみた。今回はその話について書こう。

 2011年からバイクのツーリングの記録用に GPS ロガーを使っている。GPS ロガーは,GPS の情報を時間と共に記録する乾電池や充電池で動く小さな装置。私が持っているのは台湾の Transystem というメーカーの TripMate 850 という機種。使われている GPS 用のチップが更新されたみたいで,現在 TripMate 850 は製造中止になったみたい。後継機種はいつ出るんやろ??

 2012年に入ってから,バイクにポータブルナビをつけてみた。その際,Bluetooth でナビと通信できるインターコムを買ってみたのだが,そのインターコムの電池のもちが悪い,というトラブルがあり,中身をごそごそいじってみた。その際,リチウムポリマーバッテリー(今後 LiPo バッテリーと記載)について調べたりした。調べる過程で LiPo バッテリーは模型ヘリコプターでよく使われているのを知ったりしたのだが,一番気になったのが Physical Computing の世界。Physical Computing はコンピューターのハードウェアをいじって遊ぶものなのだが,メインとなるコンピューター部分(Microcontroller と呼ばれる)と,モーターのコントロールユニットや測定素子のついたユニット(シールドと呼ばれるものや,Breakout Board と呼ばれるもの)を組み合わせていろいろなシステムを作るもの。自分で回路を組み立ててもいいし,シールドや Breakout Board をソケットで組み合わせるだけでもいい。その際,GPS センサーの Breakout Board として,台湾の MediaTek 社の MT3339 チップセットを使ったものが約 4,000 円と比較的安く売られているのを知った。MT3339 チップはきっと TripMate 850 で使われているチップの後継機種みたい。となると,自分で GPS logger を作れるかも,と思ってしまった。で,実際に作ってみた(組み立てるだけ,という感じだが…)。

パーツ1GPS unitAdafruitUltimate GPS unit を使った。AdafruitUltimate GPS unit は台湾の GlobalTop 社による PA6H というモジュールを使ってる。 PA6H モジュールには MediaTek 社(台湾)の MT3339 というチップセットが使われている。 心臓部は感度は十分よいと評判の MediaTek 社製のものであり,それが約 4000 円で手に入った。 この GPS unit は,日本の準天頂衛星システム(Quasi-Zenith Satellite System、QZSS)の衛星である「みちびき」の電波を受信でき, また静止衛星を使った補正 (SBAS) の WAAS (USA), EGNOS (EUROPE), MSAS (日本) も使える。 GPS unit は,シリアル通信の規格の一つである UART でコマンドやデータを簡単にやりとりでき, 電源は 3.3V でも 5V でも使えるように,直流コンバーターがつけてある。 また,今回は使っていないが外部アンテナも接続が可能であり,それが約 3.5cm x 2.5 cm の基板 (PCB) に載っている。(厚みは 6.5 mm)

パーツ2:データのログを記録する部分は,SparkFunOpenLog を使った。SparkFunOpenLog は,microSD カードにテキスト形式でログを記録することに特化したユニットで,15 mm x 19 mm (厚み 4 mm) の基板に,ATmega328 microcontroller と microSD カードユニット,3.3V を作る直流コンバーターが載せてある。電源は 3.3V あるいは 5V で働く。通信は UART シリアル通信であり,基板には,プラス電源,GND,UART 用の TxRx の合計4本の線を繋げばよい。ユニット自体にも Microcontroller が載せてあるが,大変小さなものなので,Arduino 等を用いたシステムのログ記録用としても使えるユニットである。難点は,ログファイルのファイル名が決められているのと,Real Time Clock (時計機能) を持っていないので,ファイルのタイムスタンプがいつも同じ,という点。また,アップデートを行うには Microcontroller などとつないで処理しないといけない。

パーツ3
電源として,今回はリチウムポリマー電池(今後 LiPo 電池と記載)を使うことにした。LiPo 電池は充電可能な電池であり,電圧は 3.7V を出力する。充電には専用の充電器が必要であるが,専用のチップが販売されており,そのチップを組み込んだ小さなユニットがいろいろと販売されている。今回は LiPo 電池への充電が可能で,5V か 3.3V の一方を出力可能な Booster 機能を持った SparkFunPower Cell LiPo Charger/Booster というのを買ってみた。これは,microUSBLiPo 電池への充電が可能で,出力電圧は半田によるジャンパーで指定できる(デフォルトは 5V)。また,電源をスイッチで簡単に OFF にできるように EN という端子がついており,そこに小さなスライドスイッチをつなぐと,システム全体の ON/OFF が可能となっている。

追記) 下記にもあるように,Power Cell の出力を 3.3V にした場合と 5V にした場合で,消費電力がかなり違ってくる。 そのため,全体が 3.3V で駆動できる系の場合は,出力は 3.3V に落とすべきである。 また,EN 端子と GND 端子をショートせずに LiPo 電池をつないでおくと, 何もしなくても回路が働いている状態となって電力を消費してしまう。 そのため,LiPo 電池はカラになってしまうので,ご注意を。

充電池: とりあえず手元にあった 420 mAh の容量をもつ LiPo 電池をつないでみた。後で述べるように,使ってみた感触だと 420 mAh を使った場合は持続時間が少し物足りない。持続時間を考えると LiPo 電池の容量は 800 mAh 以上がよさそうである。また,電池自体の大きさが大きいと使いにくいので,最終的に LiPo 電池の容量は,800 mAh から 1000 mAh 程度がよさそうということになり,実際に 850 mAhLiPo 電池をつないで使っている。

配線
基板はスルーホールの小さな基板を,大阪・日本橋の共立電子で買ってきた。3つのユニットは全てヘッダーピンをハンダ付けし,その足を基板にハンダ付け,もしくはソケットに挿す方式とした。GPS unit は使いまわそうと考えて,取り外しが容易なソケット式にしている。

プログラミング: 今回はプログラミングは一切必要なかった。GPS unitOpenLog につなぐと勝手にログを記録し始める。GPS unitUART で GPS の情報 (NMEA 型式の情報) をテキストデータとして出力し,OpenLog はその UART で送られてきたテキストデータをそのまま microSD カードに記録する。そのためつないでしまえば,後は何もしなくてもいい。しかし,GPS unit に吐き出させるログの内容を変更したい場合などは,microcontroller か何かで GPS unit にアクセスできないといけない。今回ここには記述はしないが,Strawberry Linux 社製の Da Vinci 32U (Arduino Leonardo bootloader 版) に Adafruit の作ったサンプルプログラムを使って設定を変更した。

使ってみて: 最初はもう少し横長にしようと思っていたのだが,GPS unit を取り外しやすいようにソケットに挿す方式にすると背が高くなるため,その下のスペースを活用するために一回り小さな基板にしてみた。ホントは薄めの方が使いやすそうなのだが,これはこれでとてもいい感じになっている。GPS unit は,起動すると衛星を捕捉しようとする。その際,赤色の LED が 1 Hz で明滅する。うまく捕捉できれば,赤色の LED は 15sec に一度だけ光るように設定されている。衛星の捕捉は建物の中だと多少厳しい。補足できたとしても,捕捉できた衛星の数が少なく,位置情報の精度はあまりよくない。逆に外にいけば,かなりよく衛星を捕捉していた。後日,バイクでツーリングに持って行き,他の GPS 機器と性能を比べてみた。しかし,この GPS unit を保持していた場所が悪かったらしく,他の2つの機器に比べてかなり劣る結果となってしまった。性能に関しては同じ条件で調べる必要がありそうなので,今後,時間をかけて調べてみるつもりである。

LiPo 電池と消費電力LiPo 電池を使っているが,駆動時間等について書こう。
当初,LiPo 電池として 420 mAhLiPo 電池を使っていた。その LiPo 電池を使い切るのに(途中でオフにしたりしていたが)8 時間ちょっとかかった。そこから単純に計算すると,このユニットは 52 mA 消費していることになる。しかし,LiPo 電池は充電したてじゃなかったから,どの程度電荷が残っていたかは不明。

そこで,LiPo 電池をフル充電してからすぐに何時間もつかを試してみた。また,後日 850 mAh の電池も買ってみたのでその結果も書こう。
 ・420 mAhLiPo 電池の場合の持続時間
   1回目:32568.005 sec (09:02:48.005) → I = 420/32568.005*3600 = 46.43 mA
   2回目:33147.101 sec (09:12:27.101) → I = 420/33147.101*3600 = 45.62 mA
 ・850 mAhLiPo 電池の場合の持続時間
   1回目:66460.669 sec (18:27:40.669) → I = 850/66460.669*3600 = 46.04 mA

この結果より,この OpenLog + Ultimate GPS の GPS ロガーは,平均で約 46 mA の電流を消費していることになる。 これより 420 mAh なら約 9 時間,850 mAh なら約 18 時間となり,バイクで1日使っても大丈夫というレベルになっている。 消費電力の内訳としては,Ultimate GPS unitPA6H が 20 ~ 25 mA 消費し, OpenLog は microSD カードへの書き込みに最大 6 mA 消費するらしい。 これらの合計で最大 31 mA ということになる。 SparkFunPower Cell LiPo Charger/Boosterの効率が約 90% (3.7 V 入力, 40 mA 程度の場合) なので,回路は実質 41 mA 程度を消費しているとすると(この計算でいいのか?), 41 mA から 31 mA を差し引いた 10 mA の消費がどこかで生じていることになる。 Power Cell の効率の計算の仕方や,Power Cell 内部での消費に原因があるかもしれない。 あるいは,ログの記録中,OpenLog は出力端子に 1 kohm の抵抗でつながれた青色の LED がほぼ常時光っている状態なので, そこである程度の電力を消費しているのかもしれない。

追記Gms-g9 を使った GNSS ロガーの話で, SparkFunPower Cell の出力電圧を 3.3V にした方が消費電流が少なそう,というのがわかった。 そこで,この簡易 GPS ロガーでも Power Cell の出力電圧を 3.3V にしてみた。 その結果は,
 ・850 mAhLiPo 電池の場合の持続時間
   1回目:88502 sec (24:35:02) → I = 850/88502*3600 = 34.6 mA
   2回目:85774 sec (23:49:34) → I = 850/85774*3600 = 35.7 mA
となり,消費電流は平均で約 35mA となった。 なんと Power Cell の出力を 5V から 3.3V に下げると,10 mA 以上も消費電流が減ったことになる。 LiPo バッテリーの出力が 3.7V なので,5V に昇圧する時点でかなり消費しているとは思っていたが,ここまでとは…。 Adafruit Ultimate GPS unitOpenLog も 3.3V で働くユニットなので, 最初から Power Cell の出力電圧を 3.3V にしておくべきだった…反省。 これでこのユニットの持続時間が24時間を超えたので,バイクのツーリングにはまったく支障がない,ということができる。

充電に必要な時間は,
 ・420 mAhLiPo 電池の場合:約 1.5 時間 → 充電電流 ~ 280 mA
 ・850 mAhLiPo 電池の場合:約 2.8 時間 → 充電電流 ~ 303 mA
だった。こちらも実用に耐えれそうな時間となっている。

今後,さらに使い込んで,現在使っている Transystem 社製の TripMate850 と比較してみたいと思っている。
いろいろな角度からの写真をみたい方は こちらのサイトを見てください。
OpenLogが光っている動画 (YouTube)

0 件のコメント: