まじめにフルカラーLEDを点灯実験する前に勉強してみた。
【RGB】
・3原色を24bitで表したもの
・コンピュータ内部で用いられる形式
【HSV】
・色相(Hue) RGB連続カラー 0..360(0..100)で色を表す(スペクトル風)
・彩度(Saturation) 鮮やかさ。最低はグレー最高は各色
・明度(Value) 明るさで黒から白へ変化のイメージ
の三つの成分からなる色空間
画像はWikiから借用
三角錐モデルの場合は、
・底辺(上)の円周縁がRGB最高彩度
・底辺(上)の水平が彩度で周辺ほど鮮やか 0..100
・頂点(下)が明度ゼロで黒 0..100
【適用分野】
HSVは明るさや鮮やかさなど人間の直観的な捉え方に沿っているので、グラフィックデザイナーはHSVを利用する傾向と
【変換】
Wikiの「HSV色空間」にRGBHSVの変換式ソースが掲載されている。
なるほど、今までの謎が解けましたわい。
【Arduinoソフトウエア処理】
・RGBの値を各色ごとに0..255に変化させても思ったような連続的な色にならないのはHSV形式で変化させていないからカナ
HSVで数値を連続的に変化させて、HSV=>RGB変換をかけて連続的に明るさを変えるのが良さげではあるが、HのみでSVは無視したソースを発見
以下ソースのオリジナルサイト http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/RGBLED/RGBLED1.htm
H 青を0にして、赤・緑を点灯し表示割合を変えていく
H 赤を0にして、緑・青を点灯し表示割合を変えていく
H 緑を0にして、青・赤を点灯し表示割合を変えていく
と言った処理です。
for (H=0 ; H /* HSVのH値を各LEDのアナログ出力値(0-255)に変換する処理 */
if (H /* 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 /* 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 ;
}
analogWrite(9,R) ; analogWrite(11,G) ; analogWrite(10,B) ;
delay(100) ;
}
ブレッドボードでこねてみた。3色生産時期が全く違うLEDなので、明るさが大きく違う。
緑に至っては20年ぐらい前のLEDかな?
このソースの謎は常に一色は消灯しっぱなしなのだが、これを点灯させるとどうなんでしょ?(四の五の言わずにやってみれってさ)
15年ぐらい前に秋月で買って投げっぱだった3色混合式LED 一灯で200円!(現時点秋月で40円程度、250円で1Wが買える)
もったいないので配線して光らせてみた。結構暗い・・・
一番もったいないのは使わないことです。 orz
これで以降の実験をしようかな。