フルカラー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