catalinaの備忘録

ソフトウェアやハードウェアの備忘録。後で逆引きできるように。

PWM制御でLEDの明るさ制御

コスプレ用の小物でオーブを作ってあるので、そのオーブの中に明かりを入れて点灯させようと思う。

明かりの点灯のさせ方

魔力を集中させている状態を明かりで演出したい。

コスプレのキャラ的には攻撃魔法ではなく回復とか支援系なので、レーザーのような激しい閃光ではなく、ロウソクのような全方位を照らす柔らかい光。

また、光り方も詠唱が進むにつれて明るくしたい。

まずは、柔らかい光を演出するための光の明滅から。

 

赤色のオーブに白色の超高輝度LED OSPW5161Pを入れて様子を見てみる。抵抗は100Ω。

arduinoの出力ピンに直接ぶらさげてどうなるか確認。

 

光の明滅は写真ではわかりにくいので、実験結果の動画をニコニコにupしてみました。


コスプレ用小物の電飾実験 ‐ ニコニコ動画:GINZA

 

 

aruduinoのコード

#define LED_PIN 13
#define LED_PIN1 11
#define LED_PIN2 9
#define LED_PIN3 6
#define LED_PIN4 5

#define LED_DELAY 5

#define MIN_LUM  10    // 0-255の範囲で設定する
#define MAX_LUM  255   // 0-255の範囲で設定する

// 初期化
void setup(){
 
  // LEDのピンを出力に
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
  pinMode(LED_PIN3, OUTPUT);
  pinMode(LED_PIN4, OUTPUT);
}

void loop() {
  int val = 0;
  int i;
  for(i = MIN_LUM; i <= MAX_LUM; i ++){
    val = i;
    analogWrite(LED_PIN, val);
    analogWrite(LED_PIN1, val);
    analogWrite(LED_PIN2, val);
    analogWrite(LED_PIN3, val);
    analogWrite(LED_PIN4, val);
    delay(LED_DELAY);
  }
  for(i = MAX_LUM; i > MIN_LUM; i --){
    val = i;
    analogWrite(LED_PIN, val);
    analogWrite(LED_PIN1, val);
    analogWrite(LED_PIN2, val);
    analogWrite(LED_PIN3, val);
    analogWrite(LED_PIN4, val);
    delay(LED_DELAY);
  }
}

 

コード説明

forループが2個あるうちの、前半がだんだん明るくしていくループ。後半がだんだんくらくしていくループ。

 

LEDを5個ぶらさげているので、5個それぞれを設定していく。

光の揺らめきなんかを表現したいときは、LEDの1個だけは明滅パターンを変えたりするかもしれない。

 

明るさの上限/下限は

#define MIN_LUM  10    // 0-255の範囲で設定する
#define MAX_LUM  255   // 0-255の範囲で設定する
で決めている。

 

明るさのパラメータはPWM出力で設定するので、analogWrite関数で指定する。

analogWrite関数の情報。

Arduino 日本語リファレンス

これによると、analogWrite関数では値255を設定したときは電源電圧と同じ電圧レベルになるらしい。

抵抗の100Ωも適当には決めてるけど、電源電圧と同じレベルが出力されたときにLEDが壊れない程度の抵抗値。

 

とりあえず魔法詠唱中みたいな感じにはできそう。

 

課題

LEDの光はそれなりに指向性が強いのでオーブの中央付近から放射状に方向を変えて配置したほうがいいかもしれない。

真下はオーブの支柱ともなる杖の部分なので、それほど必要ないかもしれないが。

 

あとはやっぱり足元に魔法陣を描きたい。

レーザー使えばなんとかなりそうなので色々試してみたい。