2016-01-21 22:17 | カテゴリ:1/8モデル
少しずつ工作を進めています。

まず、行きがかり上、LEDのプログラムの検討を済ませます。
このLEDは、RGB各色256階調ですので、256x256x256色の指定が出来ますが、なにせ私の目にはそんなに細かな違いが分かりません。
いっそ、16色ほどで十分ですので、少ない色をランダムに表示できるルーチンの確認をしました。

先日のルーチンを少し変更して、この様な形にしました。

//-----------------------------------------------
// CPU内蔵LEDへの各RGBの値を40づつ変化させてカラーを変更する
//-----------------------------------------------
while (1) {
red[0]=rand()/8192*32; // rand()関数は0から32767の乱数を発生
green[0]=rand()/8192*32; // 8192で除して、0、1、2、3を得る
blue[0]=rand()/8192*32; // それに32を掛けて、各色の色輝度
// 0から96のとび値を得る
// 最大輝度は255だが明るすぎるので96に

RC1 = 0; // RC0をLにして
__delay_us(50); // LEDのリセット信号とする

disp_rgb(red[0], green[0], blue[0]); //1個目のLED
disp_rgb(red[1], green[1], blue[1]); //2個目のLED
disp_rgb(red[2], green[2], blue[2]); //3個目のLED
disp_rgb(red[3], green[3], blue[3]); //4個目のLED
disp_rgb(red[4], green[4], blue[4]); //5個目のLED

red[4] = red[3]; //配列データを順送りする
green[4] = green[3];
blue[4] = blue[3];

red[3] = red[2];
green[3] = green[2];

blue[3] = blue[2];
red[2] = red[1];
green[2] = green[1];
blue[2] = blue[1];

red[1] = red[0];
green[1] = green[0];
blue[1] = blue[0];

__delay_ms(200); //表示間隔をあける

}

}


ポイントは、
red[0]=rand()/8192*32;
の文で、rsnd()関数で乱数を発生さえます。この関数では0-32767の乱数を得ることが出来ます。
これを8192で割って、答えを得ると、0,1,2,3のいずれかになります。
それに32を掛けると、
0、32、64、96の値が得られ、これを色指定の数として使用すれば、メリハリの利いた色が得られます。
また、256フルでは、光が強すぎましたので、最大数を96としています。
これでも結構明るいです。



こんな感じになりました。
ビデオの感度のせいか、少しハレーション気味ですが、色がきびきび変わっているのが見て取れるかと思います。
フライデーにも、これを利用したいと思います。


もう一つ、フライデーの工作をしました。
フライデーの口に当たる部分の電飾準備です。

DSC01720.jpg

DSC01721.jpg

ここは、透明のパーツと、その背面のグレーのパーツを組み合わせて、胴体に取り付ける設計です。

裏側から電飾しようと考えていましたが、背面のパーツが邪魔です。
そこで、背面のパーツは、枠の部分を残して、ほとんどを切り取ってしまいました。
ドリルで数箇所穴を開け、糸鋸で切り取り、リューターとヤスリで仕上げました。
難しいですね、綺麗に仕上げるのは。
6jiroさんのように、上手くは出来ませんが、何とか穴を開けました。

DSC01723.jpg

DSC01726.jpg

クリアパーツを付けるとこんな感じです。
後ほど、この背面パーツの後ろからLEDで電飾しますが、「頭部の失敗」がありますので、どの様に光らせるか悩みましたが、手持ちの断面が直角三角形のアクリル棒を切って、何本かを裏から貼り付けると、プリズムの原理で、横からのLED照明を綺麗に反射して、正面に光らせてくれるのではないかと、勝手に想像しています。

DSC01722.jpg


テストは先ですが、たぶん、大丈夫でしょう。



管理者のみに表示する