自転車走行ロガー 制作:2006-01-13〜

一人で走っていると昨日より速く走っているのか、遅く走っているのかわかりません。前回の走行時の速度を記録しておき、前回は今走っている位置よりどれだけ前「後ろ」を走っていたのか表示する装置を作ってみることにしました。その距離を見ながら前回の自分との競争をするわけです。同じコースでないと比較の意味がありませんがたいていはいつも同じコースを走ります。


回路図をEAGLEで書いて、基板を作ります。実験基板なので全て自動配線です。4本未配線になりましたが後でハンダ面に配線します。8×5cm程度です。ちょっと大きすぎますが小型化は後回しです。


回路図

走行データはタイヤが1回転するのにかかる時間を記録することにします。この時間はシリアルEEPROM(フラッシュメモリー)に記録します。タイヤの周長は約2mです、時間は2バイトで記録するので128KバイトのEEPROMなら 128×1024[バイト]/2[バイト]×2[m]=131072[m]記録できます。今回分を記録しながら、前回分を読み出すので実際はこの半分の距離しか記録できません。1日で65km走ることはよくあるので1回転おきに記録するなど工夫が必要になります。最大速度は時速100km(もちろん下り坂です)を超えることはなく、最低速度も時速5kmを下回ることはありません。この範囲内で十分な精度を確保できるように2バイトを使います。時速100kmでもタイヤの回転数はきわめてゆっくりです。このときのタイヤ1回転に要する時間は 2[m]/(100[km/h]×1000[m]/3600[秒])=72[ms] となります。EEPROMへの書き込み待ち時間の5[ms]も十分確保できそうです。

ログデータをパソコンに保存しておけるようにRS232Cインターフェースも付けてみました。小型化するならRS232C部分は本体と別体としてしまうことも出来ます。表示は3桁で単位はメートルです。前回の自分を999[m]も引き離すのは無理なので3桁で十分です。

メーカー製のスピードメーターはこのようにスポークに磁石を取り付けて、これをセンサーで検知することにより速度を表示する仕組みになっています。光学式が使用されないのは汚れに対して強いからだと思われます。上の回路図ではデジタル回転計同様の光学式センサーを使用していますが、磁気センサータイプも設計してみることにします。


ホール素子の使い方の確認のためこんな本を買いました。磁力を計測するための回路が掲載されていましたが、単なるON/OFFのスイッチとして使う場合の回路例がありません。ちょっと失敗です。ホールセンサーにはホールICというものとホール素子という物があり、
 ホールIC:ホール素子とオペアンプを内蔵しON/OFFのスイッチとして使用するようにした物。3本足。
 ホール素子:磁力センサーのみの単体の素子。4本足。オペアンプと組み合わせて使用する
ということなので、今回の用途のためにはホールICが適しています。ホールICはそれ単体でデジタルICとして機能できるので、わざわざプリント基板を作るほどの物ではありませんでした。ホールICは¥100、ホール素子は¥50程度で購入できます。


図書館で借りてきました。こちらのほうがわかりやすく解説されています。表紙のデザインもホール素子の回路です。東京電機大学出版局の本は応用の利く知識の習得が出来る物が多いのでお勧めです。


基板を作りました。GNDのランドとべたパターンとの隙間もきれいに出ています。右はセンサー基板、ホットボンドで固定する予定なので取り付けしろがありません。大きいのがフォトリフレクター用、小さいのはホールセンサー用。ホールセンサー用は1つ予備を作りました。ピン間を抜くときのランドは幅が狭いので穴あけはいきなり目的のサイズではなく0.6mmで下穴を開けておかないとうまくいきません。


現像剤のこの結晶はとても鋭いのでよく溶かさないとマスクパターンに傷を付けてしまいます。


秋月電子で部品を購入。今度のLEDは個々は3つが一体になった物。奇妙なほど足が長い。


基板が出来ると、あっという間に完成します。ソフトは簡単なのでmikroBASICで書くことにします。2Kワード以内に納められるか挑戦です。

走行データをPCにダウンロード/アップロードする機能があればいろいろ面白いことが出来そうです。
 ・最高区間タイムを合成して、最速の自分と競争。
 ・データを1%増にして、1%早い自分と競争。
 ・複数回のデータをメモリー(現フラッシュメモリーの容量ではちょっと無理)して、その中での自分の順位を表示。
PC側のソフトは手抜きするつもりでしたが、ここまでやるならメモリー管理ツールが必要です。

これがホール素子です、左がホール素子(東芝 THS−119 ¥50)、右がホールIC(松下 DN6851−A ¥60)共に千石電商で購入。データシートを見ると消費電力が大きく5mAほど流れるようです。ボタン電池での駆動は無理みたいです。メーカ製スピードメーターのセンサーは磁石を近づけるとカチカチ音がするのでリードスイッチを使用している物と思われます。生産コストの問題でリードスイッチを使用していると思っていたのですが、どうやら消費電力のほうが、その理由のようです。最終的には小型、低消費電力化するつもりですが小型化より消費電力を抑えるほうが難しそうです。もっとも消費電力を抑えないと電池が大きくなって小型化も出来ません。


ホールICの消費電力を実測してみました。やはり大食いです。3.3mAも流れます。電源電圧は5Vです。最近のLEDは1.0mA流せば十分明るく光ってくれるので3.3mAは流れすぎです。自転車は急加速、急減速が出来ないので、必要なときだけセンサーをONにするようにすれば消費電力を抑えられそうですが、今回の回路はそこまで考えていないのでこの方法はしばらくおあずけです。
自転車のホイールに付ける小さな磁石では4mm程度の距離に近づけないと反応しませんでした。ちょっとぎりぎりです。センサーの向きと磁石の極の方向合わせをうまくやらないと、磁石が遠ざかったにもかかわらず、センサーからの信号がONになりっぱなしになるので、取り付け角度の調整も神経質にやらないといけないようです。


ソフト開発開始です。先ずはLEDの点灯から。昼間の視認性を良くするために電流を多めに流してLEDを明るく光らせてみましたが、これだけで100mA近く流れています。電源は単4電池4本の予定です。段差などを乗り越える振動で瞬間的に電源断したときのために小さな電解コンデンサーを入れておきましたが、これだけ電流が流れると容量不足です。


3桁のLEDには距離を表示するつもりでしたが、距離だと坂道の勾配が変わったりするポイントで追いついたり離されたりするので、距離ではなく時間差を表示した方が良さそうです。距離表示のほうが、追いついたときに尻に食らいつく感じがして良いので、スイッチの一つをモードスイッチにして「距離モード」「時間モード」を切り替えられるようにします。プログラムの造りは「時間モード」のほうが簡単なので、とりあえず時間モードで作って、後から距離モードを追加することにします。

3つあるLEDは多すぎると思いましたが、いろいろ考えると3つ以上ほしくなります。機能としては...
 ・距離が詰まっている、離されている、ほぼ同速度で走っている(3色LEDにしたら面白そう)
 ・タイムが詰まっている、離されている、ほぼ同速度で走っている
 ・センサーが磁石に近づいたとき点灯、離れたとき消灯
 ・EEPROMにデータを記録中、記録停止
 ・速度モード、距離モード

スイッチも
 ・計測開始、終了
 ・速度モード、距離モードのモード切替
 ・区間タイム記録(毎回走るたびに全く同じ経路で走れないので正確に比較するために必要。特にPCにダウンロードした時)
 ・ダウンロード開始、ダウンロードキャンセル

このあたりの機能は実走しながら煮詰めていこうと思います。

開発はmikroBASICを使用していますが、シリアルEEPROMからの読み出しではまってしまいました。使った物はATMEL製のAT24C1024。プログラムはこんな物。mikroBASICはまだサンプルプログラムが掲載されているWebサイトが少なくて、はまるとやっかいです。

'===============================================================================
' 24C1024 serial eeprom random READ
'===============================================================================
sub function ser_eep_read(
    dim dev_addr  as byte,
    dim addr_high as byte,
    dim addr_low  as byte
  ) as byte
    I2C_Start
    I2C_Wr( dev_addr  )
    I2C_Wr( addr_high )
    I2C_Wr( addr_low  )
    I2C_Repeated_Start
    I2C_Wr( dev_addr or 0x01 )
    result = I2C_Rd(0)
    I2C_Stop
end sub

読み出し信号はこれ。信号をロジックアナライザーで計測してみました。99%うまくいっているようなのですが一番最後がなんだか変です。


これはNC翼型スチロールカッターのプログラム(Wiz-Cで開発)の信号。周波数が違うので信号の間隔が違ってますが相似形であればOKです。こちらは正しく動いているので、これと比べてみるとやはり一番最後が変です。上の物には句点に相当する「これで信号は終わり」というのがありません。


こんなふうに、ちょっと待ち時間を追加したら動くようになりました。

sub function ser_eep_read(
    dim dev_addr  as byte,
    dim addr_high as byte,
    dim addr_low  as byte
  ) as byte
    I2C_Start
    I2C_Wr( dev_addr  )
    I2C_Wr( addr_high )
    I2C_Wr( addr_low  )
    I2C_Repeated_Start
    I2C_Wr( dev_addr or 0x01 )
    result = I2C_Rd(0)
    Delay_us(100)
    I2C_Stop
end sub

これがうまくいった信号。100マイクロ秒はちょっと長すぎたみたいで間延びしてますが、とりあえずOKです。1カ所「ひげ」が出てますが、これは計測サンプリングタイミングの問題です。本来は全てこの「ひげ」があるはずなのですが、計測サンプリング間隔が長いと検知できません。


うまくいったところで、止めていた7セグメントLEDの表示をさせたら書き込みが動かなくなってしまいました。割り込み処理が原因である可能性大です。以下のように書き込みの前後に割り込み禁止/許可命令を入れたら動くようになりました。Delay_us(20)というのはI2C_Stopサブルーチンから戻ってきた直後には、まだSTOP信号が出力されていないのでそれを待つ時間です。実際はもっと早いのですが余裕を見て20マイクロ秒にしてあります。Delay_ms(5)の部分まで割り込み禁止にするとLEDの表示がちらつきます。一方、読み込みのほうは割り込みがかかっても問題なく動きます。

sub procedure ser_eep_write(
    dim dev_addr  as byte,
    dim addr_high as byte,
    dim addr_low  as byte,
    dim data      as byte
  )
    INTCON.GIE   = 0
    I2C_Start
    I2C_Wr( dev_addr  )
    I2C_Wr( addr_high )
    I2C_Wr( addr_low  )
    I2C_Wr( data      )
    I2C_Stop
    Delay_us(20)
    INTCON.GIE   = 1
    Delay_ms(5)
end sub

RS-232C接続に取りかかりました。コンパイル時に親切なメッセージを出してくれるところはGOOD。PICのUSARTの仕様がわかってないと、なぜ115200bpsが125000bpsに強制的に変更されてしまったのか不明ですが...。それはいいのですが文字化けします。


上のプログラム、受信した1バイトデータをそのまま送り返すプログラムなのですが、通信速度が速すぎるのがまずいのかと思って9600bpsで試したのがこの波形。受信したデータが上の波形。それを送り返した物が下の波形。形が同じじゃありません。なぜ???


!! そんなモンです。いつも20MHzのセラロックを使っているので20って入れてました。巨大な12.8MHzの水晶発振モジュールが目に入っていたはずなのに。しかも水晶発振モジュールに12.8000MHzて印刷までしてあるのに。1日を無駄に過ごしました。


とりあえず入出力廻りのテストが完了したところで、データを取るための初期バージョンの開発をします。一番最初に走るときはデータがないので距離差やタイム差は表示できないので、単にスピードを表示するようにします。つまり、単なるスピードメーターになります。デジタル回転計同様、今回も16ピットのTMR1を使うことにします。とりあえずメモリーの節約は後回しにしてプリスケーラは1:1にします。プリスケーラが1:1だと時速5km/hの時、TMR1は71回オーバーフローするので、そのまま無加工で書き込むとタイヤ1回転につき3バイト消費します。

時速[km/h]=タイヤの1時間の回転数[rph] × タイヤ1回転で走る距離[km]
       =1時間のタイマーカウント数[count/h] / タイヤ1回転のカウント数[count] × タイヤ1回転で走る距離[km]
       =1秒間のタイマーカウント数[count/sec] × 3600[sec/h] / タイヤ1回転のカウント数[count] × タイヤ1回転で走る距離[km]
       =12.8[MHz]×1000000[Hz/MHz]/4[cyc/count] × 3600[sec/h] / タイヤ1回転のカウント数[count] × 2.090[m] / 1000[m/km]
       =24076800 / タイヤ1回転のカウント数[count]

2.090[m]はタイヤのサイズが700×19Cの時の物です。700は27インチ、19Cはタイヤの幅がだいたい19mmという意味です。タイヤを履き替えるとタイヤ周長が変わってしまうので欲張ればセットアップ機能も欲しいところです。プログラムを2kワード以下に納めるのは難しくなってきました。...ほぼ不可能です。

シリアルEEPROMに書き込んだデータが、だだしく読めていないようなきがします。データシート見てみるとAT24C1024の書き込み待ち時間は最大10msだそうです。5msでは時々書き込めていないみたいです。だだしく読めていないのではなく正しく書き込めていませんでした。こんなんでまた半日を無駄にしてしまいました。


市販のスピードメーターと並べで動作させてみましたが、同じになりません。センサーの位置が違うので単純比較できませんが、加速しているときは市販品のほうが遅く表示されて、減速しているときは市販品のほうが速く表示されます。等速で走っているときはほぼ同じようです(同じでなければいけません!!)。高速で走っているときはめまぐるしく値が変わり見づらくなるので市販の物は何らかのアルゴリズムで見やすくしている物と思われます。
スピードメーターモードでの表示 <-動いているところ

電源は単4電池4本です。これでも計算上7時間しかもちません。5本のピンはプログラム書き換え用のICSPコネクター。右はそのアダプター。


本体はゴム止め。センサーはケーブルをホットボンドでFRP板に接着してそれをタイラップでフォークに固定しています。センサー用の基板は使いませんでした。


ちょっと走ってきました。縦軸が時速、横軸がタイヤの累計回転数で、タイヤ周長が約2mなので2倍するとほぼ距離に等しくなります。速度が出ているのは車道を走っているときです。何度か停車していますが時速5km以下は記録しないようにしていたので停車した場所がわかりません。時速5km以下でもタイヤ1回転毎に記録するように変更します。


停車したとき0を記録するように変更しました。2度停車しているのがわかります。横軸はEXCELの式をつかってメートル表示にしました。このグラフは片道2.7kmの通勤経路です。一端電源をOFFしてしまうと、メモリーの先頭から上書きされてしまうので片道分だけです。大食いなので止まっているときは電源を切っておきたいので、追記モードが必要です。プログラムメモリーも70%使用済みです、使い切ったらPIC16F873から2倍のメモリーがあるPIN互換のPIC16F876に載せ替えます。7SEG_LEDは昼間だと若干暗いので、あと2倍程度電流流した方が良さそうです。逆に3つのシングルLEDは昼間でも明るすぎるくらいです。


bicyclelog.zip へのリンク <−基板レイアウト&回路図(EAGLE) 回路図のPDFは上の方に貼り付いてます。



小型版の構想(メモしておかないと忘れるのでここに書いておきます)

・バッテリーは充電式のニッケル水素電池を使用。単5もしくは単4×4本にする
 ->単5は没にします。最大計測距離136km記録する前に電池がなくなるので
・充電式バッテリーなら節電の必要性ないのでLEDのままでいく 出来ればもうちょっと数字が大きい方がよい
・速度表示の時は下1桁が小さい方が見やすい
・大きさは現在の半分(上から見た大きさ)にする
・PICは28ピンだとちょっと不足なので40ピンのPIC16F877にしよう。DIPだと大きいのでフラットパッケージの物を使う ICSPコネクタ必須
・スイッチは4つ欲しい
・ちょうどいいサイズのケースはなさそうなので削りだしで作ってしまう方が簡単そう
・メモリーは1Mビットの物を3つ使用する(豪華!! 力業!!) 最大計測距離136km
・電池切れ警告灯が欲しい
・上り坂の一番下から「よーいドン」で競争したいとき、それまでの距離差、時間差を暫定的にゼロにするスイッチが欲しい
 前回のラップタイム記録位置に現在地をシンクロさせる機能。スイッチ1個追加。スイッチだらけ。
・タイヤ周長はPIC内蔵のEEPROMにセットしよう。
・ついでに磁石はもっと小さくて薄っぺらいものにしよう。ネオジウム磁石ならもっと小さくなるはず。市販品は不細工です。

  計測モード時 ダウンロードモード時
SW1 ラップタイム記録
ブレーキ付近にスイッチが欲しい
ダウンロード開始(2秒以上押す)
SW2 表示モード切替
ブレーキ付近にスイッチが欲しい
アップロード開始(2秒以上押す)
SW3 ダウンロードモードへ切り替え(2秒以上押す)
追記モードへ(2秒以内に離すと)
追記モードの解除は電源をOFF->ON
計測モードへ切り替え(2秒以上押す)
SW4 輝度調整 10段階程度
節電モードへ(2秒以上の長押しで計測信号以外のLED全消灯)
アップロード/ダウンロードキャンセル
SW5 シンクロスイッチ(上に書いた物) 未定


  LEDの意味と色 解説
LED1 計測モード ダウンロードモード 電池切れは点滅で表す
LED2 センサー接近 センサー非接近 ダウンロードモード   計測モード中はセンサーが磁石に近づいたときだけピカる
LED3 ■■■■■■■■■■追いついている
■■■■■■■■■同じペース
■■■■■■■■■■遅れている
    距離、タイムが詰まっている/離されている程度を
LEDバーアレイの点灯数で表す
LED4 距離モード タイムモード 速度モード ダウンロード中 アイドリング中 距離モードの時点灯
LED5 距離モード タイムモード 速度モード アップロード中 アイドリング中 タイムモードの時点灯



重さは電池込みで102g


構想通りの小型版をEAGLEで作りました。50×48mmサイズに収まりました。基板の裏表両方に部品を配置するとEAGLEのオートルーターはものすごく時間がかかるようになります。232Cインターフェース部分は別基板です。


100%自動配線です。PICを中心に放射状に部品を配置しないと配線しきれなくなります。操作のしやすさ、見やすさと、配線のしやすさのバランスを取らないといけないので、レイアウトを決めるだけで疲れ果ててしまいました。黄色い部品は裏面配置です。抵抗とトランジスターも全てチップ部品を裏面に配置しています。


PIC16F873のメモリー使い切りました。PIC16F876に載せ替えます。


載せ替えました。見た目何も変わりませんがプログラムメモリーの容量は2倍です。PIC16F873とはほぼ完全互換品なのでプログラム変更は全く不要でした。


同じ通勤経路で走って、前回走行時の物と比較してみました。左軸が時速、右軸が秒です。赤い線が前回走行時、青い線が今回走行のものです。緑の線はタイム差です。最終的には1分引き離してGOALしています。550mまでは団地の中を走っている区間で前回は雪が残っている場所をよけながらの走行です。大きなタイム差がついたのはこの区間です。そこから900m地点までは勾配7〜8%の下りでペダルは踏んでいません。ゴール付近の速度がゼロになっているところが勤務場所の入り口で、そのあとは駐輪場までの130mです。今回は前回よりかなりがんばって走っていますが、900m〜2500mまでにつけたタイム差は10秒でしかありません。秒単位のタイム差表示ではちょっと粗い感じです。


タイム差と、距離差をグラフにしてみました。緑の線は上の物同様タイム差です。オレンジの線が距離差です。同じコースを走っているので最終的には距離差はゼロになります。今回同じコースを走りましたが、走行距離に10mの差がありました。雪がある場所をよけただけでこれだけの差が出るので、距離差時間差をゼロにする機能が必要になりそうです。
タイム差のほうは後半詰まっていないのに、距離は縮まっています。最終的には220m差を付けてGOALしていますが、最も距離が開いた地点では440mの差が付いています。
大きく差が付いているときはタイム差、ほぼ同タイムで走っているときは距離差を表示する方が良さそうです。


ダウンロードされたファイルはこんなテキストファイルです。EXCELにコピペして使います。1行目がスタート地点からゴール地点までのタイヤの回転数。16進です。2行目以降がタイヤ1回転にかかった時間です。なので大きい方がスピードが遅いことになります。これを3200000で割るとタイヤ1回転にかかった秒数になります。これも16進です。時速5キロ以下のときは000000になります


9600pbsって結構早いのね
ダウンロード機能のプログラミングは簡単でしたが、アップロードのほうは面倒でした。シリアルEEPROMのランダムライト1バイト書き込むのに10msかかります、一方、RS232Cからは9600bpsでデータが送られてきます、これは1バイトあたり0.83msです(パリティーがどーのこーのというのは無視して)通信速度のほうがEEPROMへの書き込み速度より早いのでデータを取りこぼしてしまいます。したがってランダムライトではなくページライト(PageWrite)する必要があります。ページライトなら256バイトにつき10msの待ち時間ですみます。
256バイトのバッファーをRAMに確保して、たまったら書き出すという処理を繰り返すことにします。実際は256バイトもRAMが確保できないので16バイト程度にします。もっともバッファーを大きくしすぎるとバッファーの中身を吐き出す時間が長くなりすぎてデータを取りこぼしてしまいます。
本来はこんな変な考慮をせずに、フロー制御(受け取る準備ができるまでデータ送るの待ってね...という取り決め)をすればいいのですが、これをやるとPC側のソフトを作る必要があります。現在、PC側はWindows標準のハイパーターミナルを使っています。テキストファイルの送受信ならこれで十分です。

いつものスキー場までのコース、走れるようになっていました。ちょっと隠れて見えませんが左上が泉ヶ岳のスキー場です。Pm3:30の時点で気温0度。久しぶりに走ったので膝が痛くなりました。無理をすると回復が長引くので山道での実走テストは来週にします。センサーが付いている自転車はフロントダブルギヤで、なまった足ではこの坂を上れません。ここより1kmほど下(手前)は急坂で伏せると時速80キロ出ます。


タイム差表示モードのバグがなかなかとれません。ホイールを手で300mぶんほど回すだけだと問題ないのに。2〜3km試走して帰ってくるとダメ。表示されている値と、ダウンロードファイルをEXCELで加工計算した値が合いません。ソフトウェア開発は時間も手間もかかりますが、プログラムの開発経過を見ても面白くないので掲載するネタがありません。今週中にはタイム差モードを完成させたいのですが...

電池残量が少なくなってくるとちょっとした振動でPICにリセットがかかります。たぶん電池ボックスの中で電池が動いた瞬間に接触不良を起こして電圧が下がる物と思われます。対策のために電気2重層コンデンサーをつないでみました、効果はありますが5秒も持つのでオーバースペックです。100uFを470uFに変更するだけにしました。ちょっとはマシになるはず。2号機は電池ボックスは使わずに、電池をハンダ付けすることにします。


センサーは素子がむき出しだったのでエポキシ接着剤で固めて保護することにしました。透明な熱収縮チューブの下部をネジの頭で栓をして、接着剤を流し込みました。固まったらネジは切り落とします。熱収縮チューブを使用した理由は「ちょうど良い直径だったから」です。エア抜きのためにヒートガンで暖めましたが、加熱しすぎると収縮してしまうので、かえって作業性は悪くなります。右は同じようにFRP板に取り付けたところ。熱収縮チューブは接着剤が付かないみたいなのでペロっと剥がしました。同じ物をもう一つ作ったのですがセンサーが壊れてました。テスターで測定してみるとセンサーの電源間抵抗が0.4Ωしかありません。原因は静電気でしょうか?普通のトランジスターみたいな格好してますが、これでもCMOS−ICですから。あと2〜3個買っておくべきでした。


30kmほど走ってきました、明日はこれと比較しますが、雨かもしれません。基板むき出しなので雨が降ったら使えません。


登りの4kmちょっとの区間での結果です。右の目盛りが時間差です。一番左が上り始め、右端が頂上です。LEDの表示は30秒差付近を示していたのですが、実際は10秒差でゴールしています。差が出る原因がまだつかめていません。赤い線が前回走行データ、青い線が今回の物です。


走行途中でリセットがかかるので電池ボックスは廃止しました。コネクターはラジコン用の物を使いました。


センサーもう一個作りました。通勤用の自転車に取り付けます。今日はちょっと寒いのでストーブの前につるして硬化を促進しています。南側斜面のスキー場の雪はだいぶ溶けて地面が見えてきましたが、夕方走るとちょっと寒いです。暗くなってライト(メタルハライド)を点けたらノイズでリセットがかかってしまいました。金属製のケースに入れないとダメみたいです。センサーのケーブルからノイズを拾っているのであればケースに入れてもダメですけど...


走りに出かけようとしてタイヤに空気を入れているときに気が付きました。下地が見えてしまうほど減っています。高圧なのでタイヤが切れるとチューブが飛び出して破裂します。パンクと違って破裂の場合は大穴があくのでチューブはゴミになります。切ってみましたが、下地が見えてもサイドの一番薄いところよりも厚みはあります。


やっとEXCELで計算した理論値と、実際の表示値が合いました。原因はmikroBASICのバグかバグフィックスのパッチをあてていなかったため。バンク切り替えが正しくなかったみたい(たぶん)。mikroBASICをV4.02にしたら正常に動作するようになりました。写真は40km走った後の結果。表示は0.1秒単位。1/100秒は切り捨てです。時間差を表示する場合もう一桁欲しいところです。風向きが違うとTOTALでは時間差が少なくても片道では100秒以上タイム差が付いて表示がオーバーフローしてしまいます。


朝の通勤時にデータを取って、そのまま電源入れっぱなしでした。電池は5時間程度しか持たないので空っぽ。充電した後、通勤データのダウンロードまでは出来たのですが、LEDにおかしな値を表示するので、バグだと思いバグ取り用のコードを仕込んだプログラムを書き込んで動かしてみると、どんどん症状が悪化していく。プログラムを書き換えていないのに電源入れるたびに違う動作をするので、PICを疑って交換すると完治。電圧が次第に下がっていくと壊れたりするんでしょうか? PIC以外にも「発信器」「シリアルEEPROM」「RS232CインターフェースIC」が付いているので、どれが悪さしたのかわかりません。昇圧回路が入っているので232CインターフェースICが怪しいのですが...