図1は、今回構成したシステムの概要である。作成したのは3つで、赤枠で囲われた、

  • 80LED Shield
  • LED駆動スケッチ
  • CPU負荷取得プログラム

である。80LED Shieldは先週写真をご紹介した、要するにLEDの表示部である。LEDの駆動スケッチは、この80LED Shieldを駆動するためのものである。原理的には362回のList 1に近いものだが、こちらは決められたパターンでLEDを駆動するだけのものであった。今度はPCから表示データを受け取ってこれに合わせてLEDの駆動を行う必要があり、したがってもう一ひねり必要になる。

図1:

最後がCPU負荷取得プログラムである。これはここまで全く説明してこなかった話であるが、CPUの負荷をリアルタイムに取得して、それをArduinoに送り出そうというものだ。別にCPU負荷でないといけない訳ではなく、例えば温度とかでも良いだろうし、他に好みのものがあればそれを表示すればいいのだろうが、とりあえず見栄えもするし、いちいちTask Managerを立ち上げなくてもCPUの稼動状態が見えるのも悪くなかろう、という判断でこれを表示することにした。で、方法であるがTask Managerのこれ(Photo01)と同じ仕組みで、各CPU毎の負荷を一定時間毎に取得、それを確認のために画面に表示すると共に仮想COMポート経由でArduinoに送り出すようなプログラムを作成した。プログラムというか仕組みについては順次説明を行ってゆくが、実はWindowsでなくてもこれは可能である。例えばLinuxなら、/proc/stat を定期的に監視して、その差分からCPUコア毎の負荷を算出することが出来る。そういう訳で他の環境でもこの表示機構は利用することができる仕組みだ。

Photo01: 赤枠で囲んだこの部分と同じ事をプログラムで行うことにした。

そんなわけで、まず80LED Shieldから順に説明してゆこう。回路図全体は図2の様になっている。ここではD02~D19の18本のDigital I/Oを10×8構成とした上で、LED自身は20個×4列という形に配している。これによって20段のレベル表示が可能になるというものだ。LEDとしては、赤はOSDR3133A、黄色はOSYL3133A、緑(黄緑)はOSNG3133Aをそれぞれ利用した。ちなみにいずれも100個単位で、赤が\350、黄色が\550、黄緑が\450である。抵抗は150Ω 1/4Wのものを10本使っている。厳密に言えば赤・黄・緑で特性が違うために若干輝度にムラが出る(黄緑の輝度が一番落ちるので、これのみもう少し電流を増やしたほうがベター)なのだが、ブレッドボードで一部だけ回路を仮組みしてみたところ、さして支障がなさそうだったのでこのまま行くことにした。

図2:

図2を実際の配線に近い形に書き直したのが図3である。10×8のLEDの列を横に引き伸ばし、20×4という形に配している事がお分かりいただけようか。図のうち、右側の破線で囲った部分が、LEDをケースに埋め込み、そこに直接立体配線の形で実装した部分である。その立体配線とArduino本体、及び抵抗を実装したユニバーサル基板の間は配線用ケーブル(耐熱電子ワイヤー、あるいはリボンケーブルといった名称で販売されているもの)を使って繋いでいる。

図3:

こう書くと、「何でLEDも基板に実装しなかったのか?」と聞かれそうだが、理由は穴あけの加工精度である。今回も一応マスキングをしたうえに寸法線を描き、その上からガイド穴を開けた上でドリリングしているのだが、ボール盤ではなく単なる電動ドリルの悲しさ、Photo02の様に穴の位置が一直線になっていない。

Photo02: 遠目に見ると結構そろっている様に見えるのだが、近くで見ると...

基板を使って実装した場合、穴がきちんと均等に開けられれば図4上側の様にうまく収まって配線も楽なのだが、不均等だと図4中央の様に、大変情けないことになる。情けないだけならまだいいが、これだと本当にパネルの真前から見ないと、最悪光っているかどうかすら判らない事になる。図4上側の様に、LEDのボディがある程度シャーシから突き出していないと綺麗に光っているのが見えない、というのが予備実験の結果判明しており、やむなく図4下側の様な実装とした訳だ。このあたりはケースの加工精度次第である。さすがに自宅にボール盤を持ち込む根性はなく(いや、安い奴だと1万円未満で買えたりするし、まともな精度の奴でも数万円で入手できたりするのだが、それを常設できる場所が無いという理由で断念した)、妥協した部分である。

図4:

(続く)