ArduinoとシリアルLEDでRGBライトを作ってみた

ArduinoとシリアルLEDで作ったRGBライト
ArduinoとシリアルLEDで作ったRGBライト

最近、デジイチを始めたので照明を色々調べていたらRGBライトという製品を知った。これなら手持ちのシリアルLED(WS2812B)とArduino(Seeeduino XIAO)でカンタンに作れそうだと思った。

今回は、Red・Green・Blueのそれぞれの色をツマミで調整できるようにしてみた。またモバイルバッテリーも搭載しているので、かなり実用的なRGBライトが出来たともっている。興味ある方は、ぜひこの記事を参考にしてみて欲しい。

はじめに

ちなみに、AmazonをのぞくとRGBライトは三千円程度で売られている。正直、自作した方が高くつく。しかし、自作ならバッテリー容量を大きくできたり、ライトの数を増やしたり、プログラムを組んでオリジナルの演出効果を作り出したりすることができるなどのメリットがある。

自作が面倒な方は素直に製品性を選ぼう。奇特な変態さんは、この記事を参考に自作してみよう!

なお、次のような開発環境下で作業を行なった。

項目バージョン
ArduinoデバイスSeeeduino XIAO
シリアルLEDWS2812B
Arduino IDE1.8.15
パソコンmacOS Big Sur 11.2.3

シリアルLEDの準備

60個のシリアルLEDを貼り付け配線
60個のシリアルLEDを貼り付け配線

シリアルLED「WS2812B」が60個付いているテープライトを使用し、百均のちょうど良さそうなケースに貼り付けた。そして横幅が収まるようにカットし、直列の数珠繋ぎになるよう導線を半田付けした。

この半田付け作業がなかなか大変だったので、もしこれからシリアルLEDを購入する方は、最初からマトリックスに並べられているものをオススメしておく。

シリアルLEDの仕組みや使い方は、こちらで詳しく解説したので参考に。

配線

制御用マイコンはArduinoの互換機である「Seeeduino XIAO」を使用した。WiFiやBluetooth機能は標準で装備されていないが、今回のようなスタンドアローンな製品にはXIAOはもってこいな感じ。

XIAOの使い方はこちらで詳しく解説したので参考に。

さて、RGBライトを作りたいので、赤(R)緑(G)青(B)のそれぞれの色を可変抵抗で調節できるようにする。また、電源スイッチを取り付けたいので配線は次の図のようになった。

RGBライトの配線
RGBライトの配線

USBコネクタはモバイルバッテリーに接続する。USBの+5VとGNDの位置を間違えないように注意しよう。不安な方は一度テスターで確認すると良い。

また、モバイルバッテリーは2A以上でないと電力不足でXIAOが落ちてしまうので注意だ。余裕があれば、XIAOとシリアルLEDの電源は別々に供給したい。

WS2812Bをフルに光らせようとすると50mA程度必要なので、50mA x 60個で本当はライトだけで3A以上欲しいところ。

プログラム

RGBライトの色を変える
RGBライトの色を変える

先ほどの配線をブレッドボードで組んで、次のようなプログラムでRGBライトの実験をした。それぞれの可変抵抗を回せば、色合いや明るさやが変化するのを確認できた。loop内のdelayをもっと短くすれば、可変抵抗を回した時に色の変化追従がもっと滑らかになると思うが、なんとなく消費電力も多くなりそうなので100ms程度に設定してある。

/*
  Created by Toshihiko Arai.
  https://101010.fun/iot/arduino-rgb-light.html
*/

#include <Adafruit_NeoPixel.h>

const int POT_R = 3; // A3
const int POT_G = 2; // A2
const int POT_B = 1; // A1
const int DIN_PIN = 0; // D0
const int LED_COUNT = 60; // LEDの数

Adafruit_NeoPixel pixels(LED_COUNT, DIN_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(POT_R, INPUT);
  pinMode(POT_G, INPUT);
  pinMode(POT_B, INPUT);
  pixels.begin();
  pixels.clear();
  Serial.begin(9600);
}

void loop() {

  int R = int(analogRead(POT_R) / 1023.0 * 255.0);
  int G = int(analogRead(POT_G) / 1023.0 * 255.0);
  int B = int(analogRead(POT_B) / 1023.0 * 255.0);
  Serial.printf("R:%d G:%d B:%d\n", R, G, B);
  for(int i=0; i<LED_COUNT; i++) {
    pixels.setPixelColor(i, pixels.Color(R, G, B)); // red
    pixels.show();
  }
  delay(100);
}

動作確認ができたところで、銅基板をエッチングし半田付けして写真のようにケースに収めた。カメラの1/4インチネジで取り付けられるように、百均のスマホホルダーを分解してケースに接着した。写真ではそこにホットシューを取り付けてある。

RGBライトの背面
RGBライトの背面

前面部分は、ライトを取り付けたケースと同じものを浅くカットしライトの上に被せた。見た目もそれっぽくなってイイ感じ。

RGBライトの前面
RGBライトの前面

三脚→雲台→スマホホルダー→ホットシュー→RGBライトのように取り付けた。RGBライトがあると、これからの写真・動画撮影が楽しくなりそうだ。

カメラの上にRGBライトを取り付ける
カメラの上にRGBライトを取り付ける

ちなみに、こちらが私が愛用している三脚とスマホホルダー。スマホホルダーはホットシューが付けられるものを買うと便利。

記事に関するご質問などがあればTwitterへお返事ください。
この記事で紹介した商品
人気のArduino互換機
Arduinoで人気の周辺パーツ
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容となっています。ほかのArduino書籍と比べて図や説明がとてもていねいで、読みやすかったです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事