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

 

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

最近、デジタル一眼レフを購入したので照明についていろいろと調べていましたら、「RGBライト」という製品を知ることになりました。手持ちのシリアルLED(WS2812B)とArduinoで「RGBライト」を作れないだろうかと思い立ち、さっそくやってみました。

この記事では、私がArduinoで自作したシリアルLEDのRGBライトの作り方を解説します。

具体的には次のようなことをやっていきます。

  • ArduinoでシリアルLEDを制御する
  • 赤、緑、青のそれぞれの色を可変抵抗で調整可能にする
  • モバイルバッテリーを搭載させてケーブルレスにする

実用的なRGBライトができましたので、ぜひご参考になさってみてください。

はじめに

Amazonを見るとRGBライトは三千円ほどで販売されています。安い!、と思いました。正直、自作してもそんなに安くありません^^;

そんなわけで、自作がメンドーな方は素直に製品性を選びましょう。

「どうしても自作したい!」という方は、この先をお読みになさってみてください。自作ですとバッテリー容量を大きくできたり、ライトの数を増やしたり、プログラムを組んでオリジナルの演出効果を作り出したりできるメリットがあるんじゃないかと思っています。

Arduinoの開発環境

次のような開発環境下で作業を行ないました。

項目 バージョン
Arduinoデバイス Seeeduino XIAO
シリアルLED WS2812B
Arduino IDE 1.8.15
パソコン macOS Big Sur 11.2.3

Arduinoには互換機の「Seeeduino XIAO」を使用しました。「Seeeduino XIAO」には、WiFiやBluetooth機能などの無線はありませんが、今回のようなモバイル型のスタンドアローンなモノには小さくて便利です。

▼ XIAOの使い方はこちらで詳しく解説しましたので、ご参考になさってみてください。

▼ もちろん、ほかのArduinoをお使いになってもらっても構いません。

もしArduino初心者の方で「どのArduinoを選べばよいか分からない」といった方は、オススメArduinoどれを選べばいい?Arduinoで電子工作をはじめる方へをご参考になさってみてください。

RGBライトのに使うシリアルLED

シリアルLED「WS2812B」が60個付いているテープライトを、百均で購入したケースに貼り付けました。横幅が収まるようにカットし、数珠つなぎになるように導線をはんだ付けしました。ライトはすべて直列につないでいます。

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

このはんだ付け作業はかなり大変でした。もしこれから制作しようとなさるなら、最初からマトリックス状に並べられているものをオススメしておきます。

▼ シリアルLEDの仕組みや使い方は、以前にこちらの記事で詳しく解説しましたのでご覧ください。

ArduinoとシリアルLEDの配線

最初に説明したとおり、今回は赤(R)緑(G)青(B)のそれぞれの色を可変抵抗で調節できるようにします。また、電源スイッチを取り付けたいです。よって、配線は次の図のようになりました。

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

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

ところで、モバイルバッテリーは2A以上の出力でないと、シリアルLEDを点灯した際に電力不足によってXIAOが落ちてしまいます。本来ならば、XIAOとシリアルLEDの電源は別々に供給したいところですが、手軽さを考えてコレで行きます。。

WS2812Bをフルに光らせようとすると50mAほど必要になるので、50mA x 60個だと3A以上欲しいところです。

RGBライトのプログラム

先ほどの配線をブレッドボードで組んで、次のようなプログラムでRGBライトを実現しました。

/*
  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);
}

可変抵抗を回せば、写真のように色合いや明るさを自由に変えることができます。

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

loop内のdelayをもっと短くすると、可変抵抗を回した時の色の変化の追従が滑らかになります。ただし、なんとなく消費電力も多くなりそうなので100ms程度に設定しました。

最終的には、銅基板をエッチングして基板をつくり、はんだ付けして下の写真のようにケース内に回路を収めました。

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

また、カメラの1/4インチネジで取り付けられるように、百均のスマホホルダーを利用してケースに接着してみました。カメラネジにこちらのホットシューを取り付けてありますので、RGBライトをカメラへマウントできるようになっています。

フロントはこんな感じです。半透明なケースがほどよくディフューザーになりました。

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

三脚、雲台、スマホホルダーそしてホットシューを介してRGBライトを取り付けてみました。部屋を暗くすると怪しい感じの撮影ができますね(笑)

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

ちなみに、こちらは私が使用している三脚とスマホホルダーです。スマホホルダーはホットシューをマウントできるので、RGBライトをマウントするには便利ですね。

▼ その後さらに進化して、ロータリーエンコーダで色を変えられるようにしました。HSV色空間の色彩を使ってRGBへ変換することで色の移り変わりを実現させています。

記事に関するご質問などがあれば、お問い合わせ までご連絡ください。
人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

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

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

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

関連記事