フルカラーLEDを使ってみる ~ Arduino LV7 ~



フルカラーLEDを使って色を制御する。

フルカラーLEDは赤青緑の3色のLEDが内臓されている。各色の明るさを制御すれば様々な色の変化が可能だ。

 

  

 

パソコンの画面やテレビのRGB(Red、Green、Blue)と同じで、この3つのLEDの明るさを制御すると無数の色を表現する事が出来る。

 

足は4本あり、赤、青、緑用に3本の足(カソード -)、一番長い足が共通アノード(+)になっている。
 

  

 

 

それではフルカラーLEDを使った簡単なサンプルスケッチを見てみよう。まずは完成動画をご確認あれ。

 

【 動画 】

 

【 使用する部品 】

  • フルカラーLED
  • Arduino Uno
  • 抵抗510Ω 3本
  • ジャンパワイヤー 4本
  • ブレッドボード

 

 

【 回路 】


 

  • 3本の足(カソード)を9、10、11ピンにつなげる
  • 一番長い足(アノード)を5Vにつなげる

 
 

【 スケッチ 】

以下のスケッチを書くと、動画のように赤⇒緑⇒青の順番でLEDが光る。

// LEDをつなぐピンを定義
int led_pins[] = { 9, 10, 11};

// 初期化
void setup(){

  int i;

  // LEDのピンを出力に
  for (i=0; i<3; i++) {
    pinMode(led_pins[i], OUTPUT);
  }

}

// メインループ
void loop() {

  int i,j;

  // LEDを暗から明へフェード
  for (j=0; j<3; j++) {
    // LEDを点灯
    digitalWrite(led_pins[j], LOW);
    delay(500);

    // LEDを消灯
    digitalWrite(led_pins[j], HIGH);
    delay(500);

  }  
}

 

スケッチを書いていて、アレッ? と思った人は偉い。

そう、以下の箇所が問題の箇所だ。
 

// LEDを点灯
digitalWrite(led_pins[j], LOW);

 

LEDを点灯とコメントが書いているが、スケッチではLOWと書いている。

実は回路の接続方法の問題で、通常のLEDとは逆になるのである。

 

LEDのアノード側が+5Vに繋がっているところに注意しよう。

仮にデジタルピンの9番がHIGHの状態だと、これは+5Vと同じなのでLEDに電流は流れない。

ところがLOWにするとこれは0V、つまりGNDと同じなので電流が流れてLEDが点灯する。このように回路によって、HIGH、LOWは使い分けが必要なので注意が必要なのだ。
 

以下のサンプルを試してみよう。2つの色を混ぜ合わせることで、色が変化する事が解る。

// LEDをつなぐピンを定義
#define LED_PIN1 9
#define LED_PIN2 10

// 初期化
void setup(){

  // LEDのピンを出力に
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
}

// メインループ
void loop() {

  int i,j;

  // LEDを暗から明へフェード
  for (i=255; i>-1; i--) {
    analogWrite(LED_PIN1, i);
    j = 255 -i ;
    analogWrite(LED_PIN2, j);
    delay(5);  
  }  
}

 

次に色が変化するイルミネーションを作ってみよう。

赤、青、緑で様々な色が出力されるのがわかるはずだ。

#define FADE_TIME 10

// LEDをつなぐピンを定義
int led_pins[] = {9, 10, 11};

// 初期化
void setup(){

  // LEDのピンを出力に
  int i;
  for (i=0; i<3; i++) {
    pinMode(led_pins[i], OUTPUT);
  }
}

// メインループ
void loop() {

  int i,j;

 // LEDを暗から明へフェード
  for (j=0; j<3; j++) {
    for (i=0; i<256; i++) {
      analogWrite(led_pins[j], i);
      delay(FADE_TIME);
    }
  }

  // LEDを明から暗へフェード
  for (j=0; j<3; j++) {
    for (i=255; i>-1; i--) {
      analogWrite(led_pins[j], i);
      delay(FADE_TIME);
    }
  }
}

 

random関数を使ってLEDのピンをランダムに決めてみる。
先のスケッチより様々な色が出力されるぞ。

#define FADE_TIME 10

// LEDをつなぐピンを定義
int led_pins[] = {9, 10, 11};

// 初期化
void setup(){

  // 未使用のアナログで乱数の種を初期化
  randomSeed(analogRead(0));

  // LEDのピンを出力に
  int i;
  for (i=0; i<3; i++) {
    pinMode(led_pins[i], OUTPUT);
  }
}

// メインループ
void loop() {

  int i,j;

 // 乱数で使用するピンをデタラメにする
  for (j=0; j<3; j++) {
    // ピンの範囲は9,10,11
    led_pins[j] = random(9, 12); 
  }

  // LEDを明から暗へフェード
  for (j=0; j<3; j++) {
    for (i=0; i<256; i++) {
      analogWrite(led_pins[j], i);
      delay(FADE_TIME);
    }
  }

  // LEDを暗から明へフェード
  for (j=0; j<3; j++) {
    for (i=255; i>-1; i--) {
      analogWrite(led_pins[j], i);
      delay(FADE_TIME);
    }
  }

}

 

フルカラーLEDを使用すると色の制御が簡単。

様々な活用方法がありそう。

 

 

参考サイト:3色LEDを使う
 










Leave a comment

Your email address will not be published.

*



(Spamcheck Enabled)