Arduino UNOでフルカラーLEDを制御してみる
@GO 2019年10月10日に作成

Arduino UNOを使ってオシャレなフルカラーLEDの点灯制御をしてみました。

フルカラーLED

一般的なLEDというと
普通のLED
こんなやつです。決まった色でのみ発光します。

フルカラーLEDというのは名前の通りどんな色でも発光させられるLEDで、
フルカラーLED
こんなやつです。足が4本に増えています。

構造としては、赤・青・緑のLEDが一つにパッケージされたような形になっています。
赤・青・緑といえば光の三原色ということで、この三色のバランスを変えて発光させれば、様々な色の光を作り出すことが可能です。

四本の足は、赤・青・緑それぞれのアノードと、3色共通のカソードです。
カソードを共通にして3つのLEDがつながっている構造なので、カソードコモンといいます。
他に、アノードを共通にするアノードコモンタイプのものもあります。

配線

配線は、以下のように行います。
フルカラーLEDとArduino UNOの配線
使用した部品は

  • Arduino UNO
  • フルカラーLED
  • 抵抗(1kΩ)×3
  • ブレッドボード
  • ジャンパー線 数本
    です。

共通のカソードをGNDに接続し、残った各アノードをArduino UNOの9,10,11番ピンに接続します。
抵抗値は一律1kΩを使いましたが、厳密に色を合わせたい場合は、各色の抵抗値を調整する必要があります。

プログラム

とりあえず3色光ることを確認する

配線できたら、とりあえず赤・青・緑の各色が正常に発光することを確認してみます。

3色を順番に点灯

#define R 11 //11番ピンには赤 #define G 9 //9番には緑 #define B 10 //10番には青 void setup(){ pinMode(R,OUTPUT); pinMode(G,OUTPUT); pinMode(B,OUTPUT); } void loop(){ digitalWrite(R,HIGH); //赤が点灯 delay(500); //500ミリ秒待機 digitalWrite(R,LOW); //赤を消灯 digitalWrite(G,HIGH); //緑を点灯 delay(500); digitalWrite(G,LOW); //緑を消灯 digitalWrite(B,HIGH); //青を点灯 delay(500); digitalWrite(B,LOW); //青を消灯 }

赤 → 緑 → 青の順でLEDを点灯させています。つないだピン番号と色の対応をわかりやすくするために、#define R 11のようにしてピン番号を色の頭文字で指定できるようにしてあります。
約0.5秒おきに色が切り替わって点灯すればOKです。

グラデーションしてみる(2色)

せっかくフルカラー発光できるので、じわじわと色が変化するグラデーション点灯してみます。
3色のうち2つの色を使って、その2色の間を移動するように変化させるという考え方です。

赤と緑でグラデーション

#define R 11 #define G 9 #define B 10 int i; void setup(){ pinMode(R,OUTPUT); pinMode(G,OUTPUT); pinMode(B,OUTPUT); } void loop(){ for(i=0;i<=255;i++){ //R → G へ変化 analogWrite(R,255-i); analogWrite(G,i); delay(10); } for(i=0;i<=255;i++){ //G → R へ変化 analogWrite(R,i); analogWrite(G,255-i); delay(10); } }

上記は赤と緑の2色を使っています。点灯させるピンの組み合わせを変更すれば、青緑、赤青でも同様です。

グラデーション(3色)

2色でできれば3色でも、ということで、先程の考え方を応用して赤 → 緑 → 青 → 赤 →・・・と色を変えていきます。

3色使ってグラデーション

#define R 11 #define G 9 #define B 10 int i; void setup(){ pinMode(R,OUTPUT); pinMode(G,OUTPUT); pinMode(B,OUTPUT); } void loop(){ for(i=0;i<=255;i++){  analogWrite(R,255-i); analogWrite(G,i); analogWrite(B,0); delay(10); } for(i=0;i<=255;i++){ analogWrite(R,0); analogWrite(G,255-i); analogWrite(B,i); delay(10); } for(i=0;i<=255;i++){ analogWrite(R,i); analogWrite(G,0); analogWrite(B,255-i); delay(10); } }

プログラムをもっと工夫すればもう少し違ったグラデーションのさせ方ができると思いますが、ひとまず簡単なC言語で書けるレベルのグラデーションを実現してみました。

1
2
3
GO さんが 2019/10/10 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する