フルカラーLEDを思い通りの色に光らせてみよう

0
2801

以前の記事「フルカラーLEDで色相を変化させてみよう」では、色を一定の周期(約2秒)で連続して変化させるものでしたが、今回は半固定抵抗を使って、思い通りの色に光らせてみます。

今回必要な部品

  • Arduino×1
  • USBケーブル( Aコネクタ – Bコネクタ )×1
  • フルカラーLED×1
  • 抵抗器(330Ω×3
  • 半固定抵抗(10kΩ)×3
  • ジャンプワイヤー×15

回路図

フルカラーLEDには、赤(Red)、緑(Green)、青(Blue)の各端子の並び方が異なるものがあります。その場合は、Arduinoのデジタル出力ピンからの接続先を使用するLEDに合わせて繋ぎ変えてください。 ・D9番ピン   → 赤(Red) ・D10番ピン → 緑(Green) ・D11番ピン → 青(Blue) それと今回、使用したLEDはカソードコモン型になります。アノードコモン型の場合は、回路が異なりますので、注意してください。

スケッチ(その1)

void setup() {
}
void loop() {
int r = analogRead(1) ;  //変数rをA1番ピンの値とする
int g = analogRead(2) ;  //変数gをA2番ピンの値とする
int b = analogRead(3) ;  //変数bをA3番ピンの値とする

analogWrite(9,r) ;   // 9番ピンにrを出力する
analogWrite(10,g) ;  //10番ピンにgを出力する
analogWrite(11,b) ;  //11番ピンにbを出力する
}

 

このスケッチでは、半固定抵抗からの電圧(0~5V)をArduinoのアナログ入力で10ビット(0~1023)の整数に変換し、それをそのままLEDのR,G,B各端子に接続した8ビット(0~255)のPWM出力(0~5V)としています。たぶん、255以上の数値は、すべて255(5V)としているのではないかと思いますが、これでも、各半固定抵抗を回すと、それに応じてLEDの色が変わるのを確認できるはずです。

スケッチ(その2)

void setup() {
Serial.begin(9600); //シリアル通信のデータ転送レートを9600ビット/秒に設定する
}
void loop() {
int r = analogRead(1) ; //変数rをA1番ピンの値とする
int g = analogRead(2) ; //変数gをA2番ピンの値とする
int b = analogRead(3) ; //変数bをA3番ピンの値とする

analogWrite(9,map(r,0,1023,0,255)) ; // 9番ピンに8ビットに変換したrを出力する
analogWrite(10,map(g,0,1023,0,255)) ; //10番ピンに8ビットに変換したgを出力する
analogWrite(11,map(b,0,1023,0,255)) ; //11番ピンに8ビットに変換したbを出力する
delay(20) ;

Serial.print("B : ") ;
Serial.print(map(b,0,1023,0,255)) ; //bを8ビットに変換して送信する
Serial.print(", ") ;
Serial.print("R : ") ;
Serial.print(map(r,0,1023,0,255)) ; //rを8ビットに変換して送信する
Serial.print(", ") ;
Serial.print("G : ") ;
Serial.println(map(g,0,1023,0,255)) ;//gを8ビットに変換して送信する
}

 

こちらのスケッチでは、“map”関数を使って、10ビット(0~1023)の整数を8ビット(0~255)の整数に変換したものをPWM出力にしました。併せて、シリアル通信でも8ビットに変換したr,g,bの値をパソコンに送信しています。 メニューバーの“ツール” → “シリアルモニタ”をクリックしてからスケッチを書き込んでください。

並び順がB → R → Gの順になっていますが、それぞれの値が表示されていて、半固定抵抗を回すと、それにつれて数値が変わり、LEDの色も変わります。時計方向に回し切るとB,R,G共、数値が255になりますが眩し過ぎるので、気をつけてください。 次に“シリアルモニタ”画面を閉じてから、メニューバーの“ツール” → “シリアルプロッタ”をクリックしてみてください。

“シリアルプロッタ”では、B,R,Gの数値が色別のグラフとして表示されるので、LEDの色を直観的に制御できます。但し、このままでも紫や黄緑といった中間色を出すことができますが、フルカラーLEDは同じ電圧だと赤の色が強いので、330Ωの抵抗も半固定抵抗に交換し、B,R,Gの光の強さを揃えた上で調整した方がよりコントロールしやすいと思います。

動作例