まず最初に、GPS loggerとはどんなものか簡単に説明します。
おおざっぱには、自分の移動した記録を残すものでして、人工衛星からの電波
によって自分の位置を割り出し、そのときの時刻と位置を記録媒体(SD Card)
に逐次記録していくものです。後から記録を見れば、いつどこに自分がいたか
わかります。
何に使うかと言いますと、滑空機/飛行機に載んで飛行航跡を記録することで す。飛行(非行?)記録をとることで、ちゃんと計画通りに飛べているか(飛行機 の場合)、その日の気象条件はどうだったか(滑空機の場合)といった反省材料 とします。
ただ、機内持込用の小型省電力のものを一回で作るのは大変ということで、今 回は前段階として、小型化と電源の心配をあまり考えなくてよい自動車積載用 を製作します。とりあえず、ドライブ記録に使おうと思います。
蛇足:
小型省電力のGPS loggerとして、市販品ではGARMINのGekoやeTrekなどがあります。
ただ、この手のものは数秒に1回記録で、記録点数も1万点程度となります。
へたくそな私の場合、滑空機で飛ぶときに旋回の半分は上昇気流帯、半分は下
降気流だったりするわけで、うまく上昇気流帯に入っていたか後から反省する
には1秒ごとの記録を残したいという要望があります。
そのため、市販のものではどうももの足りず、どうせなら自作しちゃえ…とい
う流れになっています。
GPSの電波は1575MHzです。GHz帯の受信器を作るなんてことは素人にはやっ てられません。ということで、受信器部分は既製品を使います。
今回用いた受信器は、JRCのCCA-450JZ という製品で、楽天市場のSPAさんで以前購入したものです。大まかな仕様だけ挙げておきます。
まず最初に注意事項です。車載の電子回路を作る場合は、必ずヒュー
ズなどの過電流防止機構を付けてください。
自動車用の鉛電池は、エンジンを回せるぐらいですから、非常に強力です。短
絡させると簡単に火事になります。
写真のようなヒューズ入りのcigar plugがお手軽です。
今回製作の上記のGPS受信器がGPS loggerに必要な機能の大半を受け持ってく
れるため、回路構成は単純です。最低限必要な構成要素は、GPS受信器、MPU、
SD Cardとそれらに電力を供給する電源回路です。これらに加えて、状態表示
用のLEDを付けています。
回路図は回路
図PDFを参照してください。左側が電源回路、右側がMPUとSD Cardになり
ます。VccとGNDの配線は回路図上では省かれていますので、もしこのとおりに
作る場合は注意してください。
まず、MPUに要求される用件を挙げます。
電子工作では、AVR、PIC、H8あたりが有名どころですが、今回はRenesasのR8C/15 を使うことにしました。 20pinで、SPIとUARTが1chずつ、大電流IO portが4ch、ROM 16kBにRAM 1kBと、 今回の条件にぴったりのMPUです。
入手性ですが、R8C/15はDIPのものがSunhayatoからSR8C15CP として販売されており、今回はこれを使用しました。 Sunhayatoの通販でも購入でき ますし、秋葉原や日本橋の電子部品屋さんをまわれば大抵置いてあります。 また、表面実装のものが欲しければ、大抵の品種はELISshopで購入できます。
MPU周りの回路を時計回りに簡単に説明します。
今回の回路で実は一番厄介なのが電源回路です。
まずGPS受信器の電源について考えます。車載用を想定するため、入力電圧は 12Vで、出力は上記のGPS仕様から3.3V 140mA(最大)です。 三端子regulatorで済ませても良いのですが、損失が1.2Wであり、実際に試し てみるとかなり元気良く発熱します。 あまり熱くなるのも好ましくないため、以前まとめ買いしてあった、LM3578を使って switching regulatorを作りました。LM3578のdatasheetにしたがって、発振周 波数80kHz、最大200mAを目安にして回路定数を決めてあります。
GPS空中線用の5V 30mAは、電流が小さいことと雑音を抑えたいこともあって、 三端子regulatorで構成しています。特に説明の必要も無いでしょう。
また、C14の電気二層capacitorがGPS状態保持用の補助電源電源になります。
最後にMPU用の電源で、これがまた厄介者です。
SD Cardに書き込みを行っている途中で電源が切れてしまうと、書き込み内容
が壊れるため、書き込み終了を待ってから電源を切らなければなりません。
とは言っても、車載の12Vは自動車のエンジンを止めれば止まってしまうので、
12Vが落ちてもしばらくMPUとSD Cardが動作できるように作る必要があります。
今回の電源回路では、電源断後はC41に貯っている電力を使ってSD-Cardに書き
込みを行う構成にすることで、突然の電源断に備えます。
実際の動作を説明します。
電源onの時は、入力電圧が9Vを越えるとQ42、Q41、Q43がonになります。
Q41がonになると、LM3578が動作を始め、R8C/15とSD Cardへの電源供給を開始
します。
R8C/15は起動したらすぐにP16をHにして、Q44をon状態にしておきます。
電源off時は、入力電圧が9V以下になるとQ43がoffになり、R8C/15のP17が L->H になります。 R8C/15は電源断を検知して、SD Cardへの書き込みの処理を行います。 書き込みが終了したら、R8C/15のP16をH->Lとすれば、Q44とQ41がoffにな り、MPUへの電源供給が止まります。
今回は手持ちのLM3578を使っていますが、
新日本無線のNJM2360の方が入手性がよいと思います。秋葉原の千石電商
や若松通商、大阪日本橋だとデジットあたりで扱っています。
LM3578と回路定数は変える必要がありますが、同じような使いかたができます。
まずは完成した写真から。 Digital video cameraの電源と入れ物を共有するために、GPS loggerは電源部 とMPU基板に分けて2階建てにして実装しています。 基板を2分割としたため、基板上の実装密度は低めになり、かなり余裕を持っ た部品配置となっています。
基板はSunhayatoの片面感光基 板10K を使っています。 実装の都合で、この基板を2枚に切り分けて、50mmx75mmの大きさで使っていま す。
実装上の注意点として、車載用ということで振動に弱い部分への配慮すること
と、箱へ取り付けたときの干渉に気をつけることです。
振動対策としては、L3、L4のinductorをエポキシ樹脂で固めてしまって補強す
ることがあげられます。
また、CN_ISPはfirmwareの書き換えに必要ですので、基板を箱から取り外さず
に使える位置に配置するようにしましょう。
回路図と写真をよく見比べてみると、C14の電気二層capacitorがついていませ ん。 実は、試作してみてから必要なことがわかり、基板を作りなおしています。お まけに、2回目の基板は写真を撮り忘れたため、C14なしの基板写真です(恥)。
入れ物はタカチ電気工業の MB-3を加工して使っています。 基板の取り付けは、3x50mmのscrewを底面に固定して、そこに基板をnutで固定 してあります。 基板製作の時と同様に、振動対策には気をつかって、nutには全て緩み止め剤 を塗布します。
外装は、自動車の内装色にあわせて黒色のエンジンウレ タンで塗装後、研ぎ出して鏡面風味にしています。 以前、ラッカースプレーで塗装したものを夏場の車内に放置したところ、塗装 が融けてひどい目にあったため、それ以降、車載物はウレタン塗装にしていま す。 ラッカーに比べると手間はかかりますが、見た目という観点でもウレタン塗装 は満足度が高いです。
Firmwareは、download.hanabusa.net に置いてあります。 最新の日付のmpu_YYYYMMDD.zipを持っていってください。Licenseは全て修正 BSD license(宣伝条項なし)です。
zipの中にはGPSに関係ないものもいろいろ入っていますが、車載用GPS logger で使っているものは以下の通りです。
これらのsource codeは、GCC-4.1以降でcompileできるように書いてあります。 Compile/buildを行う場合、GNU make、m32c-elf-binutils、m32c-elf-gccを用 意してください。
KPIT GNU Tools からWindows 用のGCCを取得できます。
"configure --target=m32c-elf"して、自分で用意してください。 MPUのFlash ROM書き込みにはR8C Programmiertoolを使うことができます。
gps12V.cを見ていただければわかるように、簡単な処理しか行っていません。 基本的な動作は、UARTから読み込んだNMEA0183形式の文字列をnmea0183.cで解 析して、gpxwrite.cでGPX形 式にして書き出すだけです。
起動時処理はgps12V.cのinit_all()の内容になります。
まず、電源on直後の電源電圧が不安定な状態で低電圧検知して、すぐに電源
offとならないように、安定するまで2秒間何もせず待ちます。
たぶん100msも待てば十分でしょうけど、急いで起動する必要も無いので2秒に
してしまっています。
続いて、LEDの点灯状態の設定、UARTやSD Cardの初期設定を行います。
SD Cardが入っていない場合や、FAT16の読み書きができない場合は、LED点滅
で知らせます。
自動車のcigar socketから電源を取る場合、ignition keyをACCまで回した段
階で一度電源onとなります。
続けてエンジンを始動しますが、このときにいったんcigar socketの電源は
offとなり、エンジンが回り始めて再度電源onになります。
電源onで自動的に記録開始という仕様にしてしまうと、エンジン始動前の無意
味なlogが記録されてしまいます。
これを避けるために、エンジンが回っていない状態を判断する必要があります。
1つの解として、電源電圧にのっているrippleをみる方法があります。
ただ、filter回路を組んだりするのもめんどうだし、今回はせっかくGPSがあ
るので、動き始めを検知したら記録開始、としています。
(gps12V.cのcheck_start)
航跡の記録動作は、gps12V.cのgps_recv()とmain()内のdo{}while 部分になり
ます。
UARTから文字を読み込む->nmea0183.cに渡す->1秒分の解析が終わった
らSD Cardに書き込む、という処理を繰り返しています。
同時に、受信状態にあわせてLEDの点滅を切り替えています。
Timerで点滅させるのが王道ですが、手抜きしてUARTから受信した文字数に応
じて点滅させています。
電源回路の項で説明したように、cigar電源の電圧が下がるとP17がL->Hと
なります。
mpuは常にP17の状態を監視して、電圧低下を検知したら終了処理に移ります
(main()のwhile( pwr_stat() )部分)。
実際の終了処理は、gps12V.cのterm_all()内で、まず省電力のためにLEDを全
て消灯します。
続いて、FATへの書き込みをして、そこまで終われば一安心です。
最後に、LEDを点灯状態にしてから、P16をH->LとしてMPUへの電源供給を止
めます。
LEDを点灯するのは、書き込みが完了したことを知らせるためと、消費電流を
増やしてC11とC43に溜っている電荷を抜くために行っています。
正常に動作すれば、SD Card上に"/gps/trk00001.gpx"といった名前 のGPX形式の航跡記録が できます。 GPX形式自体はかなり汎用的なもので、大抵の地図softwareで読み込むことが できます。 国産のものではカシミール3Dあた りが有名でしょうか?
GPS loggerで記録した航跡をGoogle mapへ表示してみました。 経路は千葉県我孫子市の国道6号線から、成田の温泉大和の湯までです。 Google mapに1秒ごとの軌跡を描くと激し く重くなるので50点ぐらいになるように間引いています。
そのうち書きます。