フルカラー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を使用すると色の制御が簡単。
様々な活用方法がありそう。
Leave a comment