OpenLog |
シリアル-SDロガーといえば、2年ほど前からOpenLogというプロジェクトの製品版を使っている。
オリジナルのOpenLogはATmega328Pベースだけど、最近ふと思ったのが、もうちょっと余裕のあるATmega644Pを使えば、RXバッファ用のRAMも増えるし、ロガーと言いつつソースにJPEGカメラのコマンド操作を追加すれば、SparkfunのJPEGトリガーみたいに使えるんじゃないかという点。
その観点でググってみると、同じコンセプトのSDLoggerというプロジェクトが2年前からあって、SeedStudioから販売されていたことを知った…。
(人は見たいものしか見えないんだなあ…)
(人は見たいものしか見えないんだなあ…)
ATmega328Pで取りうるRXバッファ量が少ないという懸念は、2年前の使用感を引きずっていただけで、本家OpenLogの最新のファームウェア(v3.1)を見たらだいぶチューンナップされていて、昔みたいに連続書き込みで問題が起きることは無さそうだ。
RAMもROMもギリギリまで使い込まれている上に、Arduino1.0環境で互換機として書き込みができる。 もし古いファームウェア(コマンドで確認できる)を持っているなら、本家のサイトの説明を読んで最新のものを書き込んでみるとよいだろう。
ということで、お手軽なOpenLogと比較すると、SDLoggerはそのままOpenLogのスケッチが走る上位互換機として、余ったROM/RAMとI/Oを使って何か特化したロガーを作ってみるのに向いてそうだ。
とりあえず、手持ちの部品でSDLoggerを組み立ててみた。
・ATmega644P(DIPなら秋月で入手できる)
・14.7456MHzの水晶発振子
・14.7456MHzの水晶発振子
・microSDカードソケット
・コンデンサ少々
があれば作ることができる。
水晶発振子はちょっと特殊な周波数だけれど、シリアルのボーレートを精度よく出すために選択されているっぽい。たまたま手元のジャンク基板についていたものを取り外して使用。
水晶発振子はちょっと特殊な周波数だけれど、シリアルのボーレートを精度よく出すために選択されているっぽい。たまたま手元のジャンク基板についていたものを取り外して使用。
ハードウェア自体はArduino互換機として動けば良いので、水晶を16MHzにして、今ならArduino1.0に対応した定義ファイル(644p用定義とブートローダー)を使うという手もある(未検証)。
Arduino MEGA+SDシールドでもいけそうだ。
Arduino MEGA+SDシールドでもいけそうだ。
ちなみにOpenLogの製品は16MHzで3.3V電圧動作という設計だが、本当はATmegaの駆動電圧と動作周波数的には規格外となる。(普通に動いちゃうけども)
動作保証ギリギリの環境下でも安定動作させたいので、SDや周辺機能にレベル変換ICを挟んだ5V動作版を作ろうかと思っている。
動作保証ギリギリの環境下でも安定動作させたいので、SDや周辺機能にレベル変換ICを挟んだ5V動作版を作ろうかと思っている。
ボード自体は、いつものようにUEW線で配線。
いつもの 4.5cm角のユニバーサル基板に組んだ |
OpenLog V3.1を書き込んで動作させているところ。 |
安定した書き込み性能を出すにはSD/SDHCカードをどうフォーマットしたかも重要となるらしいので、おすすめされていた方法として、SDアソシエーションが提供しているSDFormatterを使ってみた。
OpenLog同様、デフォルト9600bpsでGPSのNMEAを記録中 |
プロジェクト自体は、RAMの範囲内で任意のHWシリアルバッファを用意できるライブラリなど、参考になるソースが多い。
具体的に何を追加で載せるかについては、RTC+センサでタイムスタンプ付きCSVデータの保存や、JPEGカメラの制御と写真の保存などで検討中。
写真はRTC代わりに、Fastrax社のUC430をレイアウトしてみたところ。 |
その後、基板に起こした。
Morikawa Log http://blog.kemushicomputer.com/2013/05/sdlogger-based-datalogger-morikawalog.html