こんにちは、「メカのりまき」です。
この記事では、Arduinoの入出力ピンを使って、フルカラー(RGB)LEDの点灯を制御する方法について説明したいと思います。
フルカラー(RGB)LEDを制御するためには、単色のLEDを制御する方法を理解している必要があります。
以下のリンク先の記事で、単色のLEDを点灯させる回路とLEDを制御する方法について説明していますので、単色のLEDを点灯させる回路とLEDを制御する方法が分からないという方は、是非、ご覧になってください。
また、この記事は、「Arduino IDE」の基本的な使い方を、理解していることを前提とした記事となっています。
「Arduino IDE」の使い方は以下のリンク先の記事で説明していますので、「Arduino IDE」の使い方が分からないという方は、以下のリンク先の記事を是非ご覧になってください。
目次
本記事で使用するもの
本記事で私が使用した物は以下の通りです。
- 「Arduino IDE2.0.3」をインストールしたPC(Windows11)
- USBケーブル
- Arduino Uno R3(ELEGOO UNO R3でも可)
- ブレッドボード
- フルカラー(RGB)LED
- 抵抗器
- ジャンパーワイヤー
「Arduino Uno R3」の互換ボードであれば、「ELEGOO UNO R3」以外のボードでも、本記事と同様な手順で動作可能だと思われますが、動作検証はしていないので、その点はご了承ください。
以下のリンクのスターターキットを購入した場合、上記で述べた使用するものは、PC以外すべて入手することができます。
Arduinoをまだ購入していないという方やArduinoで動かすことができるたくさんのパーツが欲しいという方は、購入を検討してみてください。
フルカラー(RGB)LEDの説明
フルカラー(RGB)LEDは、「赤」、「緑」、「青」のLEDを1つにまとめたLEDで、以下の写真のような見た目をしています。
上記の写真を見ると、単色のLEDとは違い線が4本あることが確認できます。
これらの線は、以下の画像のように、各色のLEDに単体で繋がった線3本と共通で使用する線1本という構成になっています。
ここで、フルカラーLEDの接続タイプは2つあり、LEDのカソード側(マイナス側)が共通となったものを「カソードコモン」、アノード側(プラス側)が共通となったものを「アノードコモン」と言います。
(マイコン内臓型という種類の「フルカラーLED」も存在しますが、本記事では説明を省かせていただきます。)
基本的には、一番長い線が共通の線、それ以外が各LEDに単体で繋がっている線となっています。
どの線がどこに繋がっているかは、購入先のメーカーが記載している場合が多いので、確認しておくと良いでしょう。
例えば、上記で紹介したスターターキットに含まれていたフルカラーLEDは「カソードコモン」タイプのもので以下のように、線が繋がっています。
フルカラーLEDを制御する回路
フルカラーLEDの色を制御するためには、PWM制御対応のデジタル入出力ピンを3つ使用する必要があります。
この記事では、3番ピンと9番ピンと11番ピンを使用して「フルカラーLED」を制御する方法について、説明したいと思います。
抵抗器の計算
電流の流れすぎによる破壊を防ぐために、「フルカラーLED」も単色のLEDの時と同様に、それぞれの色のLEDに対して、直列に抵抗器を接続する必要があります。
抵抗器の計算は、順電圧と順電流によって、計算を行います。
以下に、電源の電圧が5[V]のとき、順電圧と順電流が分かっているLEDに対して、電気抵抗がいくつの抵抗器を繋げれば良いかという計算を行ってくれるツールを用意しておきましたので、ご活用ください。
抵抗器の計算についての詳細は、以下のリンク先の記事で説明をしていますので、気になる方はご覧になってください。
ここで、順電圧は各色によって、異なっていると思われます。
もし、どの線がどの色に繋がっているか見分けるのが困難な場合は、順電圧が一番低いもので計算したときの電気抵抗より少し高いものに合わせておくと、電流の流れすぎによるLEDの破壊を防げるので安全です。
電気抵抗の計算が行えない場合は、電気抵抗が高いもの(大体1[kΩ])から順番に接続していき、ちょうど良い明るさになるものを探していきます。
その際、電気抵抗を低いものにすれば、その分点灯が明るくなるのですが、電気抵抗が低すぎるもの(大体100[Ω]を下回るくらい)の場合、LEDの寿命を縮めてしまったり、破壊してしまったりすることがあるので注意してください。
接続タイプを知る方法
「フルカラーLED」の説明を行った際、「カソードコモン」と「アノードコモン」の2種類の接続タイプがあるということを説明しました。
ここで、困ったことに、接続タイプが「カソードコモン」か「アノードコモン」かによって、作成する回路やスケッチが異なります。
そのため、まずは接続タイプが「カソードコモン」なのか、それとも「アノードコモン」なのかを知る必要があります。
購入先のメーカーが接続タイプを記載している場合は、それで解決できますが、どうしても接続タイプが分からない場合は、ブレッドボードで以下のような回路を作成してArduinoの電源を入れてみてください。
上記の回路で、LEDが点灯した場合、接続タイプは「カソードコモン」となります。
点灯しない場合は、ブレッドボードで以下の回路を作成して、Arduinoの電源を入れてみてください。
上記の回路で、LEDが点灯した場合、接続タイプは「アノードコモン」となります。
どちらの回路でも点灯しなかった場合は、回路が間違っていないかを良く確認してみてください。
(上記の回路で点灯しない場合、マイコン内臓型の「フルカラーLED」の可能性があります。)
空のスケッチを書き込む
これから、各接続タイプについて、フルカラーLEDを制御するための回路を作成してもらおうと思いますが、回路を作成する前に、空のスケッチ(「ファイル」タブの「New Sketch」をクリックしたときに出てくる何の処理も書かれていないスケッチ)を書き込んでください。
そうすることにより、前に書き込んだスケッチが、新しく作成しようとしている回路に影響を及ぼすことを防げます。
新しい回路を作成するときは、いつもこの作業をやっておくと、安全に回路を作成することができます。
もし、Arduinoボードの接続の仕方やスケッチの書き込み方が分からくなった場合は、以下のリンク先の記事で説明しているので、やり方を確認してみてください。
回路を作成する
カソードコモンの場合の回路
接続タイプが「カソードコモン」の場合は以下のような回路を作成します。
(ピンの番号と色の接続関係を上記のものに合わせる必要はありません)
ブレッドボードを使った回路は以下の画像のようになります。
アノードコモンの場合の回路
接続タイプが「アノードコモン」の場合は以下のような回路を作成します。
(ピンの番号と色の接続関係を上記のものに合わせる必要はありません)
ブレッドボードを使った回路は以下の画像のようになります。
単色で点灯させる
回路が作成できましたら、まずは「赤」、「緑」、「青」を単色で点滅させるスケッチを書き込みます。
スケッチを書き込む
カソードコモンの場合
接続タイプが「カソードコモン」の場合は以下のスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
void setup() { //3,9,11番ピンを出力として設定する pinMode(3,OUTPUT); pinMode(9,OUTPUT); pinMode(11,OUTPUT); } void loop() { //3番ピンに繋がっている色のLEDを点灯させる digitalWrite(3,HIGH); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); //9番ピンに繋がっている色のLEDを点灯させる digitalWrite(3,LOW); digitalWrite(9,HIGH); digitalWrite(11,LOW); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); //11番ピンに繋がっている色のLEDを点灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,HIGH); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); } |
アノードコモンの場合
接続タイプが「アノードコモン」の場合は以下のスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
void setup() { //3,9,11番ピンを出力として設定する pinMode(3,OUTPUT); pinMode(9,OUTPUT); pinMode(11,OUTPUT); } void loop() { //3番ピンに繋がっている色のLEDを点灯させる digitalWrite(3,LOW); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); //9番ピンに繋がっている色のLEDを点灯させる digitalWrite(3,HIGH); digitalWrite(9,LOW); digitalWrite(11,HIGH); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); //11番ピンに繋がっている色のLEDを点灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,LOW); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); } |
スケッチの解説
回路の作成とスケッチの書き込みが正しく出来ていれば、以下の動画のように、フルカラーLEDが「赤」、「緑」、「青」の三色で点滅していきます。
(色の順番は接続によって異なる場合があります。)
ここで、極端に明るさが違う色があった場合は、抵抗器を調整してみてください。
フルカラーLEDがそれぞれの色で点滅することが確認いただけましたら、次はそれぞれの接続タイプで、どのようなことが起きているのか解説したいと思います。
カソードコモンの場合
カソードコモンの場合のスケッチをまとめると以下の図のようになります。
ここで、カソードコモンの場合、出力が「HIGH」の時、LEDに電流が流れて点灯し、出力が「LOW」の時、LEDに電流が流れず消灯します。
アノードコモンの場合
アノードコモンの場合のスケッチをまとめると以下の図のようになります。
ここで、アノードコモンの場合、出力が「LOW」の時、LEDに電流が流れて点灯し、出力が「HIGH」の時、LEDに電流が流れず消灯します。
PWM制御で色を制御する
光の三原色とフルカラーLED
上記のスケッチで、「フルカラーLED」は「赤」、「緑」、「青」に点灯させることができるということは、ご理解いただけたかと思います。
しかし、「赤」、「緑」、「青」だけなのに、なぜ「フルカラー」と呼ばれているのか疑問に思う方もいらっしゃるのではないでしょうか。
実はこの「赤」、「緑」、「青」は光の三原色と呼ばれており、それらの色の強度を変えて混ぜ合わせると、人間が認識できるほぼ全ての色を再現できると言われております。
つまり、「フルカラーLED」内にある「赤」、「緑」、「青」のLEDの明るさを調節すれば、様々な色に点灯させることが出来るということになります。
フルカラーLEDの原理について、なんとなくご理解いただけましたら、次は実際に色を制御するスケッチについて説明をしたいと思います。
スケッチを書き込む
カソードコモンの場合
接続タイプが「カソードコモン」の場合は以下のスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
void setup() { //3,9,11番ピンを出力として設定する pinMode(3,OUTPUT); pinMode(9,OUTPUT); pinMode(11,OUTPUT); } void loop() { //PWMでそれぞれの色の明るさを調節してLEDを点灯させる analogWrite(3,255); analogWrite(9,255); analogWrite(11,0); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); //PWMでそれぞれの色の明るさを調節してLEDを点灯させる analogWrite(3,255); analogWrite(9,30); analogWrite(11,200); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); //PWMでそれぞれの色の明るさを調節してLEDを点灯させる analogWrite(3,30); analogWrite(9,255); analogWrite(11,200); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); delay(500); } |
アノードコモンの場合
接続タイプが「アノードコモン」の場合は以下のスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
void setup() { //3,9,11番ピンを出力として設定する pinMode(3,OUTPUT); pinMode(9,OUTPUT); pinMode(11,OUTPUT); } void loop() { //PWMでそれぞれの色の明るさを調節してLEDを点灯させる analogWrite(3,0); analogWrite(9,0); analogWrite(11,255); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); //PWMでそれぞれの色の明るさを調節してLEDを点灯させる analogWrite(3,0); analogWrite(9,225); analogWrite(11,55); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); //PWMでそれぞれの色の明るさを調節してLEDを点灯させる analogWrite(3,225); analogWrite(9,0); analogWrite(11,55); delay(500); //フルカラーLEDを消灯させる digitalWrite(3,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); delay(500); } |
スケッチの解説
スケッチが正しく書き込めた場合、以下の動画のように、フルカラーLEDが先程とは異なる3色で点滅していくことが、確認できます。
(接続によって、点灯する色が異なる場合があります)
どちらの接続タイプも、「analogWrite」によって、3つのLEDの明るさを制御して、色を変化させています。
「analogWrite」については、以下のリンク先の記事で説明していますので、「analogWrite」が何をしているのか分からないという方は、以下のリンク先の記事をご覧になってください。
しかし、接続タイプによって、「analogWrite」のデューティー比と接続先のLEDの明るさの関係が異なるので注意が必要です。
カソードコモンの場合
カソードコモンの場合、「analogWrite」のデューティー比の値が大きい程、出力が「HIGH」となっている時間が長く、点灯している時間が長いため、接続先の色のLEDが明るく点灯します。
例えば、赤色に接続しているピンのデューティー比の値を、他の色に接続しているものより大きくすると、より赤に近い色で点灯します。
アノードコモンの場合
アノードコモンの場合、「analogWrite」のデューティー比の値が小さい程、出力が「LOW」となっている時間が長く、点灯している時間が長いため、接続先の色のLEDが明るく点灯します。
例えば、赤色に接続しているピンのデューティー比の値を、他の色に接続しているものより小さくすると、より赤に近い色で点灯します。
for文で徐々に色を変化させる
スケッチを書き込む
カソードコモンの場合
接続タイプが「カソードコモン」の場合は以下のスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
void setup() { //3,9,11番ピンを出力として設定する pinMode(3,OUTPUT); pinMode(9,OUTPUT); pinMode(11,OUTPUT); } void loop() { //3番ピンに繋がっているLEDをゆっくり明るくする for(int i=0;i<=255;i++){ analogWrite(3,i); analogWrite(9,0); analogWrite(11,0); delay(6); } //3番と9番ピンに繋いでいる色の明るさをゆっくり変化させる for(int i=0;i<=255;i++){ analogWrite(3,255-i); analogWrite(9,i); analogWrite(11,0); delay(6); } //9番と11番ピンに繋いでいる色の明るさをゆっくり変化させる for(int i=0;i<=255;i++){ analogWrite(3,0); analogWrite(9,255-i); analogWrite(11,i); delay(6); } //3番と11番ピンに繋いでいる色の明るさをゆっくり変化させる for(int i=0;i<=255;i++){ analogWrite(3,i); analogWrite(9,0); analogWrite(11,255-i); delay(6); } //3番ピンに繋がっているLEDをゆっくり暗くする for(int i=0;i<=255;i++){ analogWrite(3,255-i); analogWrite(9,0); analogWrite(11,0); delay(6); } //0.5秒待機 delay(500); } |
アノードコモンの場合
接続タイプが「アノードコモン」の場合は以下のスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
void setup() { //3,9,11番ピンを出力として設定する pinMode(3,OUTPUT); pinMode(9,OUTPUT); pinMode(11,OUTPUT); } void loop() { //3番ピンに繋がっているLEDをゆっくり明るくする for(int i=0;i<=255;i++){ analogWrite(3,255-i); analogWrite(9,255); analogWrite(11,255); delay(6); } //3番と9番ピンに繋いでいる色の明るさをゆっくり変化させる for(int i=0;i<=255;i++){ analogWrite(3,i); analogWrite(9,255-i); analogWrite(11,255); delay(6); } //9番と11番ピンに繋いでいる色の明るさをゆっくり変化させる for(int i=0;i<=255;i++){ analogWrite(3,255); analogWrite(9,i); analogWrite(11,255-i); delay(6); } //3番と11番ピンに繋いでいる色の明るさをゆっくり変化させる for(int i=0;i<=255;i++){ analogWrite(3,255-i); analogWrite(9,255); analogWrite(11,i); delay(6); } //3番ピンに繋がっているLEDをゆっくり暗くする for(int i=0;i<=255;i++){ analogWrite(3,i); analogWrite(9,255); analogWrite(11,255); delay(6); } //0.5秒待機 delay(500); } |
スケッチの解説
スケッチが正しく書き込めた場合、以下の動画のように、フルカラーLEDがゆっくりと色を変化させながら点滅していくことが、確認できます。
(接続によって、点灯する色が異なる場合があります)
どちらの接続タイプも、以下の図のように、「for文」で3つのLEDの明るさを徐々に変化させることで、色を変化させながら、点滅させています。
「for文」については、以下のリンク先の記事で説明していますので、「for文」が何をしているのか分からないという方は、以下のリンク先の記事をご覧になってください。
しかし、1つ前のスケッチで説明したように、接続タイプによって、「analogWrite」のデューティー比と接続先の色のLEDの明るさの関係が異なるので注意してください。
Arduinoの入出力ピンを使って、フルカラー(RGB)LEDの点灯を制御する方法についての説明は以上となります。
フルカラーLEDは点灯させる色や点滅パターンを変えることで、様々な色の変化を楽しむことができます。
フルカラーLEDを気に入った方は、是非、今回の記事で説明したスケッチを参考にして、ご自身でオリジナルのスケッチを作成し、色々なパターンの点灯を試してみてください。
次回の記事では、タクトスイッチとデジタル入力について説明したい思います。
本記事はここまでです。ご清覧ありがとうございました。
広告
楽天モーションウィジェットとGoogleアドセンス広告です。
気になる商品がございましたら、チェックをしてみてください。