以前の記事「フルカラー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の光の強さを揃えた上で調整した方がよりコントロールしやすいと思います。