光ファイバー 卓上オブジェ を作ってみた( NeoPixel フルカラー LED 使用 )

記事公開日:2016年12月5日
最終修正日:2016年12月6日

スポンサーリンク

こんばんは。

前回に引き続き、Adafruit の NeoPixel フルカラー LED と ESPr Developer ( ESP-WROOM-02, ESP8266 ) を使った卓上イルミネーションオブジェですが、今回は、よりクリスマスらしく、光ファイバーを使ってみました。
紙と合わせても結構イイ感じになりました。
以下の動画をご覧ください。

いかがでしょうか。
実際は動画よりも、もっとキレイに見えます。
前回と殆ど同じプログラムで、中の物を光ファイバーに変えただけです。
こうすると、クリスマス用の卓上オブジェとして使えそうです。
ただ、光ファイバー越しでも裸眼で直接見続けると、目に悪影響を与えそうなくらい明るいので、ご自分の環境に合った明るさにしてください。

ということで、これの作り方を説明します。

1.電子工作用準備

前回と重複しているものがありますが、念のため載せておきます。
(※前回と同様にNeoPixel は5V制御です。ESPr Developer は3.3Vロジック出力なので、うまく動作しない場合があります。
その場合はArduino UNO などを使用してください)

●NeoPixel Ring – 12連フルカラーシリアルLED
Adafruit製
前回の記事と同じです。
Amazon.co.jp

●ESPr Developer ( ESP-WROOM-02 開発ボード )
スイッチサイエンス製
前回の記事と同じです。

●ミニブレッドボード
Amazonoでは購入したことが無いのですが、例えばこんな感じで売ってました。

●電線(単線) 0.65mm
ブレットボードに挿せる固い電線で、0.65mmがちょうど良いです。
Amazonでは以下のように販売されています。

●2.54mm ピンヘッダ
前回の記事と同じです。
NeoPixel や ESPr Developer にハンダ付け済みでしたら、今回は不要です。

●その他、ハンダこて、ハンダ、ニッパ、USBケーブル、パソコン等

2.オブジェ用準備

●光ファイバー
今回はディスプレイ用プラスチック製の直径1.0mmの物を使用しました。
Amazonではこんな感じで売っていて、1m20本を2組使いました。

●ねりゴム
通称、「 ねり消し 」というものです。
光ファイバーを固定するものとして使います。

●丸カップ 86-120
前回と同じです。
材質A-PETの丸カップで開口部86mm、120ccのものです。

Amazonのこれは使ったことが無いので、今回の工作に合うかどうか分かりません。
底のサイズや形状が気になりますが、おそらく合いそうな気がします。
(合わなかったらスミマセン)
このカップはハサミで簡単にカットできるので、今回の工作にピッタリです。
これと似たものであれば何でも構わないと思います。

●透明ストロー
今回は直径6mmくらいのものを使いました。
光ファイバーの固定用に使います。

コピー用紙(または格安プリンター用紙) 1枚
これは何でも結構ですが、高価な厚手の紙はダメです。
安価な薄手の紙で十分です。
要するに、光で透けなければ意味がありません。
もちろん、和紙でも良いと思います。

●セロテープ又はメンディングテープ、ハサミ、カッター、油性マジック等

3.NeoPixel と ESPr Developer の接続

NeoPixel と ESPr Developer ( ESP-WROOM-02, ESP8266 )の組み立てや接続は、前回の記事をご覧ください。
(※前回と同様にNeoPixel は5V制御です。ESPr Developer は3.3Vロジック出力なので、うまく動作しない場合があります。
その場合はArduino UNO などを使用してください)

ただ、今回はオブジェとマイコンボードを分けるために、ミニブレッドボードを使用しました。
前回の記事のように NeoPixel と ピンヘッダ をハンダ付け済んだら、このようにミニブレッドボードを用意します。NeoFiber13

こんな位置関係で挿し込みます。
NeoFiber14

次に、0.65mm単線電線をブレッドボードに挿せるように、ニッパ―又はワイヤーストリッパー等で3本の線の被覆を剥きます。
NeoFiber15

こんな感じになります。
NeoFiber16

そうしたら、このように撚ると良いと思います。
NeoFiber17

接続方法は前回の記事を参照して、このように接続してください。
NeoFiber18

前回の記事のプラスチックカップの電線部分はこんな感じでカットしておくと良いと思います。
NeoFiber19

4. 光ファイバー オブジェ製作

では、オブジェ側の加工をしていきます。

まず、透明ストローを 4cm くらいハサミでカットします。
それを6本作ります。
NeoFiber21

次にプラスチック製光ファイバーを使います。NeoFiber10

光ファイバーは物凄くよく切れるカミソリで切った方が良いらしいのですが、今回はニッパ―で切ります。
切る長さは、60~150mm くらいの間で、適当に好きな長さを、できるだけランダムに切っていきます。
1m20本、2組を殆ど全部使うと思います。

ただ、注意していただきたいのは、よく切れるニッパを使い、底辺が平らなニッパを使う方が良いです。下図の様な電子工作用のものを使いました。
NeoFiber22

光ファイバーの切断面は出来るだけキレイに垂直に切れていなければ、光量が落ちてしまいます。
高級な光ファイバー専用カッターがあればいいのですが、私は持ち合わせていないので、できるだけよく切れるニッパ―で我慢しました。
やはり光量が結構落ちますが、オブジェにはほぼ問題ないレベルで落ち着いたのでヨシとします。
因みに、底が平らなニッパ―を使っても、切った反対側は山型になっているので、反対側も真っ直ぐに切り直した方が良いです。

また、上の写真では斜めに切っていますが、光ファイバーの特性上、斜めに切ると逆に光量が落ちます。
やはり、線方向に垂直に真っ直ぐ切ることがポイントになります。

1m 20本 2組の光ファイバーをランダムに切り終えたら、このようにストローに入れていきます。
できるだけ、長さはランダムに選択して、入れる時はストローの底まで入れます。
その方が光が強くなります。
NeoFiber23

だいたいこんな感じになります。
図では4本ですが、全部で6本は作った方が良いです。
光ファイバーの向きはディスプレイする方向を考えながら挿入していった方が良いです。
つまり、見る方向に光ファイバーの切断面が向いていないと意味が無いわけです。
NeoFiber25

次に、ねりゴム(ねり消し)を使います。
NeoFiber11

封を開けてこのようにダンゴにしておきます。
実際に使うのは、これの1/4程度です。
NeoFiber12

少し切り取って、ストローが通るようにこのようにドーナツにします。
NeoFiber26

そして、ストローの台座をこのように作ります。
NeoFiber27

下から見ると、こんな感じになっていればOKです。
光ファイバーがしっかり底まで着いることがポイントです。
まず、これを3本だけ作ってください。他は後で作った方が作りやすいです。
NeoFiber28

ここまで、とりあえず作ります。
NeoFiber29

次に、NeoPixel の外周に合わせて、前回の記事のプラスチック円盤にマジックで描きます。
見えないところなので、このようにフリーハンドで良いと思います。
NeoFiber30

次に、先ほど作った ねりゴム台座光ファイバーを3本だけ、下図の様に円周のすぐ内側に均等に置き、ねりゴムを手で押さえて安定させます。
LED光が必ず光ファイバーに当たる位置に置くことがポイントです。
NeoFiber31

次に、円周の内側の空いたところに下図の様にねりゴムリングをストローファイバーに通した状態で置いていき、位置が決まったらねりゴムを押さえて固定していきます。
NeoFiber33

この様になればOKです。
NeoFiber34

これを横から見た図です。
光ファイバーの切断面の殆どが前を向いているように光ファイバーの位置を調節するところがポイントです。
NeoFiber35

次に、ねりゴムが見えないように、コピー用紙をカットして、クルッと巻いてセロテープ又はメンディングテープでこのように止めます。
NeoFiber36

そうしたら、ストロー部分をうまく持ち上げて、このようにセットします。
NeoFiber37

こんな感じでオブジェ部分の完成です。
NeoFiber38

5.Arduino IDE スケッチ入力

Arduino IDE の設定や Adafruit ライブラリのインストールは前回の記事を参照してください。

スケッチは前回のものより少々変えています。
ホワイト/グリーンパターンや、ホワイト/ブルーパターンを追加しています。

#include <Adafruit_NeoPixel.h>

#define PIN            5 //シリアル通信GPIOピン番号
#define MAXPIXELS      12 //LED素子の最大数

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(MAXPIXELS, PIN, NEO_GRB + NEO_KHZ800);

uint8_t LedNum1_Inc = 9; //最初にフェードインするLED番号
uint8_t LedNum1_Dec = 8; //フェードアウトするLED番号
uint8_t LedNum2_Inc = 5;
uint8_t LedNum2_Dec = 4;
uint8_t LedNum3_Inc = 1;
uint8_t LedNum3_Dec = 0;

uint8_t ChangeType = 0; //LED点灯パターンを決める引数
uint32_t ChangeTime; //LED点灯パターンを変える時間
int cnt = 0; //256段階でLEDをフェードさせるためのカウント

void setup() {
  pixels.begin(); // This initializes the NeoPixel library.
  pixels.setBrightness(255); //Max 255
  ChangeTime = millis();
}

void loop() {
  if(millis() - ChangeTime > 15000){ //15 second Type Change
    ChangeType++;
    if(ChangeType == 5) ChangeType = 0;
    ChangeTime = millis();
  }
  
  switch(ChangeType){
    case 0: //RGB type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, 0, 0));
      pixels.show(); // This sends the updated pixel color to the hardware.
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 0, 0));
      pixels.show();
  
      pixels.setPixelColor(LedNum2_Inc, pixels.Color(0, cnt, 0));
      pixels.show();
      pixels.setPixelColor(LedNum2_Dec, pixels.Color(0, 255-cnt, 0));
      pixels.show();
  
      pixels.setPixelColor(LedNum3_Inc, pixels.Color(0, 0, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum3_Dec, pixels.Color(0, 0, 255-cnt));
      pixels.show();
      break;
      
    case 1: //Green White
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, 100, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 100, 255-cnt));
      pixels.show();
      break;
      
    case 2: //CMY type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, cnt, 0));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 255-cnt, 0));
      pixels.show();
  
      pixels.setPixelColor(LedNum2_Inc, pixels.Color(0, cnt, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum2_Dec, pixels.Color(0, 255-cnt, 255-cnt));
      pixels.show();
  
      pixels.setPixelColor(LedNum3_Inc, pixels.Color(cnt, 0, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum3_Dec, pixels.Color(255-cnt, 0, 255-cnt));
      pixels.show();
      break;
      
    case 3: //Orange, Green type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, 10, 0));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 10, 0));
      pixels.show();
      break;

    case 4: //White, Blue type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, cnt, 200));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 255-cnt, 200));
      pixels.show();
      break;
  }
  cnt++;
  
  if(cnt == 256){ //フェードが最大、最少になったらLED素子を変える
    LedNum1_Inc++;
    if(LedNum1_Inc >= 12) LedNum1_Inc = 0;
    LedNum1_Dec++;
    if(LedNum1_Dec >= 12) LedNum1_Dec = 0;
    LedNum2_Inc++;
    if(LedNum2_Inc >= 12) LedNum2_Inc = 0;
    LedNum2_Dec++;
    if(LedNum2_Dec >= 12) LedNum2_Dec = 0;
    LedNum3_Inc++;
    if(LedNum3_Inc >= 12) LedNum3_Inc = 0;
    LedNum3_Dec++;
    if(LedNum3_Dec >= 12) LedNum3_Dec = 0;
    cnt = 0;
  }
}

6.コンパイル書き込み、実行

では、Arduino IDE でコンパイル書き込み、実行させてみてください。

色は以下のように5パターンあります。

●RGB ( Red, Green, Blue )パターン
この色はクリスマスっぽい気がします。
NeoFiber02

●White/Green パターン(ピンクっぽく見える)
実際の色の方がクッキリ見えます。
NeoFiber03

●CMY ( シアン、マゼンダ、イエロー ) パターン
NeoFiber04

●オレンジ/グリーンパターン
これは「和」っぽいテイスト感があります。
NeoFiber05

●White/Blue パターン
これもクリスマスっぽいですね。
NeoFiber06

7.まとめ

いかがでしょうか。
うまくできましたでしょうか。
単純な構造にしては、見た目は意外とイイ感じだと思っています。
これで、今年のクリスマスの卓上イルミネーションオブジェは何とかいけそうです。
これでも裸眼で見続けていると結構辛い明るさなので、適度にBrightnessを調節してください。0~255の間の数値で変えればよいです。

これを使って、光ファイバーを松葉と見立てて、竹を紙で表現すれば、正月飾り対応にも出来そうです。
それをスマホでWi-Fiで色をコントロールすれば、いろいろ使えそうです。

次回はそれに挑戦してみようと思ってます。
ではまた・・・。

スポンサーリンク

Amazon.co.jp広告







投稿者:

mgo-tec

Arduino, ESP8266, ESP-WROOM-02 等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってます。

コメントを残す

メールアドレスが公開されることはありません。


*