Arduino本体だけでLEDを駆動する方法となると、このあたりまでとなる。もっと多数のLEDを同時に駆動したいという場合は、Arduinoを複数もってくるとか、より上位のArduino MEGAを使うとか、あるいは外部の回路を使うということになる。

Arduinoを複数というのは要するに力技であって、1台のArduinoで最大81個(Charlieplexingは措いといて、単にダイナミック点灯のケースだ)なら、2台で162個、4台なら324個(18×18のマトリックスに相当)が制御できることになる。もちろんこんな事をすると、今度はどうやってArduino同士を連動させるかという問題は別途出てくるが、これはI2CなりUSB(というかシリアル)経由なりで行うことができるから不可能ではない。もっともスマートとも言いがたいが。

Arduino MegaはArduinoの上位製品であり、コントローラにAtmelのATmega1280という多数のI/Oピンを搭載したモデルである。プログラムなどはほぼ共通(ピン数が増えているので完全互換というわけではなく、Arduinoに対する後方互換性が保たれている)であるが、Digital I/Oが最大54pin(但し2pinはUSB経由のシリアルポートと共用なので、最大52pinが現実的な最大pin数)になる。これを使えばダイナミック点灯で26×26=676個ものLEDを制御できるし、同時点灯LEDの数もずっと増えるのだが、ATMega1280はピン数こそ多いものの、同時にI/O pinに供給できる電力は200mAが限界(というか、ATMega1280のVccポートの電流限界が最大200mA)なので、ATMega1280自身が使う分を計算にいれなくても、26個のLEDともなると1個あたり7.7mA弱となり、これはよほど高効率なLEDを持ってこない限りかなり輝度は低くなる。現実問題としては、図1の様に、さらに外部にLEDドライバを用意するほうが簡単であろう(このあたりはまた後で触れるかもしれない)。

図1:

外部回路というのはLEDドライバとは別に、LED制御を行う回路を用意する方法だ。比較的ポピュラーなものとして知られているのは、74HC595がある。これは、

  • シリアル/パラレルの変換
  • シフトレジスタ
  • ラッチ

の3種類の機能を持ったICで、3本の信号線だけで最大8つまでのLEDが制御できる(図2)。しかも74HC595同士を接続することで、より多数の出力を制御することも可能だ(図3)。図3のケースでは2つだけだが、同じ調子でQ7'と次の74HC595のDSをディジーチェーン式につないで行けば、もっと沢山の74HC595をまとめて3pinだけで制御することが可能になる。また図2や図3は通常の接続だが、ここでダイナミック接続にすれば図3のケースなら64個のLEDを制御することが可能となる。加えて、SPIと呼ばれる接続方法を使うと、Arduinoのハードウェア制御で通信を行うことが可能なので、転送も容易になる。

図1:

図3:

というわけでLEDを一杯つなぐのはいろいろ方法がある、ということをご紹介したが、問題は繋いで何をやるか? という話である。ということで、今回からは筆者がMTM06で展示したケース埋め込み式のパフォーマンスメーターの作り方をちょっとご紹介したいと思う。まず最初に何をやっているのか? であるが、こちらの動画を見ていただくのが早い(Movie01)。

動画
Movie01:

これはWindowsの起動直後の様子だが、要するにCPUの負荷をリアルタイムでレベルメーター式にフロントパネルに表示させよう、というものだ。オリジナルというか、これを思いついた直接のきっかけはBeBoxである。BeBoxとは何か? というのはこれが説明が早いが、BeOSを動かす専用のマシンである。で、このBeBoxはフロントパネルの両脇にLEDがついていて、これでCPUの負荷がリアルタイムに表示されるというものだった。これをArduino+Windows環境でやってみよう、というのが展示した内容である。フロントから見るとこんな具合(Photo01)だが、裏面はこんな有様(Photo02~05)である。ということで、次回はもう少しこの工作の詳細を説明したい。

Photo01: ケースはGIGABYTEのGZ-M1。重要だったのは、フロントパネル内側にLEDとその他の配線を全部納めきるスペースがあるかどうかで、このためにショップで延々と全部のケースのフロントパネルの裏側を覗いて確かめるという作業の末、これに決定。電源なしで\3,980とかだったと記憶している。

Photo02:内部配置。外から見るとLEDを配するのは簡単そうでも、裏から見るとリブがあったりして、配線以前に設置が物理的に困難、というケースが結構多い。GZ-M1はこのあたり、余分なものがないためにすっきり配線できた。

Photo03: LEDは完全空中配線。5inchベイの下に配線と電流制御用抵抗をまとめた小さな基盤を配し、その下にArduinoを置いた。

Photo04: 空中配線。ちなみにLEDの穴あけはハンドドリルのみで行ったので、正面から見ると微妙に歪んでいる。同じ事をするのであれば、もっと綺麗に作れるバー型のLEDを入手するか、まともなボール盤を用意する事をお勧め。この作業が一番手間で、ほぼ6時間ほど要した。こちらはArduinoとLEDの間を繋ぐ配線の中継兼、電流制限抵抗の設置のために利用。フロンとパネルには両面テープでとめてある。

Photo05:こちらもフロンとパネルには両面テープで止めているだけ。このソケットというか、配線用のピンを作るのがちょっとだけ手間。

(続く)