_/_/_/ シンプルメニュー _/_/_/
なんて事はない。
単純に0-5Vのアナログ入力を1023段階に細切れにして数値として記録する。それをRS232Cで繋げたパソコンで取り込むだけ。最大連続データ記録時間はパソコンが扱えるファイルサイズの最大値まで。1分当たり50KB使う計算なので、2GBがファイルサイズ上限だとすると、約699時間=29日間も記録できちゃいます!(笑)
さて、いきなりですが、かかった費用の計算。
メーカー | 型番 | 単価 | 数量 | 合計 |
秋月通商 | PICプログラマーV3.5 | 6700円 | 1 | 6700円 |
PIC 12F675 | 200円 | 1 | 200円 | |
3端子レギュレーター | 200円(4個セット) | 1 | 200円 | |
DCジャック | 100円(4個セット) | 1 | 100円 | |
RS232Cコネクタ | 50円 | 1 | 50円 | |
8ピンICソケット | 100円(10個セット) | 1 | 100円 | |
ピンソケット | 50円 | 1 | 50円 | |
コンデンサ 16V47uF | 15円 | 1 | 15円 | |
プリント基板 | 60円 | 1 | 60円 | |
タクトスイッチ | 10円 | 1 | 10円 | |
その他 | 200円 | |||
合計金額 | 7685円 |
てな感じで、PICプログラマーを除いたら1000円かからなかった(笑)
それなりに精度も出るし、分解能も実用上十分に高い。
こんな感じに完成。
ソケットに乗っかってる赤い基板(写真上部)は3軸加速度計。車で言うと、前後方向の加速度と左右方向の加速度、さらにZ軸もあるため傾きも計測できる。
次に簡単な仕様を。
アナログ入力 | 3ch、0〜5V |
サンプリング間隔 | 1秒当たり46回 |
電源電圧 | 8〜20V |
本体サイズ | 75mm x 50mm x 15mm |
出力ポート | RS232C |
対応OS | Windows他いろいろ使えるはず(^^; |
通信速度 | 9600bps |
その他 | USB-シリアル変換での接続も可能 |
そのうちケースにでも収めて使ってみるかも。
さて、一台目がそれなりに結果を残してくれた。
実際問題、46回/秒(21ms/回)というサンプリング間隔はオーバースペックなほど短い。これの1/3程の間隔でもGRIDのLM-1並ということ。つまり、単純にアナログポートをもっと増やしてやれば、12回/秒程度のサンプリングは簡単に実現可能。
ということで、二台目の設計。
CPUとも言える心臓部には「PIC 16F88」を採用。A/D変換に7ポート使えるので、それらはそのままアナログ入力に。残り3ポートをデジタル入力とログ開始トリガ用のスイッチ、リセットスイッチに割り当て、2ポートをRS232Cの通信用に、動作周波数は外部のオシレータを使って20MHzとする。
PIC16F88 | 動作周波数 | 20MHzに設定 |
アナログポート | 7ch | |
デジタルポート | 3ch | |
ピンアサイン | 1 | アナログ入力 |
2 | アナログ入力 | |
3 | アナログ入力 | |
4 | リセット | |
5 | Vss | |
6 | デジタル入力 | |
7 | デジタル入力 | |
8 | シリアル送信RX | |
9 | デジタル入力 | |
10 | トリガスイッチ | |
11 | シリアル受信TX | |
12 | アナログ入力 | |
13 | アナログ入力 | |
14 | Vdd | |
15 | CLK0 | |
16 | CLK1 | |
17 | アナログ入力 | |
18 | アナログ入力 |
これで、アクセル開度、空燃比、吸気音、エアフロ電圧、O2センサ電圧、回転数、車速、インジェクタ開弁率、その他、様々なデータ収集が可能になる。はず!(笑)
乞うご期待!!??
というわけで2台目、とりあえずできあがり!?
実走テストでノイズも乗らず、精度も良く、なかなか良好な結果を残した。以下mixiの日記抜粋。
まずは仕様変更。
スタートボタンを押しながら電源オン(或いはリセット)で、PCとの通信(RS232C経由)を57,6kbpsに、なにもせずに電源オン(或いはリセット)で115.2kbpsの通信速度に設定される。
また、電源投入後、スタートボタンを押すごとに、
「精度重視の最速ログモード」
↓
「データ量重視の省エネログモード」
↓
「ロギング停止」
となるようにプログラム。
最速モードでは1秒当たり223回のサンプリング。
省エネモードでは1秒当たり30回のサンプリング。
さてさて、最速モードはデータ量が大きくなり過ぎるし、そこまで精度を出しても無駄ばかりなので結局使えない(^^;
省エネモードでも十分すぎるサンプリング数だね。
てことで、車に積み込み実走テスト。
ん〜、思ったよりもいい感じ。
ノイズの影響もないし、10bitのA/D変換は十分な精度。
部品代だけで言えば2000円くらいか?
スゲー使える。
今後、設定項目を少し増やすか、SRAMでものっけてPCレスのロギングに対応するか、LCD繋げてリアルタイムで表示できるようにするか・・・
要検討。
自作データロガー、細かく分けるとモードが4つ。
PCへデータを送る速度が高速・低速の2つ。
ロギング動作として高速・低速の2つ。
(実際はもっと増やせるし、サンプル用に使ってたりする)
前者は電源オン時(或いはリセット時)スイッチが押されてるかどうかで判別するから分かりやすいけど、後者は分かりずらかったりする。
LEDを制御して点滅させるとかでモードを判別すりゃいいんだけど、チカチカとあまり見た目によろしくない。
てことで、無駄に7セグLEDを使い、動作モードを数字で表示してみることに。
とはいえ、PIC16F88ではI/Oが計16本で、7本がA/Dコンバーター(センサ入力)、2本がシリアル通信用、2本が外部クロック供給、リセットに1本、LED用に1本、トリガスイッチに1本、と使うと残りは2本。
たった2本じゃ7セグLEDの1セグ分しか動かせない・・・
さてさて、どうしたもんかね。
やっぱりI/Oのもっと多いPIC使うしかないのかな。。。
しばし試案の後、PICとPICをつなげて表示部分を分割すればいいんじゃねぇ!?
てことで、手持ちのPIC16F84Aで7セグの制御を担当させることに。
で、ロガー部分とは1本の線で結ぶ。
要は簡単なシリアル通信をさせるという設計。
データロガー部分から8bit分のデータを流し、7セグ制御部分で受け取る。で、各ビットを見てフラグが立っているかどうかで、現在のモードを判別し、それを元に7セグLEDを駆動。
ん〜、このシリアル通信をさせる制御には苦労させられた。
そもそも、最初に使ったPICが壊れてたことが更に事を深みに導く原因に。
それから、実際データの送受信にあまり長い時間はかけたくないので、100μsecごとに1bit送出、というタイミングにした。8bitは1msec以内に7セグ制御部分に受け渡せる設計だ。
最終的には写真のようにモードに対応した数字を表示させることで、パッと見で分かるようになった。
めでたしめでたし。