RGBフルカラーLEDの色を段々に変化点灯させますパート2

〔パート1〕   〔パート3〕 〔Arduinoの動かせ方入門に戻る〕



前のページでは、赤色→黄色→緑色→水色→青色→紫色の変化を自動的に一定間隔で繰り返した回路でした。
このページでは、可変抵抗のツマミを回すと変化する様にしてみましょう。
基本は前ページと同じなので回路とスケッチプログラムだけ記載します。

《回路図》

RGBLED1

《スケッチプログラム》

下記がスケッチプログラムです、コピーペーストして貼り付けて下さい。
スケッチをダウンロードしたい方はこちら
ダウンロードスケッチの保存先と開き方はこちらを参照下さい。
---------------------------------------------------------------------
void setup() {
}
void loop() {
     int H , val ;
     int R , G , B ;

     /* 半固定抵抗の値を読取りその値を0〜360に変換する処理  */
     val = analogRead(5) ;             // アナログ5番ピンから値を読み取る
     val = constrain(val, 80, 550) ;   // 80-550の範囲ないで値を切取る
     H   = map(val,80,550,0,360) ;     // HSVのH値(0-360)にスケール変換を行う
     /* HSVのH値を各LEDのアナログ出力値(0-255)に変換する処理 */
     if (H <= 120) {
          /* H値(0-120) 赤-黄-緑     */
          R = map(H,0,120,255,0) ;     // 赤LED R←→G
          G = map(H,0,120,0,255) ;     // 緑LED G←→R
          B = 0 ;
     } else if (H <= 240) {
          /* H値(120-240) 緑-水色-青 */
          G = map(H,120,240,255,0) ;   // 緑LED G←→B
          B = map(H,120,240,0,255) ;   // 青LED B←→G
          R = 0 ;
     } else {
          /* H値(240-360) 青-紫-赤   */
          B = map(H,240,360,255,0) ;   // 青LED B←→R
          R = map(H,240,360,0,255) ;   // 青LED R←→B
          G= 0 ;
     }
     /* RGBLEDに出力する処理   */
     analogWrite(9,R) ;                //  9番ピンから赤LEDの出力
     analogWrite(11,G) ;               // 11番ピンから緑LEDの出力
     analogWrite(10,B) ;               // 10番ピンから青LEDの出力
}
---------------------------------------------------------------------
半固定抵抗のツマミを回すとLED色が変化すると思います。

《やさしく解説》

半固定抵抗について

アナログ入力は電圧の0〜5Vを0〜1023の値に変換して読み込みます。
今回配線した半固定抵抗は10KΩで約75〜570の値で読み取るみたいです。

ツマミを右に回せばLEDは黄・赤方向、左に回せば青方向に向かい最後には赤です。
 左←(赤色←→紫色←→青色←→水色←→緑色←→黄色←→赤色)→右

ツマミの位置が左9時の方向位置で約570程の値です、右に回し12時の位置で約75程の値を読込みます。 また、配線を5V(赤線)とGND(黒線)で入れ替えると、右に回しで570程となり逆になります。

抵抗値の異なる半固定抵抗や他の可変抵抗を取り付けた場合は約75〜570と限りません。
今回プログラム(constrain関数)で、読取った数値を80−550の範囲で切り取っています、 80より小さいと80を返し、550以上は550を返し、それ以外はそのまま数値を返します。

《RGBカラー値を直接指定する方法》  *2)

RGBカラー値は各色の指定値が0-255の範囲内で行いますね、で、ArduinoのPWM値指定も同じです。
なのでぇ、そのまま当てはめれば良いですね。
すなわち
     analogWrite(9 ,0-255) ;     //  9番ピンから赤LEDの出力
     analogWrite(11,0-255) ;     // 11番ピンから緑LEDの出力
     analogWrite(10,0-255) ;     // 10番ピンから青LEDの出力
なのでぇ、
     analogWrite(9 ,255) ;       //  9番ピンから赤LEDの出力
     analogWrite(11,255) ;       // 11番ピンから緑LEDの出力
     analogWrite(10,0) ;         // 10番ピンから青LEDの出力
とすると黄色で点灯します。
GIMP色TOOL
色の混ぜ合わせぐわいの色値データ等は画像編集
ソフト(GIMP等)で行ってみれば良いでしょう。
左図はGIMPでの例です。
図の各色の横か"HTML表記(N):"の所を見ます、
RGBで並んでいます。
但し、LEDなのでチョイスした色の様には行きませんよ。

(スケッチのサンプル)

下記がスケッチプログラムです、コピーペーストして貼り付けて下さい。
スケッチをダウンロードしたい方はこちら
ダウンロードスケッチの保存先と開き方はこちらを参照下さい。
---------------------------------------------------------------------
#define RED_PIN               9    // 赤LEDの出力ピン
#define GREEN_PIN            11    // 緑LEDの出力ピン
#define BLUE_PIN             10    // 赤LEDの出力ピン

#define RGBLED_RED            0    // 赤色
#define RGBLED_GREEN          1    // 緑色
#define RGBLED_BLUE           2    // 青色
#define RGBLED_YELLOW         3    // 黄色
#define RGBLED_ORANGE         4    // 橙色
#define RGBLED_BRIGHT_GREEN   5    // 明るい緑色(若草色)
#define RGBLED_MAGENTA        6    // 紅紫色(明るいピンク)
#define RGBLED_PINK           7    // 桃色
#define RGBLED_LIGHT_BLUE     9    // 明るい水色
#define RGBLED_BLUE_GREEN    10    // 青緑色
#define RGBLED_SKY_BLUE      11    // 明るい空色
#define RGBLED_WHITE         12    // 白色
#define RGBLED_OFF           13    // 消灯

// RGB色値のデータ
unsigned int RGB_ColorData[3][14] = 
// 赤色  緑色 青色  黄色 橙色  明緑 紅紫  桃色 ???  水色 青緑  空色  白色 消灯
{ {0xFF,0x0 ,0x0 ,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0x0 ,0x0 ,0x0 ,0xFF,0x0 }, // 赤LED値(R)
  {0x0 ,0xFF,0x0 ,0xFF,0X80,0xFF,0x0 ,0x0 ,0x0 ,0xFF,0xFF,0x80,0xFF,0x0 }, // 緑LED値(G)
  {0x0 ,0x0 ,0xFF,0x0 ,0x0 ,0x0 ,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x0 }  // 青LED値(B)
} ;


void setup() {
}
void loop() {
     RGBLED_Set(RGBLED_PINK) ;
     delay(100) ;
}
// RGB色値を色名で指定する処理
// value : RGB色値のデータの色番号(配列)を指定します。
void RGBLED_Set(unsigned int value)
{
     RGBLED_Out(RGB_ColorData[0][value],RGB_ColorData[1][value],RGB_ColorData[2][value]) ;
}
// RGBのLEDへPWM出力を行う
// RGB色値のデータ以外の色は自分で指定(ブレンド)しましょう。
void RGBLED_Out(unsigned int red,unsigned int green,unsigned int blue)
{
     analogWrite(RED_PIN,red) ;       // 赤LEDの出力
     analogWrite(GREEN_PIN,green) ;   // 緑LEDの出力
     analogWrite(BLUE_PIN,blue) ;     // 青LEDの出力  
}
---------------------------------------------------------------------

《音の大きさでLEDを可変させる回路(中級編)》

音センサーを使用して、音の大きさに合わせ段々に赤色→黄色→緑色→水色→青色→紫色と変化 させる回路はこちらを参照して下さい。 *1)



RGB色指定の記事追記(*2) 2020/04/03
追記(*1) 2012/06/18


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.