多数のLEDを手軽に光らせたいと思ったことはありませんか? 我々はたびたびそう思います。そんなときに使うのがArduinoとTLC5940です。
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-KeyやMOUSER ELECTRONICS、Seeed Studioから購入できます。価格には開きがありますが、1個で400~700円程度です。
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”という名のフォルダが現れるはすです)、“
ライブラリのインストールを終えたら、以下にあるスケッチを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ビーズ”と呼んでいます。以下に写真と動画にてご紹介しましょう。