第15回 「TLC5940で16個のLEDを遊ぶ」



 多数のLEDを手軽に光らせたいと思ったことはありませんか? 我々はたびたびそう思います。そんなときに使うのがArduinoTLC5940です。

 TLC5940はテキサスインスツルメンツのLEDドライバICで、1チップで最大16個のLEDを制御できます。各LEDを定電流で発光させることが可能なので、LED毎に電流制限抵抗を設ける必要がありません。また、PWMにより各LEDの見かけ上の明るさを4096段階に調整できます。ほか、LED毎の明るさのバラつきを記録して明るさ補正に役立てる機能や、壊れて消灯したLEDを検出する機能などもあるようです。

 非常に便利なICですが、このICを単体で使い、外部回路を自作するなどして利用するのは容易ではありません。しかしArduinoにはTLC5940用のライブラリ(機能を拡張するソフトウェア)があるので、Arduinoと組み合わせれば簡単に使えます。

テキサスインスツルメンツのLEDドライバIC、TLC5940NT。28ピンのDIPなので、ブレッドボード上にそのまま挿すことができます
TLC5940はArduinoから容易にコントロールすることができます。つまり、ArduinoとTLC5940を組み合わせれば、ICや外部回路に関する詳しい知識がなくとも、最大16個のLEDを自由に光らせることができるというわけです

 ArduinoとTLC5940を用意したら、さっそく配線してみましょう。ほかに必要なのは、ブレッドボード、ジャンプワイヤ、光らせたい数のLED(最大16個)、それから抵抗器1本(抵抗値は後述)くらいです。Arduinoに対するプログラミングのため、もちろんPCとUSBケーブルも必要ですね。

 ちなみに、TLC5940は日本では単体入手しにくいICです。海外通販ですと、Digi-KeyMOUSER ELECTRONICSSeeed Studioから購入できます。価格には開きがありますが、1個で400~700円程度です。

ArduinoとTLC5940の配線図。TLC5940とArduino、TLC5940とLEDは、ジャンプワイヤなどの導線を使って直結するだけです。ほかに必要な電子部品は抵抗器×1本のみで、今回は4.7KΩのものを使いました
配線の様子。ブレッドボードを使ってTLC5940とLEDを接続したため、ジャンプワイヤは7本だけで済みました。ブレッドボード上には7本の単線ジャンプワイヤと抵抗器1本を使いました
わずかな配線で、左に見える16個のLEDを自由に点灯させることができます
今回はArduinoをUSBバスパワーで動かしています。TLC5940およびLEDを駆動するための電源はArduinoから得ています
TLC5940が各LEDに流す電流の量を決めるのが、中央に見える抵抗器の抵抗値です

 TLC5940は、定電流つまり一定の値の電流を各LEDに流すことができるICです。電流の量は、TLC5940の20番ピン(IREF)とGND(-極)を結ぶ抵抗器の抵抗値によって決まります。電流の値を決める計算式は以下のとおりです。

 ( 1.24 ÷ 抵抗値Ω ) × 31.5 = 出力電流

 今回は4.7KΩ(4,700Ω)の抵抗器を使っていますが、これは各LEDに8mA程度の電流を流したいと考え、上の計算式に当てはめた結果です。最終的に使うLEDが超高輝度タイプなので、8mA程度流せば十分明るく輝きます。あまり明るくないタイプのLEDを使う場合は、都度、この計算式から適切な抵抗値を算出してください。

 さて、配線と同時に、Arduinoへのプログラミングが必要です。また、プログラミングの前に、PCにTLC5940用のライブラリをインストールする必要があります。

 ライブラリはArduino公式サイトからダウンロード可能です。ライブラリをダウンロードしたら展開し(展開すると“Tlc5940”という名のフォルダが現れるはすです)、“/hardware/libraries/”以下にコピーしてください。Windows PCなら、例えば“C:\Program Files\Arduino\arduino-0017\hardware\libraries”の“libraries”フォルダのなかに、Tlc5940フォルダをコピーします。

 ライブラリのインストールを終えたら、以下にあるスケッチをArduino IDEを使ってArduinoに書き込んでみてください。

#include "Tlc5940.h"

#define MAX_BRIGHTNESS 4095 // 0-4095
#define POWAN_SPEED 100     // microsecond

TLC_CHANNEL_TYPE ch;
char curCh;  // current channel
int curBr;   // current brightness

void setup() {
  Tlc.init();
  Tlc.clear();
  for(ch = 8; ch < 16; ch++) {
    Tlc.set(ch, MAX_BRIGHTNESS);
  }
  Tlc.update();
}

void loop() {
  ch = curCh;
  for(curBr = 0; curBr < MAX_BRIGHTNESS; curBr++) {
    Tlc.set(ch, curBr);
    Tlc.update();
    delayMicroseconds(POWAN_SPEED);
  }
  for(curBr = MAX_BRIGHTNESS; curBr >= 0 ; curBr--) {
    Tlc.set(ch, curBr);
    Tlc.update();
    delayMicroseconds(POWAN_SPEED);
  }
  curCh++;
  if(curCh == 8) curCh = 0;
}

 このスケッチでは、16個のLEDのうち8個のLED(OUT0~OUT7/28番ピンと1~7番ピンに接続したもの)がポワンポワンと明滅し、残りの8個のLED(OUT8~OUT15/8~15番ピンに接続したもの)が点灯し続けます。

 明滅の速さを変えてみたい場合は、スケッチ中の“#define POWAN_SPEED 100”の行の数値を変更します。数値はミリ秒で、大きくするとプログラム進行中の遅延時間が増え、明滅が遅くなります。

 また“#define MAX_BRIGHTNESS 4095 // 0-4095”の行の(4095の)数値を変えることで、PWMのデューティー比を変更できます。4095なら100%デューティー比=最大の明るさとなり、0なら消灯です。シンプルなスケッチですので、改造にチャレンジしてみてください。

上記のスケッチを読み込んで動作させてみたところ。8個のLEDが明滅し、残り8個のLEDが同じ明るさで点灯し続けます
【動画】実際にはこのように光ります。ArduinoとTLC5940のみのシンプルな回路で、16個ものLEDを自由に制御できるというわけです

 Arduinoと組み合わせたTLC5940は、とても身近な“LEDを楽しむためのIC”として汎用的に使えます。電子部品のうちとりわけLEDが好きな我々は、そんな理由からTLC5940を多用しています。そこで、TLC5940をより手軽に使うために、TLC5940接続用シールドを作ってみました。

スイッチサイエンスのバニラシールドを使い、Arduino/TLC5940間の配線を省けるシールドを作ってみました
表面を見たところ
裏面の様子。ArduinoにつながるピンとTLC5940が接続されている程度の単純な配線です
TLC5940がLEDに対して流す電流値は、接続される抵抗器の抵抗値で変化します。このシールドでは抵抗器を交換可能にしました
シールド+ArduinoとLEDを接続したところ。このシールドを使った場合、最大で17本のジャンプワイヤが必要になますが、LED配置の自由度が大いに増します
シールドの手前に見えるピンは+極の電源線となるVcc(5V)です。TLC5940はシンクドライバで、ICに対して電流が流れ込んでいってLEDが点灯します
LEDを点灯させた様子

 TLC5940は入手性もあまりよくなく、高価でもあるICですが、1つ持っているといろいろな“Lチカ遊び”ができます。Arduinoのスケッチを少し変更するだけで、さまざまな光り方を楽しめますし、自作Arduinoと組み合わせればユニークなLEDプロジェクトを複数作るのも現実的です。みなさんもぜひTLC5940を手に入れて試してみてください。

 さて、最後に、TLC5940とは別のLED関連アイデアを1つご紹介します。電子部品のなかでも特にLEDが好きな我々は、以前から「もっとLEDの光を美しく楽しむ方法はないか?」と試行錯誤していました。そんななか生まれたのがビーズにLEDを埋め込んで光らせるという方法です。我々は“LEDビーズ”と呼んでいます。以下に写真と動画にてご紹介しましょう。

用意するのはアクリル製のビーズです。このなかにLEDを埋め込みますので、直径15mm程度以上のビーズだと作業がラクです。また、透明や半透明のビーズが適切です
今回は直径が3mmの砲弾型LEDを埋め込みます。プラスチック用のドリルビットなどを使い、ビーズに穴を空けます。砲弾型LEDの根元は、直径3mmのものであっても直径4mm程度の出っ張りがありますので、LEDを完全に埋め込みたい場合は直径4~5mmのドリルを使うとよいでしょう
このようにLEDを埋め込みます。LEDは光が周囲により広がりやすい広角タイプを選ぶと、ビーズがきれいに輝きます
LEDをビーズに接着する前に、どのように光るかチェックを。ビーズの色とLEDの色で、輝き方が大きく変わります。光に納得したなら接着剤で固定しましょう
我々が試作した“LEDビーズ”の一部。キレイに光らないものも少なくありません
キレイに輝いた例。大理石のように見えたビーズですが、青色LEDを入れて光らせると惑星のように見えます
こちらは赤色LEDの例。ビーズは透明感のあまりない、くすんだグレーのようなものでした
白濁した半透明のビーズに黄色LEDを入れたところ。ちょうちんのようにも見えます
宝石のようなカットの入った透明のビーズに黄色LEDを入れてみました。LEDの光がいくつにも分かれて見えます
花の形をしたアクセサリ用パーツに白色LEDを挿入してみました
あまり透明感のない白い石のようなビーズに白色LEDを入れてみたところ。ビーズ内部のヒビが光のニュアンスを変え、不思議な輝きを放ちます
少し気泡の入った透明/カット入りのビーズに緑色LEDを入れてみました
さきほどのTLC5940の回路のLEDを、LEDビーズに置き換えました。LEDの根本に単線の導線をハンダ付けし、ブレッドボード上でLEDビーズが自立するようにしました
LEDビーズが光っている様子
【動画】花畑をイメージしましたが、思ったようには光りませんでした。スケッチやLED色、LEDビーズの配置をもっと工夫する必要がありそうです。