フルカラーLEDとは?

フルカラーLEDとは、1つのパッケージの中に赤(Red)、緑(Green)、青(Blue)の3色のLED素子が内蔵されており、各色の光を混ぜることで様々な色を作り出せるLEDです。

この3色のLED素子はそれぞれ独立して制御可能で、強度(明るさ)を調整することで、例えば赤と青を混ぜて紫、赤と緑を混ぜて黄、全色を混ぜると白といったように、光の三原色の加法混色によって様々な色を表現できます。

共通の端子(カソードまたはアノード)を持つ4ピン構造となっており、Arduinoで制御することで色の表現や光のグラデーション制御が可能になります。

フルカラーLEDの回路

フルカラーLEDの回路


ArduinoでフルカラーLEDの点灯制御をする

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit

Arduinoから信号を出力してフルカラーLEDを点灯させます。

フルカラーLEDは3色がそれぞれON / OFFの2パターンがあるため、フルカラーLEDの点灯パターンは全部で2^3 = 8パターンとなります。

フルカラーLEDの発色

フルカラーLEDの発色パターン

RED GREEN BLUE YELLOW MAGENTA CYAN WHITE BLACK の8パターンとなります。

これらを点灯するための回路図と配線図は以下のように設計しました。

フルカラーLEDの点灯回路と回路図

フルカラーLEDの点灯回路と回路図


ArduinoでフルカラーLEDの点灯制御

#define R 9
#define G 11
#define B 10

void setup(){
   pinMode(R,OUTPUT);
   pinMode(G,OUTPUT);
   pinMode(B,OUTPUT);
}

void loop(){
   digitalWrite(R,HIGH);
   delay(500);
   digitalWrite(R,LOW);

   digitalWrite(G,HIGH);
   delay(500);
   digitalWrite(G,LOW);

   digitalWrite(B,HIGH);
   delay(500);
   digitalWrite(B,LOW);

   digitalWrite(R,HIGH);
   digitalWrite(G,HIGH);
   delay(500);
   digitalWrite(R,LOW);
   digitalWrite(G,LOW);

   digitalWrite(B,HIGH);
   digitalWrite(G,HIGH);
   delay(500);
   digitalWrite(B,LOW);
   digitalWrite(G,LOW);

   digitalWrite(R,HIGH);
   digitalWrite(B,HIGH);
   delay(500);
   digitalWrite(R,LOW);
   digitalWrite(B,LOW);

   digitalWrite(R,HIGH);
   digitalWrite(G,HIGH);
   digitalWrite(B,HIGH);
   delay(500);
   digitalWrite(R,LOW);
   digitalWrite(G,LOW);
   digitalWrite(B,LOW);
   delay(500);
}

少々長ったらしいですが、これで全8色の出力ができました。

実際にこのプログラムを動かすと以下の動画のような動作になります。

このようになれば、正常に動作しています。

PWM制御でなめらかな発色

以前の記事でArduinoのPWM制御を行いました。

👉 【Arduinoで電子工作】AD変換を使用して電圧値をシリアル通信で出力"

その記事で、PWMのduty比を変更することでLEDの電流値に流れる電流値を制御し、光量の調整を行いました。

今回は同様のことをフルカラーLEDの3色それぞれにPWM信号を送信し、発色制御をしていきます。

回路はそのままで行い、プログラムのみを変更します。

各色に流すduty比の変化は以下のグラフのようにサインカーブを描くようにします。

フルカラーLEDの出力位相

フルカラーLEDの出力位相

それぞれの位相をずらすことで自然にいろんなパターンの色の変化を見ることができます。

実際のプログラムは以下のようになります。

#define R 9
#define G 11
#define B 10

void setup(){
   pinMode(R,OUTPUT);
   pinMode(G,OUTPUT);
   pinMode(B,OUTPUT);
}

void loop(){
  uint8_t r, g, b;
  uint8_t i;

  for (i = 0;; i++) {
     r = (sin(2 * 3.14 / 255 * i) + 1) * (255 / 2);
     g = (sin(2 * 3.14 / 255 * (i + 85)) + 1) * (255 / 2);
     b = (sin(2 * 3.14 / 255 * (i + 170)) + 1) * (255 / 2);

     analogWrite(R, r);
     analogWrite(G, g);
     analogWrite(B, b);
     delay(20);
  }
}

実際に動かしたときの動画が以下のようになります。

自然に色が変わっている様子がわかると思います。

今回はサインカーブを描くように制御しましたが、3色でArduinonoのPWM機能を使用すると、

256 x 256 x 256 = 16777216色

も出すことができるため、いろんな発色の仕方があります。

センサの値を読み込んでその値をしようしたり、グラフの数式を変更させたり、時と場合に合った様々な使用方法があります。

いろいろとチャレンジしてみてはいかがでしょうか?

今後は、複数のフルカラーLEDを使用したダイナミック点灯やカラーセンサーを使用した電子工作とかをしてみたいと思っています。


おわりに

フルカラーLEDはPWMを使うことで柔軟かつ滑らかな光の表現が可能です。Arduinoを使って1677万色の発色が可能なので、アイデア次第で様々な光の表現ができます。次回は複数のLEDを使った制御にもチャレンジしていきましょう。

See you …