RGBフルカラーLEDの色を段々に変化点灯させますパート1
〔パート2〕
〔パート3〕
〔Arduinoの動かせ方入門に戻る〕
RGB3色フルカラーLEDを配線して、赤色→黄色→緑色→水色→青色→紫色に変化させます。
HSVの色空間モデルを真似たS/V無し(LEDだし必要ないかなっと?)でHのみで制御してます。
@まずは、下記図画面の様に配線しましょう。
LEDのことは下の方を見て下さい。(LED足の向きに注意)
Aarduinoボード(Arduino Duemilanove 328)はUSBケーブルで接続して、arduino IDEを起動させます。
BIDEに下記のスケッチプログラムをコピーペーストして貼り付けて下さい。
ちょっと寄り道のスケッチで、LEDを赤色→緑色→青色で点灯させます。
LEDの点灯チェックと明るさチェックと配線チェックが出来ますね。
---------------------------------------------------------------------
void setup() {
pinMode( 9,OUTPUT) ; // 赤LED接続のピン(9番)をデジタル出力に設定
pinMode(10,OUTPUT) ; // 青LED接続のピン(10番)をデジタル出力に設定
pinMode(11,OUTPUT) ; // 緑LED接続のピン(11番)をデジタル出力に設定
digitalWrite( 9,LOW) ;
digitalWrite(10,LOW) ;
digitalWrite(11,LOW) ;
}
void loop() {
digitalWrite( 9,HIGH) ; // 赤LEDを点灯
digitalWrite(10,LOW) ;
delay(300) ;
digitalWrite(11,HIGH) ; // 緑LEDを点灯
digitalWrite( 9,LOW) ;
delay(300) ;
digitalWrite(10,HIGH) ; // 青LEDを点灯
digitalWrite(11,LOW) ;
delay(300) ;
}
---------------------------------------------------------------------
CIDEツールバーの赤枠部分「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを行います。
D正常終了後、LEDが赤色→緑色→青色で点灯すればOKですね。
E今度は本番スケッチプログラムです、コピーペーストして貼り付けて下さい。
スケッチをダウンロードしたい方はこちら。
ダウンロードスケッチの保存先と開き方はこちらを参照下さい。
---------------------------------------------------------------------
void setup() {
}
void loop() {
int H ;
int R , G , B ;
/* HSVのH値を0-360で回します */
for (H=0 ; H<=360 ; H++) {
/* 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の出力
delay(100) ;
}
}
---------------------------------------------------------------------
FIDEツールバーの「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを行います。
G正常終了後、LEDが段々に赤色→黄色→緑色→水色→青色→紫色と変化して行くと思います。
《やさしく解説》
RGB3色フルカラーLEDについて
LEDには極性が有ります、
一番長い足がGND(カソードコモン)です、arduinoのGND端子に接続します。
赤の足を330Ωの電流制限抵抗を介してarduinoの9番ピンに接続します。
青の足を470Ωの電流制限抵抗を介してarduinoの10番ピンに接続します。
緑の足を220Ωの電流制限抵抗を介してarduinoの11番ピンに接続します。
このLEDは秋月電子通商のこちらで購入しました。
電流制限抵抗
LEDの順方向電流(IF)と順方向電圧(VF)がデータシート等に書いてあると思います、
例えばIFが10mAで、VFが2.5Vで、arduinoのアナログ出力が5Vとすると、
(arduino出力−順方向電圧)÷ 順方向電流 = 電流制限抵抗値
よって、(5V - 2.5V) ÷ 0.010A = 250Ω(250Ωは無いので240Ωか270Ωを使います)
10mAは0.010AというふうにAに変換して計算します。
だいたい120Ω〜680Ωのあたりだと思います。
データシートによると、このLEDは、
赤LEDでVF=2.0V・緑と青LEDでVF=3.6V IFは最大50mAとなっています。
今回は、赤LEDでIF=9.0mA・緑LEDでIF=6.5mA・青LEDでIF=3mAぐらいの割合で制御しています。
抵抗値を変えると色合いが変化します、調整してみて下さい。
(20mA以上は流さないように、arduino壊れるしぃ、目がいたい)
スケッチについて
今回はpinModeは使いませんアナログは指定不要です、
アナログは入出力のピン位置は決まっていて、デジタルの様に入出力を兼用しませんから。
analogWrite(pin,value)
指定したピン(pin:9・10・11番ピン)からアナログ値を出力します。
value: 出力するアナログ値(0〜255)を指定する。
arduinoは0〜255の範囲をPWM制御(0Vと5Vを高速で入切りする制御)で出力します。
アナログ出力はデジタルピンの3、5、6、9、10,11番ピンから出力可能です
(PWM制御についての詳しい話はこちらのページを参考にして下さい。)
delay(value)
プログラムを指定した時間だけ一時停止します。
value:停止したい時間を指定します、単位はミリ秒です。
delay(10000)なら10秒ですね、1秒は1000msです。
G=map(H,0,120,0,255)
Hの数値を0−250の範囲に変換してGに返します。
Hの数値は0−120の範囲内で指定します。
例えば、H=120→G=255 H=60→G=127 H=0→G=0 となります。
HSVについて
これが通常のHSV色空間モデル図です。
Hが色相(Hue)、色の種類を表し0〜360の範囲、又は0〜100%です。
Sが彩度(Saturation)、鮮やかさを表し、0.0〜1.0の範囲、
又は0〜100%です。
Vが明度(Value)(あるいはB:Brightness)、明るさを表し、
0.0〜1.0の範囲、又は0〜100%です。
今回の制御はSとVは考えずにLEDまかせで、Hのみの考え方です。
赤(0°)は緑方向(120°)に向かう毎に赤を少しずつ減らしています、
これは、アナログPWM出力で255から0にしていると言う事です。
緑の場合は、赤から緑方向に向かうほど緑の量を増やしています、
この場合はアナログPWM出力で0から255にしていると言う事です。
(Hが60°なら赤も緑も半分点灯[黄色]、アナログPWM出力は127です)
また、赤(360°)は青方向(240°)に向かう毎にも同じように赤を
少しずつ減らしています。
こんどは青が緑と同じように赤と混ざり合います。
(真ん中で[紫色]になります)
この考え方で各、赤、緑、青においてHの各値(青なら240-360と120-240)からアナログ出力値0〜255に、
map()関数でスケール変換をしてLEDにPWM出力しています。
《半固定抵抗値でLEDを可変させる回路》
上の回路に半固定抵抗を追加してその値で段々に赤色→黄色→緑色→水色→青色→紫色と変化
させる回路はこちらを参照して下さい。
《音の大きさでLEDを可変させる回路(中級編)》
音センサーを使用して、音の大きさに合わせ段々に赤色→黄色→緑色→水色→青色→紫色と変化
させる回路はこちらを参照して下さい。 *1)
追記(*1) 2012/06/18
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.