PIC16F887・スピードメーター & 電圧計の製作 (2010/08/12 〜2010/09/12)

(Last update:2010/09/27)


まずはブレッドボードで動作確認。
オプションの数値表示部も装備
LED を密集配置するため、周囲を
黒マジックで塗って散乱光を防ぐ
基板表。
PIC の下にも部品を実装。
オプションの数値表示部は
今回は省略
基板裏。
UEW を使わないとキツい ^^;
速度表示は方向点灯 電圧表示は方向点灯
テイシン TB-55 がピッタリサイズ。
もう 5mm ほど薄いケースだと文句
無しなのだが・・
LED の高さを抑え、あえてケース内で
点灯させることで直視を防ぐ。
HUD 運用の様子(画面中央下) 参考配線レイアウト
(レイアウトには PaaS を使用)

(PIC 〜 LED 間の配線は省略)
回路図

製作の動機:

 前作の設置位置がドライブレコーダーの視界に入らないので、ドライブレコーダー用にもう 1 つ作ることに(爆)。

 ただ同じものを作っても面白みがないので、以下のように仕様変更してみた。


仕様:

 前作 1前作 2を踏襲しつつ、次の仕様変更を行う。

 ・分解能を 10Km/h から 5Km/h へ変更し、よりスムーズに速度変化を表示
 ・スイッチ切り替えで電圧表示もサポート
 ・なるべく小型に仕上げる
 ・7 セグ表示(数値表示)もサポート(オプション)
 ・7 セグ表示(数値表示)は通常表示のみで HUD 表示は非サポート

 とする。


ハードウエア:

 回路設計の詳細は前作とほとんど変わらないのでそちらを参照。

 PIC はピン数の都合上 16F887 を選択。単純に I/O 数の多いものを選択するあたりは安直な気もするが、秋月でたったの \200 (!) だからこれでいいのだ ^^;

 前作 1前作 2 ではバー LED 表示部がオプションだったが、今回はその逆で 7 セグ表示がオプション。PIC のピン数の都合上、7 セグ表示は 74LS247 に任せてしまうため、数値表示部は HUD 不可なのが難点といえば難点か。

 なお 74LS247 を使用するため桁内はスタティック点灯となる。よって数値表示部実装時の消費電流は前作よりもだいぶ増加して 100mA 強となり、三端子レギュレーターの放熱には注意が必要となる。

 バー LED には小型で超高輝度、色のバリエーションも多いこちら2mm x 3mm x 4mm シリーズから、青、緑、黄、橙、ピンク、赤、の計 6 色を使用。ただし色によって輝度にかなり開きがあり、緑>青=赤=橙>>ピンク=黄、となっているため、ピンクと黄色以外は電流制限抵抗を入れて輝度差をなるべく減らした・・・つもり。

 また LED は透明パッケージのため、点灯すると光がかなり拡散してしまう。今回は LED を密集して実装するため、どの LED が点いているか判り易いように上面以外は黒マジックで塗りつぶして散乱光を防いだ。

 一方、オプション部分の 7 セグ LED は以前秋月で 10個 100円(!)で投売りされていた GL9A040G で設計・動作を確認。抵抗値を変更して輝度を調整さえすれば大抵のアノードコモン 7 セグ LED は使用可能のハズ。

 なお、車速パルス入力部は H = 12V 車でも対応できるようにした。


ソフトウエア:

【車速計算】

 詳細は前作と同じなのでそちらを参照。

 今回はキャプチャ割り込みと TMR1 オーバーフロー割り込みだけで TMR0 割り込みは使っていないため、前作のようなイレギュラー値は発生しないはずだが、念のためイレギュラー値チェックは実装してある。

【7 セグ LED 表示(数値表示)】

 速度表示モードでは速度を、電圧表示モードでは電圧を表示する。

 表示は 74LS247 に任せるため、PIC 側からは 4bit BCD データを送り出し、桁単位でダイナミック点灯(一般的にいうところのダイナミック点灯)を行う。

【バー LED 表示】

 点灯個数に合わせてダイナミック点灯を行う。表示周期はある程度一定にしている。

 速度表示モードでは ピンク 方向に点灯し、電圧表示モードでは逆に ピンク 方向に点灯する。


実装:

 今回はオプションの数値表示部は実装せずになるべく小型に仕上げる。ケースはテイシンの TB-55 (W80 x D50 x H20) がジャストサイズで、これをフロントガラスになるべく近い位置に設置して HUD でドライブレコーダーに録画させる。

 ちなみに 7 セグ LED を実装しないことで消費電流は 20mA 前後となり、三端子レギュレーターの発熱はかなり抑えられる。78L05 だけでも十分だが、輝度調整抵抗の値を変更するのが面倒だったため 78M10 も実装している。


苦心点:

 電圧表示中に暴走してしまうバグが取れず、3日悩む(爆)。原因はメインプログラム側がバンク 1 になっているわずか数ステップの間に割り込みが入っていた(!)こと。割込み処理の冒頭でバンクを強制的に 0 に戻すことで解決した。(割込み処理終了時にはステータスレジスタが復元されるのでバンクは自動的に元に戻る)


致命的な失敗(爆):

 さっそくフィールドテストをしてみたところ、人間用の速度計としては問題無いのだが、ドライブレコーダー用としては致命的な問題があった。そう、設計段階でスッカリ忘れていたのだ。ダイナミック点灯はドライブレコーダーのような「電子の目」とは相性が非常に悪いことを(核爆)。作ってから思い出すとは我ながらヌケサクもいいところである(逝)

 もちろんスタティック点灯にすれば問題は解決するのだが、ハードウエア面でいろいろと変更が必要になる。まずバー表示の場合は同時に 25個 の LED が点灯する可能性があるが、LED 毎に流せる電流量は(トランジスタで電流ブーストしない限り)PIC16F887 の最大許容電流(各ポート最大 25mA, 全ポート合計で最大 90mA)以下に収めなければならない。とすると各 LED には 3mA が限界で、今回使用した 2mm x 3mm x 4mm LED シリーズだと 3mA で炎天下の昼間に視認できるのは青、緑、橙、赤、(と白)に限定される。

 また同時点灯するには全ての LED に電流制限抵抗を入れなければならないし、ディマー回路自体がハナから同時点灯を考えていないため再設計が必要。また装置全体で 100mA 程度の消費電流となるため、3端子レギュレーターの放熱もそれなりに考えなければならなくなる等、かなりの変更が必要となり、作ってしまった今となっては後の祭り(逝)

 結局、ソフトウエアを変更するだけで対応可能な方法となると、ドライブレコーダーのシャッタースピードより遥かに早い速度でダイナミック点灯させるか、あるいはスタティック点灯のドット表示にすること。残念ながら前者の方法では炎天下の昼間でも視認するために十分な輝度が確保できないので、事実上後者しか選択肢がないのだが、それなら何も 25個も LED はいらないワケで ・・・ orz  (結局、後日スタティック点灯版も製作。詳細はこちら


注意点、改良案など:

 ・スタティック点灯でドライブレコーダー対応 (後日解決
 ・フラットパッケージの PIC とチップ LED を使って劇的に小型化。


今回学んだこと:

 ・PIC16F887 の諸設定(デバッガと RB6, RB7 の関係等)


プログラム:

 改変自由だが商用利用厳禁

プログラム ( asm & HEX ) (2010/09/27)
Speed_Meter2_v3.1.zip

謝辞:

 数値演算にはこちらのライブラリを使用させていただいております。開発者に御礼申し上げます。



 [電子工作のページへ]