PICでいろいろ作ろう”その2”です。 ”その1”は、ポジションナイトライダー化で、ウィンカーポジションは”その3”になるのです。 その1では、アセンブラとLEDの点灯制御でしたがLEDの次には、やはり7セグメントLEDで数字を表示させて見たい。で、その数字は何を表示させるか? で、考えると温度が簡単で実用的だろうと。 (超音波センサーを使って距離の測定も考えたのですが、これはまた次回にでも) 今までのLED点灯は完全デジタル動作ですが、温度計は温度センサーから出力される温度に比例した電圧値(アナログ)を数値(デジタル)に変換する必要があります。この事を A/D変換と言うのですが、今まで使用していたPIC 16F84AではA/D変換機能が無いので外部で回路を組んで色々と小細工が必要になります。 そこで、今回はA/D変換機能が入っているPIC 16F88を使用する事に。 温度センサーはLM35D(0℃の時0V、100℃の時1Vを出力)を使用して、出力値を5倍にして0−5V出力とさせます。PICは5V動作でA/D変換も5Vまで入力 出来るので5倍にしたほうがS/Wでの計算が楽になるのです。 A/D変換は10bitで行うので、10進数で0から1024までとなり、100℃、5V入力でA/D変換MAXの1024。これを単純に10で割れば102.4℃となります。 2.4℃のずれはありますが、これは誤差の範囲内でしょう。そこまで精度は求めませんから。 3桁の7セグメントLEDはダイナミック点灯として、配線を減らしています。ダイナミック点灯とは、1桁目を少し表示後消します、次に2桁目も少し表示後消します。 同じように3桁目も。これを繰り返して表示させると3桁全てが点灯しているように見えるのです。各桁の表示時間は1msで順番に表示させ、3桁まで表示後に10msの 全消灯としています。これは、明るさを少し抑えるのと消費電流を少し減らす事を目的にしています。 人の目はアナログですから、当然ちらつきも無く3桁同時に全て表示しているように見えるのです。 S/Wは今回よりアセンブラをやめてC言語を使用してます。理由は”ウィンカーポジション”でも記載していますが、S/Wの作成が簡単になるのでは。と、C言語の勉強です。 簡単な仕様は以下です。 PIC:16F88 温度センサー:LM35D(0−100℃) S/W:C言語(CCS−C) H/Wはこんな感じです。 ![]() (センサーの出力を5倍にする所に10kΩの可変抵抗をいれてます。これで温度の調整ができるのですが、基本となる温度(20℃くらい)が、 ないので、部屋にある市販のデジタル温度計と合うように調整します。これだけでも、誤差は結構あるのでしょう) まずは前回と同様にテストボードを作って試験してみます。 テストボードは前回使用したボードに温度センサーと7セグメントLEDを追加です。(写真右側の小さい基盤) ![]() 7セグメントLEDは初めて使用するのですぐに温度表示とは行かずに、 1ステップ目:数字のみ表示です。0から999までを順番に表示させる。 2ステップ目:表示桁数が1桁、2桁の時、不要な桁が0となるのを無表示とする。(”020”-->” 20”と表示させる) ここまで完成したら、後は温度データを表示させるだけです。 完成したソースです。(綺麗な作りではないでしょうが参考になれば) テストボードでは一応完成しましたが、これだけで終わるものもったいない。 ちょうど、GSX−R1100の純正の水温計をやめてデジタル化する(した)ので、不要なものは取り外してここに温度計を入れてみ ましょう。できれば外気温が測れればいいのですが、メーター内部に納めるので、正確な外気温の測定は無理でしょう。しかし、メーター内の発熱物質電球はLEDに変更している のでそれほど極端に温度差が発生しないかも。 また、メーター自体もカウル内にあるので走行風による温度変化も少ないかも。 直射日光でのメーター内の温度上昇は避けれないので、これは仕方ありません。 メーター内の水温計部分に入るように基盤をカットして、部品を取り付けます。今後の拡張性も考えて2段構造にして部品の追加も出来るようにしたのですが、 実際追加するかどうかは不明でが、ギヤボジションや、走行時間計等があれば良いかも...。 ![]() ![]() メーター内に収めた状態です。抵抗やトランジスタが表面に見えていますが、カバーを付けるとそれほど目立たないようになるはずです。 ![]() テスト点灯です。部屋の中ですが、蛍光灯の光の当たり具合でも見づらくなる事があります。表示は21.4ですが、光ってる部分が白っぽく見えて他の消えてる部分と光ってる 部分との判別がしづらくなります。太陽光の下ではこれ以上に見えなくなることでしょう。 ![]() で、赤には赤と言う事で赤のセロファンをかぶせると、数字のみがくっきり見えます。ついでに抵抗などの不用品が少し隠れるようになって一石二鳥です。 実際にはメーターのパネル裏にセロテープで貼り付けました。 ![]() ![]() メーターカバーを取り付けて表示させて見ましたが結構いい感じです。写真では数字の回りがぼやけて見えますが実際にはくっきり見えてます。 ![]() 完成したので試乗です。 写真はありませんがやはり問題点が。 1.太陽光の下では、7セグメントの表示が全部光って見える。 2.実際の外気温との差がやはり大きい。特に日向での駐車後の温度は凄く高くなる。その後走行してもすぐには温度は下がらない。 (ココまでは想定内ですが、あまりにも違いすぎた) 市街地より山に向かって走ったのですが、道路上の温度表示16℃の時に自作外気温計は26℃と表示してました。 温度の差はセンサー位置の見直しが必要となり、メーター内だけの改造では済まなくなるので、ここはだいたいの温度と言うことで現状のままとし、表示のみ変更します。 太陽光の代わりにLEDライトを当ててみて表示がどの程度変化するかみてみます。セロファンを被せてる時でも7セグの光ってい無い場所が見えてます。太陽光ではココが光って 見えるのでこれが見えないようにしてみます。 ![]() ![]() 赤のセロファンにスモークをプラスしてみれば。 でも、スモークのアクリルや、フィルムは高くて購入するのがバカみたいです。たった、10cm四方しか使用しないのですから。ホームセンターをうろうろして、スモークに似た カラーのファイルケースを発見。一枚40円程度なので安いし加工も楽だし良いのですが、唯一色がスモークではなく灰色なのです。スモークを貼れば良くなると言う確証は今の 所全く無くただの案なので、ここは灰色でチャレンジしてみます。 赤セロファンのみより暗くなっているので7セグの不要な部分は全く(ほとんど)見えなくなってます。少しは期待できるかもです。 ![]() 赤セロファン+灰色クリアケース(2枚)をパネル裏に貼り付けてとりあえず対策完了です。 ![]() 週末は太陽が出てこないので、試乗は後日になります。 どうなることやら??? |