できること

Arduino+LEDテープでRGBフルカラーの自宅イルミネーションを始めよう!

最近では日本でも住宅を電飾で飾る自宅イルミネーションが根付いてきました。
電球よりメンテナンスが簡単で、さまざまな色や点灯パターンが楽しめるLEDを使った電飾がホームセンターなどで手軽に入手でき、夜の住宅街を賑わしています。

今回紹介するのはLEDテープと呼ばれる、細長いテープにLEDが等間隔に並ぶ電飾です。
ところがこのLEDテープ、よくあるLED電飾と異なりあらかじめ設定されたパターンでLEDが点滅するわけではありません。

Arduinoに接続することで、スケッチからLEDテープ上の特定のLEDを特定の色で点灯できる優れものです。LEDテープを使用すればフルカラーのアニメーションも実現できるでしょう。
本記事では、このLEDテープの制御方法を解説します。

 

how-to-add-rgb-led-strip-to-home-lighting-01

LEDテープ

 

目次

  1. フルカラーシリアルLEDテープとは?
  2. 準備
  3. スケッチ
  4. 配線
  5. まとめ

 

1. フルカラーシリアルLEDテープとは?

本記事ではLEDテープの一種のフルカラーシリアルLEDテープを使った制御方法を紹介します。

LEDテープにはさまざまな種類がありますが、どれも見た目は同じで、1本のテープ上にLEDが等間隔に配置されています。
等間隔に並ぶLEDの間に一定の間隔で端子(電極)が配置されている製品もあります。そのようなLEDテープは電極部分で切断、切り離したあとは電線などでつなぎ合わせられるので、設置場所に合わせて自由に長さを調節できます。
LEDテープを自在に点灯するには、テープ端の電極にArduinoを接続してスケッチから制御します。

本記事で使用するLEDテープには、Arduinoなどに接続して点灯を制御するための電極が3本あります。電極は「電源」「信号線」「グランド」の3本です。

LEDテープに使われるLEDはRGB(赤緑青。色の三原色)の3色を混ぜ合わせることでフルカラーを表現します。それぞれのLEDにはコントロール用のICが内蔵され、テープ上でIC同士が数珠つなぎになっているので、一番端のIC(LED)に信号を送ることで全てのLEDを制御できます。

このIC同士をつなぐ線を信号線と呼び、これはLEDテープの端末にある3本の電極の中の1本につながります。
1本の信号線でテープ上に並ぶ全てのLEDを制御するのがシリアルLEDテープです。今回使用するLEDテープはフルカラーを表現できるのでフルカラーシリアルLEDテープと呼ばれます。以降は単にLEDテープと呼び方を統一します。
信号線以外の2本(電源・グランド)は全てのIC(LED)に接続されるので、わずか3本の電極と配線だけでテープ上の全てのLEDの点灯を制御できます。

一つ一つのLEDに組み込まれているICはWS2812Bです。興味のある方はデーターシート(英語)を確認してください。

このLEDテープスケッチから制御するには、サードパーティー製のライブラリを使用すると便利です。
よく使用されるライブラリにはFastLEDAdafruit_NeoPixelなどがあります。
どちらのライブラリもLEDテープを手軽にフルカラーで点灯させるだけでなくアニメーション風の演出機能を持つ関数も含んでいます。
本記事ではFastLEDを使用します。

ライブラリFastLEDはgithubでダウンロードできます。
ダウンロードが完了したらArduino IDEを起動し
[スケッチ] ≫ [ライブラリをインクルード] ≫ [zip形式のライブラリをインストール]
を選択します。

ここでgithubからダウンロードしたzipファイルを指定してください。
ライブラリをインストールするとサンプルスケッチが利用できるようになります。
サンプルスケッチ
[ファイル] ≫ [スケッチ例] ≫ [FastLED]
に展開されているはずです。

これでスケッチを作成する準備が整いました。
以降はLEDテープに実装されている全てのLEDを同じ色で光らせる例を紹介します。

 

2. 準備

以下のものを用意してください。

Arduino Uno

図4

 

Arduino IDE

how-to-add-rgb-led-strip-to-home-lighting-03

 

LEDテープ

how-to-add-rgb-led-strip-to-home-lighting-01

LEDテープとしてさまざまな製品が発売されています。ライブラリ(FastLED)に対応しているものであればどの製品を選んでも構いません。
WS2812Bと呼ばれるICを内蔵しているタイプであれば問題ないでしょう。

LEDテープを使用する際は、LEDテープが長ければ長いほど点灯に多くの電流が必要になるので注意が必要です。
いつもの電子工作ではUSBケーブルを通してArduinoボードや回路に電源を供給しますが、今回は電流が不足するかも知れません。その場合は、LEDテープに別のACアダプタを使って給電するなど、電源周りの環境も確認してください。

上記以外にArduino書き込み用のUSBケーブルが必要です。
またLEDテープの端子に応じてブレッドボードやブレッドボード用のジャンパーワイヤがあると便利です。

 

3. スケッチ

以下がスケッチ全体です。スケッチのあとに解説が続きます。

#include <FastLED.h>

#define numberOfLEDs 10
#define controlPin 5

CRGB leds[numberOfLEDs];

void setup() { 
    FastLED.addLeds<WS2812B, controlPin, GRB>(leds, numberOfLEDs);
}

void loop() { 
    for (int thisLED = 0; thisLED < numberOfLEDs; thisLED++) {
        leds[thisLED].r = 50;
        leds[thisLED].g = 0;
        leds[thisLED].b = 0;
        FastLED.show();
    }
}

ポイントを説明します。

#include <FastLED.h>

#define numberOfLEDs 10
#define controlPin 5

CRGB leds[numberOfLEDs];

最初はライブラリのインクルードです。FastLEDライブラリはArduino IDEにインストールするだけでは使用できません。必ずinclude文を使ってライブラリをこのスケッチで使用できるようにします。
続く2行は定数の定義です。スケッチの中に直接この数字をコーディングすることもできますが、「この数字の意味は何だっけ?」となることを防ぐために数字に分かりやすい名前をつけておきます。

定数numberOfLEDsはLEDテープに実装されているLEDの数です。Arduinoボードに近い側からnumberOfLEDs個のLEDを制御します。
定数controlPinはLEDテープの信号線を接続するArduinoボードのピン番号です。今回は5番ピンを使用します。
最後の行、配列ledsはLEDの色情報を格納します。この配列の要素はCRGBクラスでnumberOfLEDs個並びます。それぞれのCRGBクラスがLEDテープ上のLED一つ一つの色を記憶します。

今回は10個のLEDを制御します。ArduinoボードにUSBケーブルから給電する際はこの程度が限界でしょう。

続いてsetup()関数です。

void setup() { 
    FastLED.addLeds<WS2812B, controlPin, GRB>(leds, numberOfLEDs);
}

setup()関数ではFastLEDライブラリを初期化します。

初期化には
LEDテープに使用しているICの型番(今回は「WS2812B」)」
LEDテープを接続するArduinoボードのピン番号(今回は「5番ピン」)」
LEDテープに色を指定する方法(今回は「GRB」)」
「CRGBクラスの配列(今回は「leds」)」
「制御するLEDの数(今回は「10」)」
を指定しています。

この行は、使用するLEDテープによって記述が大きく異なります。本記事と異なるLEDテープを使用する場合は、製品に付属するマニュアルを確認してください。

以下はloop()関数です。

void loop() { 
    for (int thisLED = 0; thisLED < numberOfLEDs; thisLED++) {
        leds[thisLED].r = 50;
        leds[thisLED].g = 0;
        leds[thisLED].b = 0;
        FastLED.show();
    }
}

ここではfor文を使用してLEDテープ上のLED一つ一つに同じ色を設定しています。
各LEDの色は配列ledsの各要素にRGBを指定することで表現します。
RGBの各色はそれぞれ0から255までの値が指定でき
「r = 255、g = 255、b = 255」は「白色」
「r = 0、g = 0、b = 0」は「黒色(LEDは消灯)」
です。
今回は「r = 50、g = 0、b = 0」なので10個のLEDが「薄暗い赤色」で点灯するはずです。

how-to-add-rgb-led-strip-to-home-lighting-02

白色に光るLEDテープ(イメージ)

 

4. 配線

本記事で使用するLEDテープは3本の端子で制御できるため配線も簡単です。以下のように配線します。
必要であればブレッドボードを使用してください。

  • LEDテープの5V線とArduinoボードの5Vピンを接続。
  • LEDテープのGND線とArduinoボードのGNDピンを接続。
  • LEDテープのDIN線(信号線)とArduinoボードの5番ピンを接続。

配線は以上です。
完了したらArduinoボードとパソコンをUSBケーブルで接続してください。LEDテープの各LED(Arduinoボードに近い方から10個)が点灯すれば成功です。
点灯しない場合は
FastLED.addLeds(leds, numberOfLEDs);
の指定が、お使いのLEDテープと合っていないことが考えられます。マニュアルを確認してください。

 

5. まとめ

日本でも住宅を電飾で飾る自宅イルミネーションの文化が根付き、LEDを使用した電飾も個人で簡単に入手できるようになりました。
よく見られるのは、連なるLEDが同じ色や決まったパターンで点滅するような製品です。
今回紹介したLEDテープとArduinoを使用すれば、フルカラーのLEDを思いのまま制御でき、アニメーションを表現することも可能です。
制御方法は通常のLEDと比べてやや難しいかも知れませんが、マスターして近隣に差をつけるイルミネーションを実現してみましょう。

アバター画像

エレクトロニクスやメカトロニクスを愛するみなさんに、深く愛されるサイトを目指してDevice Plusを運営中。

https://deviceplus.jp

学生ロボコン2019出場ロボット解剖計画