« HC08マイコンの使い方QY4A編 -《3》 英文・和文データシートを眺めよう | メイン | HC08マイコンの使い方QY4A編 -《4》 CodeWarrior と開発ツールを準備しよう »

LEDイルミネーションの製作(第6回 最終回) 応用編・星のまたたき


 最終回は、応用編として同じ回路で星型オブジェをちらちら点灯させてみます。

星型のオブジェ
 原理は雪の結晶と同じですが、頂点が奇数のためにLED 3個ずつ並列の回路がうまいこといきません。LEDを一つダミーとするか、2個と3個の明るさを抵抗で微調整するなど現実的ではありません。そこで、5個直列にして電源を15V以上(18V以上がベター)にしました。電流制限抵抗は47Ωです。また、この電圧で今までの雪の結晶を点灯させても多少明るくなる程度で、何の問題もありません。
 なお、LEDはチップ型を使って頂点ではなく谷部に透明な接着剤で直接貼り付けました。LEDの取り付けは、この方法が1番簡単です。使った接着剤は多用途型の「スーパーX」です。

チップ取り付け.jpg
 

ちらちら点灯は「1/fのゆらぎ」で作る
 「1/fのゆらぎ」とは、周波数が高くなるにつれ反比例して信号レベルが小さくなる波形のことで、「信号レベル-周波数」を両対数グラフにすると下図になります。ゆっくり明滅しながら時折パパッとまたたくようなイメージです。
投稿クリスマスイルミ挿絵_1/fゆらぎ.png
 
 「1/fのゆらぎ」作成方法は数々ありますが、シンプルな間欠カオス法という方法で作成します。0~1の範囲の変数xについて、
x<0.5の場合    x=x+2×x×x
x>=0.5の場合    x=x-2×(1-x)×(1-x)
でループさせます。
 この数式でほぼOKですが、0と1付近で張り付きやすい(点いたまま・消えたままの状態が長く続く)ので実際のプログラムでは0/1に近づいたときにランダムな要素を加えています。このあたりは見る人の感覚なので、点灯させてみて調整するとよいでしょう。

1/F波形.png
プログラムで作成した1/fゆらぎの波形
 

プログラムを改造する
 出力0~7のうち0と1をまたたき出力にします。「if (nightcount<STOP_TIME) 」以下を下記のように変更しました。
if (nightcounti<STOP_TIME) {  // 5時~10時?
	if((nightcount & 0x3)==0) {	// 速すぎるので四回に一回にする(40ms)
		for(i=0;i<2;i++) {
			x = x1[i];
			if(x<0.5) {
				x = x + 2 * x * x ;
			} else {
				x = x - 2 * (1.0 - x) * (1.0 - x);
			}
			// 1.0と0.0に張付きやすいのでランダム要素を入れる
			if (x<0.005) {
				x = (float)(rand())/256;
			}
			if (x>0.999) {
				x = (float)(rand())/256;
			}
			x1[i] = x;
			x = x * 251.0 + 5.0;		// 完全な消灯にはしない
			led[i] = (unsigned int8)x >> 3;	// 32段階に圧縮
		}
	}
	for(i=2;i<8;i++) {
		cond[i]++;
		if (cond[i]<128) {				// 点灯中
			led[i]=(int8)(32-(cond[i]>>2)); 	// 32段階で暗くなる
		} else {					// 消灯中
			led[i]=0;
			if (cond[i]>term[i]) {		// 消灯終了直前に次の消灯時間を計算しておく
				cond[i]=0;
				term[i]=calc_rand();
			}
		}
	}
}

 上記のプログラムのコンパイル結果ではPIC16F88のROM領域は46%、RAMは32%の使用なので、まだまだ余裕があります。もっといろいろなことができそうですね。
 「またたき」の演算には浮動小数点演算を使います。その演算時間は2個の点灯制御で約1.5ms/20MHzです。8MHzクロックの時は4ms弱かかることになります。多ピンのマイコンでより多くの星をコントロールするように修正するときには処理時間も確認しましょう。

 雪の結晶ではなく全部星型にしてしまえば、冬季に限らず一年中飾っておいてもよいですね。
 それでは、結晶5個と星2個をいっぺんに点灯させてみましょう。密集して点灯すると賑やかです。


<高野慶一>

(2008/08/18 プログラムリストの一部が欠けていたので修正。)


カテゴリ:

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/1746

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カテゴリ

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

Powered by
Movable Type 4.1